使用 Port Forwarding 存取叢集中的應用程式
此頁面說明如何使用 kubectl port-forward
連線至在 Kubernetes 叢集中執行的 MongoDB 伺服器。此類型的連線對於資料庫偵錯非常有用。
開始之前
您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具才能與您的叢集通訊。建議在至少有兩個節點且節點不充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個叢集,或者您可以使用下列 Kubernetes 體驗區之一
您的 Kubernetes 伺服器版本必須為 v1.10 或更高版本。若要檢查版本,請輸入kubectl version
。- 安裝 MongoDB Shell。
建立 MongoDB 部署與服務
建立執行 MongoDB 的部署
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
成功命令的輸出會驗證部署已建立
deployment.apps/mongo created
檢視 Pod 狀態以檢查其是否已就緒
kubectl get pods
輸出會顯示建立的 Pod
NAME READY STATUS RESTARTS AGE mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
檢視部署的狀態
kubectl get deployment
輸出會顯示已建立部署
NAME READY UP-TO-DATE AVAILABLE AGE mongo 1/1 1 1 2m21s
部署會自動管理 ReplicaSet。使用下列命令檢視 ReplicaSet 狀態
kubectl get replicaset
輸出會顯示已建立 ReplicaSet
NAME DESIRED CURRENT READY AGE mongo-75f59d57f4 1 1 1 3m12s
建立服務以在網路上公開 MongoDB
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
成功命令的輸出會驗證已建立服務
service/mongo created
檢查建立的服務
kubectl get service mongo
輸出會顯示建立的服務
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE mongo ClusterIP 10.96.41.183 <none> 27017/TCP 11s
驗證 MongoDB 伺服器是否正在 Pod 中執行,並監聽連接埠 27017
# Change mongo-75f59d57f4-4nd6q to the name of the Pod kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'
輸出會顯示該 Pod 中 MongoDB 的連接埠
27017
27017 是 MongoDB 的官方 TCP 連接埠。
將本機連接埠轉發至 Pod 上的連接埠
kubectl port-forward
允許使用資源名稱 (例如 Pod 名稱) 來選取要轉發連接埠的相符 Pod。# Change mongo-75f59d57f4-4nd6q to the name of the Pod kubectl port-forward mongo-75f59d57f4-4nd6q 28015:27017
與下列命令相同
kubectl port-forward pods/mongo-75f59d57f4-4nd6q 28015:27017
或
kubectl port-forward deployment/mongo 28015:27017
或
kubectl port-forward replicaset/mongo-75f59d57f4 28015:27017
或
kubectl port-forward service/mongo 28015:27017
以下任何指令皆可運作。輸出結果會與此類似
Forwarding from 127.0.0.1:28015 -> 27017 Forwarding from [::1]:28015 -> 27017
注意
kubectl port-forward
不會返回。若要繼續進行練習,您需要開啟另一個終端機。啟動 MongoDB 命令列介面
mongosh --port 28015
在 MongoDB 命令列提示字元中,輸入
ping
指令db.runCommand( { ping: 1 } )
成功的 ping 請求會返回
{ ok: 1 }
或者讓 kubectl 選擇本機埠
如果您不需要特定的本機埠,您可以讓 kubectl
選擇並分配本機埠,從而讓您無需管理本機埠衝突,語法也稍微簡單一些
kubectl port-forward deployment/mongo :27017
kubectl
工具會找到一個未使用的本機埠號碼(避開低埠號,因為這些埠號可能被其他應用程式使用)。輸出結果會與此類似
Forwarding from 127.0.0.1:63753 -> 27017
Forwarding from [::1]:63753 -> 27017
討論
連線到本機埠 28015 的請求會轉發到執行 MongoDB 伺服器的 Pod 的埠 27017。透過此連線,您可以使用您的本機工作站來除錯在 Pod 中執行的資料庫。
下一步
深入瞭解 kubectl port-forward。