クラスター内のアプリケーションにアクセスするためにポートフォワーディングを使用する
このページでは、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 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
ネットワーク上にMongoDBを公開するためのServiceを作成します:
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番ポートでリッスンしていることを確認します:
# mongo-75f59d57f4-4nd6qを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を選択できます。# 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について詳しくは、こちらを参照してください。