このページでは、GKE On-Prem クラスタノードへの Secure Shell(SSH)を確立する方法について説明します。
概要
ユーザー クラスタノードまたは管理クラスタノードに SSH 接続するには、クラスタのコントロール プレーンから SSH 認証鍵をダウンロードします。次に、鍵を使用してクラスタノードでシェルを起動します。
SSH 認証鍵をダウンロードしたら、SSH 認証鍵を Secret / 認証情報管理システム(HashiCorp Vault など)に保存することを検討してください。今後クラスタノードに SSH 接続して API サーバーが停止した場合は、保存された SSH 認証鍵が必要になります。
クラスタノードの IP アドレスの取得
ユーザー クラスタ
ユーザー クラスタノードの IP アドレスを取得します。
kubectl --kubeconfig [USER_CLUSTER_KUBECONFIG] get nodes --output wide
ここで、[USER_CLUSTER_KUBECONFIG] はユーザー クラスタの kubeconfig ファイルのパスです。
管理クラスタ
管理クラスタノードの IP アドレスを取得します。
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get nodes --output wide
ここで、[ADMIN_CLUSTER_KUBECONFIG] は管理クラスタの kubeconfig ファイルのパスです。
コマンド出力で、INTERNAL-IP
フィールドをメモします。これらはノードの IP アドレスです。
SSH を使用したユーザー クラスタ ノードへの接続
ユーザー クラスタの SSH 認証鍵を取得します。
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets -n [USER_CLUSTER_NAME] ssh-keys -o yaml \ | grep ssh.key: | awk '{ print $NF }' | base64 -d > \ ~/.ssh/[USER_CLUSTER_NAME].key && chmod 600 ~/.ssh/[USER_CLUSTER_NAME].key
ここで
[ADMIN_CLUSTER_KUBECONFIG] は、管理クラスタの kubeconfig ファイルのパスです。
[USER_CLUSTER_NAME] はユーザー クラスタの名前です。
前述のコマンドによって、次の手順が行われます。
管理クラスタから、[USER_CLUSTER_NAME] Namespace で
ssh-keys
という名前の Secret のssh.key
フィールドを取得します。鍵を Base64 でデコードします。
デコードされた鍵をファイル
~/.ssh/[USER_CLUSTER_NAME].key
に保存します。鍵ファイルに適切なアクセス権を設定します。
鍵を使用してユーザー クラスタノードに SSH 接続します。
ssh -i ~/.ssh/[USER_CLUSTER_NAME].key ubuntu@[NODE_IP]
ここで、[NODE_IP] は以前に収集したユーザー クラスタ内のノードの内部 IP アドレスです。
SSH を使用した管理クラスタノードへの接続
管理クラスタの SSH 認証鍵を取得します。
kubectl --kubeconfig [ADMIN_CLUSTER_KUBECONFIG] get secrets -n kube-system sshkeys -o yaml \ | grep vsphere_tmp: | awk '{ print $NF }' | base64 -d > \ ~/.ssh/admin-cluster.key && chmod 600 ~/.ssh/admin-cluster.key
ここで、[ADMIN_CLUSTER_KUBECONFIG] は管理クラスタの kubeconfig ファイルのパスです。
前述のコマンドによって、次の手順が行われます。
管理クラスタから、
kube-system
Namespace でsshkeys
という名前の Secret のvsphere_tmp
フィールドを取得します。Base64 で
vsphere_tmp
フィールドをデコードします。これが鍵となります。デコードされた鍵をファイル
~/.ssh/admin-cluster.key
に保存します。鍵ファイルに適切なアクセス権を設定します。
鍵を使用して管理クラスタノードに SSH 接続します。
ssh -i ~/.ssh/admin-cluster.key ubuntu@[NODE_IP]
ここで、[NODE_IP] は以前に収集した管理クラスタ内のノードの内部 IP アドレスです。