メンテナンスまたはトラブルシューティングのために Azure Kubernetes Service (AKS) クラスター ノードに接続する

Azure Kubernetes Service (AKS) クラスターのライフサイクル全体を通して、AKS ノードへのアクセスが必要になる場合があります。 このアクセスは、メンテナンス、ログ収集、トラブルシューティング操作のためのアクセスである場合があります。 SSH を使用して AKS Linux ノードと Windows ノードに対して安全に認証を行うことができます。また、リモート デスクトップ プロトコル (RDP) を使用して Windows Server ノードに接続することもできます。 セキュリティ上の理由により、AKS ノードはインターネットに公開されません。 AKS ノードに接続するには、kubectl debug またはプライベート IP アドレスを使用します。

この記事では、AKS ノードへの接続を作成し、既存の AKS クラスターで SSH キーを更新する方法について説明します。

開始する前に

この記事は、SSH キーを持っていることを前提をしています。 持っていない場合、macOS または Linux、あるいは Windows を使用して SSH キーを作成できます。 PuTTY を使用してキーの組を作成する場合、そのキーの組は、既定の PuTTy 秘密キー形式 (.ppk ファイル) ではなく、OpenSSH 形式で保存します。

また、Azure CLI バージョン 2.0.64 以降がインストールされ、構成されている必要もあります。 バージョンを確認するには、az --version を実行します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。

Linux ノードへの対話型シェル接続を作成する

Linux ノードへの対話型シェル接続を作成するには、kubectl debug コマンドを使用してノード上で特権コンテナーを実行します。 ノードを一覧表示するには、kubectl get nodes コマンドを使用します。

kubectl get nodes -o wide

このコマンドの出力は次の例のようになります。

NAME                                STATUS   ROLES   AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
aks-nodepool1-12345678-vmss000000   Ready    agent   13m     v1.19.9   10.240.0.4    <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aks-nodepool1-12345678-vmss000001   Ready    agent   13m     v1.19.9   10.240.0.35   <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aksnpwin000000                      Ready    agent   87s     v1.19.9   10.240.0.67   <none>        Windows Server 2019 Datacenter   10.0.17763.1935    docker://19.3.1

ノード上でコンテナー イメージを実行して接続するには、kubectl debug コマンドを使用します。

kubectl debug node/aks-nodepool1-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0

次のコマンドは、ノード上で特権コンテナーを起動し、それに接続します。

kubectl debug node/aks-nodepool1-12345678-vmss000000 -it --image=mcr.microsoft.com/dotnet/runtime-deps:6.0

このコマンドの出力は次の例のようになります。

Creating debugging pod node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx with container debugger on node aks-nodepool1-12345678-vmss000000.
If you don't see a command prompt, try pressing enter.
root@aks-nodepool1-12345678-vmss000000:/#

この特権コンテナーにより、ノードへのアクセスが提供されます。

Note

特権コンテナーから chroot /host を実行することで、ノード セッションと対話できます。

Linux ノード アクセスの削除

完了したら、対話型シェル セッションを exit します。 対話型のコンテナー セッションが終了したら、kubectl delete pod を使用したアクセスに使用されるポッドを削除します。

kubectl delete pod node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx

Windows ノードへの SSH 接続の作成

現時点では、kubectl debug を使用して、Windows Server ノードに直接接続することはできません。 代わりに、まずクラスター内の別のノードに接続し、そのノードから SSH を使用して Windows Server ノードに接続する必要があります。 または、SSH を使用する代わりに、リモート デスクトップ プロトコル (RDP) 接続を使用して、Windows Server ノードに接続することができます。

クラスター内の別のノードに接続するには、kubectl debug コマンドを使用します。 詳細については、「Linux ノードへの対話型シェル接続を作成する」を参照してください。

別のノードから Windows Server ノードへの SSH 接続を作成するには、AKS クラスターの作成時に提供された SSH キーと、Windows Server ノードの内部 IP アドレスを使用します。

新しいターミナル ウィンドウを開き、kubectl get pods コマンドを使用して、kubectl debug によって起動されたポッドの名前を取得します。

kubectl get pods

このコマンドの出力は次の例のようになります。

NAME                                                    READY   STATUS    RESTARTS   AGE
node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx   1/1     Running   0          21s

上の例では、node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx が、kubectl debug によって起動されたポッドの名前です。

kubectl port-forward コマンドを使用して、デプロイされたポッドへの接続を開きます。

