在 deployment 完成後,可能會建立多個 pods,這些 pods 預設在 node 的 private ip 中,不會與 host 連線。正式的作法,是建立 NodePort service,或是 load balancer 轉送資料到 pods。
若需要暫時與其中一個 pod 連線,可以透過 kubernetes 的 port-forward 功能轉送資料。
先確認欲連線的 pod IP address:
$ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES my-nginx-7d76cf4997-68rmh 1/1 Running 0 19m 172.17.0.6 minikube <none> <none> my-nginx-7d76cf4997-d5lxt 1/1 Running 0 19m 172.17.0.5 minikube <none> <none> my-nginx-7d76cf4997-q6rx4 1/1 Running 0 19m 172.17.0.4 minikube <none> <none>
上表中,可以看到 pod 的 IP 都被指定在 172.17.0.x
下。這邊假設我們要在 127.0.0.1 的 port 8080 轉送到 172.17.0.4
這個 pod 的 port 80
:
$kubectl port-forward pods/my-nginx-7d76cf4997-q6rx4 8080:80 Forwarding from 127.0.0.1:8080 -> 80 Forwarding from [::1]:8080 -> 80
顯示 port-forwarding 狀態、且指令仍在執行沒有中斷,表示 port-forwarding 建立成功。接下來就可以從 127.0.0.1:8080
送資料到 pod 中 (範例中 pod 中為 nginx):
$ curl http://127.0.0.1:8080 <html><body><p> Hello World, kubernetes </p></body></html>
我明明應該要寫 code 的啊,為什麼現在都在寫 config …..