kubectlポートフォワードではなくkubectlプロキシを使用した仮想ノードでのポッドおよびサービス問題のトラブルシューティング

kubectlプロキシ(kubectlポートフォワードではなく)を使用してアプリケーション出力を表示する方法を確認し、仮想ノードで実行されているポッドの問題を解決するのに役立ちます。

Kubernetesクラスタのポッドで実行されているアプリケーションをテストおよびデバッグし、パブリック・インターネットに公開せずにクラスタの内部リソースにアクセスする場合、アプリケーションの出力をコンピュータ上でローカルで実行しているかのように表示すると役立つことがよくあります。

管理対象ノード・プールを使用する場合、ローカル・マシンでkubectl port-forwardコマンドを使用して、管理対象ノードのポッドで実行されているアプリケーションの出力を表示できます。kubectl port-forwardコマンドを使用すると、ローカル・マシンとKubernetesクラスタで実行されているアプリケーションの間にセキュアなトンネルが作成されます。トンネルを使用すると、トラフィックが2つのエンドポイント間を流れるため、ローカル・マシンからのアプリケーションの出力を表示できます。

ただし、仮想ノード・プールを使用する場合、kubectl port-forwardコマンドを使用して、仮想ノードのポッドで実行されているアプリケーションの出力を表示することはできません。別の方法として、同じ目的でkubectl proxyコマンドを使用します。

例:

  1. まだインストールしていない場合は、kubectlをインストールします(kubectlのドキュメントを参照)。
  2. まだ実行していない場合は、ステップに従って、ローカルで使用するためのクラスタのkubeconfig構成ファイルを設定し、(必要に応じて)そのファイルを指すようにKUBECONFIG環境変数を設定します。自分のkubeconfigファイルを設定する必要があります。別のユーザーが設定したkubeconfigファイルを使用してクラスタにアクセスすることはできません。kubectlコマンドを実行する前に、OCI_CLI_PROFILE環境変数を、CLI構成ファイルで定義されているプロファイルの名前に設定する必要がある場合もあります。クラスタへのローカル・アクセスの設定を参照してください。
  3. デフォルト・ネームスペースでクラスタにデプロイメントを作成します。たとえば、次のように入力します:
    kubectl create -f https://k8s.io/examples/application/deployment.yaml
  4. 次のように入力して、ポッドのリストを取得します:
    kubectl get pods
  5. ローカル端末ウィンドウで、次のように入力してプロキシを起動します。
    kubectl proxy --port=8080
  6. 別のローカル端末ウィンドウで、次のことができるようになりました。
    • 次のように入力してポッド出力を表示します。
      curl http://localhost:8080/api/v1/namespaces/<namespace-name>/pods/<pod-name>/proxy/

      例:

      curl http://localhost:8080/api/v1/namespaces/default/pods/nginx-5b6b9d4766-qs9tc/proxy/
    • 次のように入力してサービス出力を表示します。
      curl http://localhost:8080/api/v1/namespaces/<namespace-name>/services/<service-name>/proxy/

      例:

      curl http://localhost:8080/api/v1/namespaces/default/services/nginx-service/proxy/

    どちらの場合も、コマンドの最後にスラッシュ( / )を書き留めます。