使用 Port Forwarding 存取叢集中的應用程式

此頁面說明如何使用 kubectl port-forward 連線至在 Kubernetes 叢集中執行的 MongoDB 伺服器。此類型的連線對於資料庫偵錯非常有用。

開始之前

  • 您需要有一個 Kubernetes 叢集,並且必須設定 kubectl 命令列工具才能與您的叢集通訊。建議在至少有兩個節點且節點不充當控制平面主機的叢集上執行本教學課程。如果您還沒有叢集,可以使用 minikube 建立一個叢集,或者您可以使用下列 Kubernetes 體驗區之一

    您的 Kubernetes 伺服器版本必須為 v1.10 或更高版本。若要檢查版本,請輸入 kubectl version
  • 安裝 MongoDB Shell

建立 MongoDB 部署與服務

  1. 建立執行 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
    
  2. 建立服務以在網路上公開 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
    
  3. 驗證 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 上的連接埠

  1. 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
    
  2. 啟動 MongoDB 命令列介面

    mongosh --port 28015
    
  3. 在 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

上次修改時間:2024 年 2 月 26 日下午 4:59 PST:在文件中闡明 27017 是 MongoDB 的官方 TCP 埠 (ea6624ee62)