kubectl exposeコマンドを使用して、アプリケーションのサービスを作成し、IPアドレスを割り当ててインターネットからアクセスできます。
私の知る限り、Kubernetesクラスター内のアプリケーションにアクセスするには、サービスリソースが作成され、外部ネットワークからアクセス可能なIPアドレスが必要です。
しかし、ポートフォワードの場合、外部からアクセス可能なIPアドレスなしでkubectlがアプリケーションへの接続を作成する方法は?
kubectl port-forward
は、特定の Kubernetes API要求 を作成します。つまり、それを実行しているシステムはAPIサーバーにアクセスする必要があり、すべてのトラフィックは単一のHTTP接続でトンネリングされます。
これはデバッグに非常に便利です(特定のポッドが機能している場合は、直接接続できます。マイクロサービス環境では、他の方法では公開しないバックエンドサービスと通信できます)が、セットアップに代わるものではありませんサービスオブジェクト。 kubectl port-forward
で作業したとき、サービスを介してポッドに接続するよりも明らかに遅く、コマンドが数分後に停止するのがわかりました。繰り返しますが、これらはデバッグのための大きな問題ではありませんが、実稼働システムに必要なものではありません。
kubectl port-forward
は、ローカルポートへの接続をポッドのポートに転送します。 kubectl proxy
と比較すると、kubectl port-forward
はより一般的であり、TCPトラフィックを転送できますが、kubectl proxy
はHTTPトラフィックのみを転送できます。
kubectl port-forward
は、テスト/デバッグの目的に役立ちます。サービスを公開せずにローカルにアクセスできます。
以下はpod
の名前で、ポート6379
をlocalhost: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)を公開せずにアクセスする小さなポート転送の例でもあります。
Localhostの別のポートに転送する場合。これを試して
kubectl port-forward <pod-name> <locahost-port>:<pod-port>
kubectl port-forward sample-pod-sadasds-sxawdd 8090:6379
上記のコマンドは、ポッド6379からローカルホスト8090に転送します