メンテナンスまたはトラブルシューティングのために Azure Kubernetes Service (AKS) クラスター ノードに接続する
[アーティクル]
Azure Kubernetes Service (AKS) クラスターのライフサイクル全体を通じて、最終的には AKS ノードに直接アクセスする必要があります。 このアクセスは、メンテナンス、ログ収集、トラブルシューティング操作のためのアクセスである場合があります。
認証を通じてノードにアクセスします。認証方法は、お使いのノード OS と接続方法によって異なります。 この記事で説明する 2 つのオプションを使用して、AKS Linux と Windows の各ノードに対して安全に認証します。 1 つは Kubernetes API アクセス権を持っている必要があり、もう 1 つは、直接プライベート IP 情報を提供する AKS ARM API を介して行う必要があります。 セキュリティ上の理由により、AKS ノードはインターネットに公開されません。 代わりに、AKS ノードに直接接続するには、kubectl debug またはホストのプライベート IP アドレスを使用する必要があります。
Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
If you don't see a command prompt, try pressing enter.
root@aks-nodepool1-37663765-vmss000000:/#
これで、特権コンテナーを介してデバッグ ポッドとしてノードにアクセスできるようになりました。
注意
特権コンテナーから chroot /host を実行することで、ノード セッションと対話できます。
kubectl debug モードを終了する
ノードの操作が完了したら、exit コマンドを入力して対話型シェル セッションを終了します。 対話型コンテナー セッションが閉じたら、kubectl delete pod で使用されているデバッグ ポッドを削除します。
kubectl delete pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx
SSH 用 Windows Server プロキシ接続
Windows Server ノードで SSH を使用した接続を回避するには、次の手順に従います。
プロキシ サーバーを作成する
現時点では、kubectl debug を使用して、Windows Server ノードに直接接続することはできません。 代わりに、まず kubectl を使用してクラスター内の別のノードに接続してから、SSH を使用してそのノードから Windows Server ノードに接続する必要があります。
クラスター内の別のノードに接続するには、kubectl debug コマンドを使用します。 詳細については、上記の kubectl セクションの手順に従ってください。 AKS クラスターの作成時に提供された SSH キーと Windows Server ノードの内部 IP アドレスを使用して、別のノードから Windows Server ノードへの SSH 接続を作成します。
重要
別のノードから Windows Server ノードへの SSH 接続を作成するための次の手順は、Azure CLI を --generate-ssh-keys パラメータとともに使用して AKS クラスターを作成した場合にのみ使用できます。 代わりに独自の SSH キーを使用する場合は、az aks update を使用して、既存の AKS クラスターで SSH キーを管理できます。 詳細については、SSH ノード アクセスの管理に関するページを参照してください。
注意
Linux プロキシ ノードがダウンしているか応答していない場合は、代わりに Azure Bastion メソッドを使用して接続します。
Creating debugging pod node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx with container debugger on node aks-nodepool1-37663765-vmss000000.
If you don't see a command prompt, try pressing enter.
root@aks-nodepool1-37663765-vmss000000:/#
新しいターミナル ウィンドウを開き、kubectl get pods コマンドを使用して、kubectl debug によって起動されたポッドの名前を取得します。
kubectl get pods
サンプル出力:
NAME READY STATUS RESTARTS AGE
node-debugger-aks-nodepool1-37663765-vmss000000-bkmmx 1/1 Running 0 21s
新しいターミナルを開き、kubectl get nodes コマンドを実行して、Windows Server ノードの内部 IP アドレスを表示します。
kubectl get no -o custom-columns=NAME:metadata.name,'INTERNAL_IP:status.addresses[?(@.type == \"InternalIP\")].address'
サンプル出力:
NAME INTERNAL_IP
aks-nodepool1-19409214-vmss000003 10.224.0.8
前の例では、10.224.0.62 が、Windows Server ノードの内部 IP アドレスです。
内部 IP アドレスを使用して Windows Server ノードへの SSH 接続を作成し、開発用コンピューターのポート 22 からポート 2022 に接続します。 AKS ノードの既定のユーザー名は、azureuser です。 接続を続行するプロンプトを受け入れます。 次に、Windows Server ノードの bash プロンプトが提供されます。
The authenticity of host '10.224.0.62 (10.224.0.62)' can't be established.
ECDSA key fingerprint is SHA256:1234567890abcdefghijklmnopqrstuvwxyzABCDEFG.
Are you sure you want to continue connecting (yes/no)? yes
az aks machine list コマンドを使用してプライベート IP を取得し、--nodepool-name フラグを使用して特定のノード プール内のすべての VM をターゲットにします。
az aks machine list --resource-group myResourceGroup --cluster-name myAKSCluster --nodepool-name nodepool1 -o table
次の出力例は、ノード プール内のすべてのノードの内部 IP アドレスを示しています。
Name Ip Family
--------------------------------- ----------- -----------
aks-nodepool1-33555069-vmss000000 10.224.0.5 IPv4
aks-nodepool1-33555069-vmss000001 10.224.0.6 IPv4
aks-nodepool1-33555069-vmss000002 10.224.0.4 IPv4