クラスター内のアプリケーションにアクセスするためにポートフォワーディングを使用する
このページでは、kubectl port-forwardを使用して、Kubernetesクラスター内で実行中のMongoDBサーバーに接続する方法について説明します。
この種の接続は、データベースのデバッグに役立ちます。
始める前に
Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 このチュートリアルは、コントロールプレーンのホストとして動作していない少なくとも2つのノードを持つクラスターで実行することをおすすめします。 まだクラスターがない場合、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 createdPodのステータスを表示して、準備完了であることを確認します:
kubectl get pods出力には作成されたPodが表示されます:
NAME READY STATUS RESTARTS AGE mongo-75f59d57f4-4nd6q 1/1 Running 0 2m4sDeploymentのステータスを表示します:
kubectl get deployment出力には、Deploymentが作成されたことが表示されます:
NAME READY UP-TO-DATE AVAILABLE AGE mongo 1/1 1 1 2m21sDeploymentは自動的にReplicaSetを管理します。 ReplicaSetのステータスを表示するには、次のコマンドを使用します:
kubectl get replicaset出力には、ReplicaSetが作成されたことが表示されます:
NAME DESIRED CURRENT READY AGE mongo-75f59d57f4 1 1 1 3m12s -
ネットワーク上にMongoDBを公開するためのServiceを作成します:
kubectl apply -f https://k8s.io/examples/application/mongodb/mongo-service.yaml正常にコマンドが実行されると、Serviceが作成されたことを示す出力が表示されます:
service/mongo createdServiceが作成されたことを確認します:
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番ポートでリッスンしていることを確認します:
# mongo-75f59d57f4-4nd6qをPod名に置き換えてください kubectl get pod mongo-75f59d57f4-4nd6q --template='{{(index (index .spec.containers 0).ports 0).containerPort}}{{"\n"}}'出力には、そのPod内のMongoDBのポートが表示されます:
2701727017は、MongoDBの公式なTCPポートです。
ローカルポートをPodのポートにフォワードする
-
kubectl port-forwardでは、Pod名などのリソース名を指定して、ポートフォワードの対象となるPodを選択できます。# mongo-75f59d57f4-4nd6qを実際の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について詳しくは、こちらを参照してください。