使用埠轉發訪問叢集中的應用程式
本頁展示瞭如何使用 kubectl port-forward
連線到在 Kubernetes 叢集中執行的 MongoDB 伺服器。這類連線對於資料庫除錯很有用。
準備工作
你必須擁有一個 Kubernetes 叢集,並且 kubectl 命令列工具必須配置為與你的叢集通訊。建議在至少有兩個不作為控制平面主機的節點的叢集上執行本教程。如果你還沒有叢集,可以使用 minikube 建立一個,或者使用這些 Kubernetes 遊樂場之一
你的 Kubernetes 伺服器版本必須是 v1.10 或更高。要檢查版本,請輸入
kubectl version
。- 安裝 MongoDB Shell。
建立 MongoDB Deployment 和 Service
建立執行 MongoDB 的 Deployment
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-deployment.yaml
成功命令的輸出會驗證 Deployment 已建立
deployment.apps/mongo created
檢視 Pod 狀態以檢查它是否就緒
kubectl get pods
輸出顯示了已建立的 Pod
NAME READY STATUS RESTARTS AGE mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4s
檢視 Deployment 的狀態
kubectl get deployment
輸出顯示 Deployment 已建立
NAME READY UP-TO-DATE AVAILABLE AGE mongo 1/1 1 1 2m21s
Deployment 自動管理 ReplicaSet。使用以下命令檢視 ReplicaSet 狀態:
kubectl get replicaset
輸出顯示 ReplicaSet 已建立
NAME DESIRED CURRENT READY AGE mongo-75f59d57f4 1 1 1 3m12s
建立一個 Service 以在網路上暴露 MongoDB
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml
成功命令的輸出會驗證 Service 已建立
service/mongo created
檢查已建立的 Service
kubectl get service mongo
輸出顯示已建立的 Service
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 的資訊。