7.7.2. クライアントからのリモートコマンドを開始するためのプロトコル
クラスター内のクライアントリソースは、Kubernetes API サーバーにリクエストを発行することで、コンテナー内でリモートコマンドの実行を開始できます。
Kubernetes API サーバーへの一般的なリクエストのフォーマット例を以下に示します。
/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>
各項目の説明:
<node_name>- ノードの完全修飾ドメイン名 (FQDN) を指定します。
<namespace>- 対象となる Pod のプロジェクトを指定します。
<pod>- 対象となる Pod の名前を指定します。
<container>- 対象コンテナーの名前を指定します。
<command>- 実行するコマンドを指定します。
リクエストの例
/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date
さらに、クライアントはリクエストにパラメーターを追加して、以下のいずれかの条件を示すことができます。
- クライアントはリモートコンテナーのコマンド (標準入力) にインプットを送信する必要があります。
- クライアントの端末は TTY です。
- リモートコンテナーのコマンドは、標準出力からクライアントに出力を送信する必要があります。
- リモートコンテナーのコマンドは、標準エラー出力からクライアントに出力を送信する必要があります。
exec 要求の API サーバーへの送信後、クライアントは多重化ストリームをサポートするものに接続をアップグレードします。現在の実装では HTTP/2 を使用しています。
クライアントは標準入力 (stdin)、標準出力 (stdout)、および標準エラー出力 (stderr) 用にそれぞれのストリームを作成します。ストリームを区別するために、クライアントはストリームの streamType ヘッダーを stdin、stdout、または stderr のいずれかに設定します。
リモートコマンド実行要求の処理が終了すると、クライアントはすべてのストリームやアップグレードされた接続および基礎となる接続を閉じます。