kubectl port-forward node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx 2022:22

このコマンドの出力は次の例のようになります。

Forwarding from 127.0.0.1:2022 -> 22
Forwarding from [::1]:2022 -> 22

上記の例では、お使いの開発用コンピューターのポート 2022 から、デプロイされているポッドのポート 22 にネットワーク トラフィックの転送を開始します。 kubectl port-forward を使用して接続を開き、ネットワーク トラフィックを転送する場合、接続は kubectl port-forward コマンドを停止するまで開いたままです。

新しいターミナルを開き、kubectl get nodes コマンドを実行して、Windows Server ノードの内部 IP アドレスを表示します。

kubectl get nodes -o wide

このコマンドの出力は次の例のようになります。

NAME                                STATUS   ROLES   AGE     VERSION   INTERNAL-IP   EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION     CONTAINER-RUNTIME
aks-nodepool1-12345678-vmss000000   Ready    agent   13m     v1.19.9   10.240.0.4    <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aks-nodepool1-12345678-vmss000001   Ready    agent   13m     v1.19.9   10.240.0.35   <none>        Ubuntu 18.04.5 LTS               5.4.0-1046-azure   containerd://1.4.4+azure
aksnpwin000000                      Ready    agent   87s     v1.19.9   10.240.0.67   <none>        Windows Server 2019 Datacenter   10.0.17763.1935    docker://19.3.1

上の例では、10.240.0.67 が、Windows Server ノードの内部 IP アドレスです。

内部 IP アドレスを使用して Windows Server ノードへの SSH 接続を作成し、開発用コンピューターのポート 22 からポート 2022 に接続します。 AKS ノードの既定のユーザー名は、azureuser です。 接続を続行するプロンプトを受け入れます。 次に、Windows Server ノードの bash プロンプトが提供されます。

ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' azureuser@10.240.0.67

このコマンドの出力は次の例のようになります。

The authenticity of host '10.240.0.67 (10.240.0.67)' can't be established.
ECDSA key fingerprint is SHA256:1234567890abcdefghijklmnopqrstuvwxyzABCDEFG.
Are you sure you want to continue connecting (yes/no)? yes

[...]

Microsoft Windows [Version 10.0.17763.1935]
(c) 2018 Microsoft Corporation. All rights reserved.

azureuser@aksnpwin000000 C:\Users\azureuser>

注意

パスワード認証を使用する場合は、-o PreferredAuthentications=password パラメーターを含めます。 例:

 ssh -o 'ProxyCommand ssh -p 2022 -W %h:%p azureuser@127.0.0.1' -o PreferredAuthentications=password azureuser@10.240.0.67

SSH アクセスの削除

終了したら、SSH セッションを exit し、ポートからの転送をすべて停止し、対話型のコンテナー セッションを exit します。 対話型のコンテナー セッションが終了したら、kubectl delete pod コマンドを使用して SSH アクセスに使用されるポッドを削除します。

kubectl delete pod node-debugger-aks-nodepool1-12345678-vmss000000-bkmmx

既存の AKS クラスターで SSH キーを更新する (プレビュー)

前提条件

  • 開始する前に、Azure CLI がインストールされ、構成されていることを確認します。 インストールまたはアップグレードする必要がある場合は、Azure CLI のインストールに関するページを参照してください。
  • aks-preview 拡張機能バージョン 0.5.111 以降。 Azure 拡張機能をインストールする方法については、「拡張機能のインストール方法」を参照してください。

注意

SSH キーの更新は、AKS クラスターを使用した Azure 仮想マシン スケール セットでサポートされています。

クラスターで SSH キーを更新するには、az aks update コマンドを使用します。 この操作により、すべてのノード プールでキーが更新されます。 --ssh-key-value 引数を使用して、キーまたはキー ファイルを指定できます。

az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value <new SSH key value or SSH key file>

例: 次の例では、--ssh-key-value 引数に新しい SSH キー値を指定できます。

az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value 'ssh-rsa AAAAB3Nza-xxx'

次の例では、SSH キー ファイルを指定しています。

az aks update --name myAKSCluster --resource-group MyResourceGroup --ssh-key-value .ssh/id_rsa.pub

重要

この操作中に、すべての仮想マシン スケール セット インスタンスがアップグレードされ、新しい SSH キーを使用するように再イメージ化されます。

次のステップ

トラブルシューティングのデータがさらに必要な場合は、kubelet ログを表示するか、Kubernetes マスター ノードのログを表示することができます。