web-dev-qa-db-ja.com

kubectl port-forwardの仕組み

kubectl exposeコマンドを使用して、アプリケーションのサービスを作成し、IPアドレスを割り当ててインターネットからアクセスできます。

私の知る限り、Kubernetesクラスター内のアプリケーションにアクセスするには、サービスリソースが作成され、外部ネットワークからアクセス可能なIPアドレスが必要です。

しかし、ポートフォワードの場合、外部からアクセス可能なIPアドレスなしでkubectlがアプリケーションへの接続を作成する方法は?

30
karthikeayan

kubectl port-forwardは、特定の Kubernetes API要求 を作成します。つまり、それを実行しているシステムはAPIサーバーにアクセスする必要があり、すべてのトラフィックは単一のHTTP接続でトンネリングされます。

これはデバッグに非常に便利です(特定のポッドが機能している場合は、直接接続できます。マイクロサービス環境では、他の方法では公開しないバックエンドサービスと通信できます)が、セットアップに代わるものではありませんサービスオブジェクト。 kubectl port-forwardで作業したとき、サービスを介してポッドに接続するよりも明らかに遅く、コマンドが数分後に停止するのがわかりました。繰り返しますが、これらはデバッグのための大きな問題ではありませんが、実稼働システムに必要なものではありません。

28
David Maze

kubectl port-forwardは、ローカルポートへの接続をポッドのポートに転送します。 kubectl proxyと比較すると、kubectl port-forwardはより一般的であり、TCPトラフィックを転送できますが、kubectl proxyはHTTPトラフィックのみを転送できます。

kubectl port-forwardは、テスト/デバッグの目的に役立ちます。サービスを公開せずにローカルにアクセスできます。

以下はpodの名前で、ポート6379localhost:6379に転送します。

kubectl port-forward redis-master-765d459796-258hz 6379:6379 

と同じです

kubectl port-forward pods/redis-master-765d459796-258hz 6379:6379

または

kubectl port-forward deployment/redis-master 6379:6379 

または

kubectl port-forward rs/redis-master 6379:6379 

または

kubectl port-forward svc/redis-master 6379:6379

ここ は、データベースサービス(clusterip)を公開せずにアクセスする小さなポート転送の例でもあります。

32
lvthillo

Localhostの別のポートに転送する場合。これを試して

kubectl port-forward <pod-name> <locahost-port>:<pod-port>
kubectl port-forward sample-pod-sadasds-sxawdd 8090:6379

上記のコマンドは、ポッド6379からローカルホスト8090に転送します

5
Vihar Manchala