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

Azure Kubernetes Service (AKS) クラスターのライフサイクル全体を通して、AKS の Windows Server ノードへのアクセスが必要になる場合があります。 メンテナンス、ログ収集、その他のトラブルシューティング操作のための接続です。 RDP を使用して AKS の Windows Server ノードにアクセスできます。 セキュリティのため、AKS ノードはインターネットに公開されません。

別の方法として、AKS Windows Server ノードに SSH 接続する場合は、クラスターの作成時に使用されたものと同じキーの組にアクセスする必要があります。 Azure Kubernetes Service (AKS) クラスター ノードへの SSH 接続に関する記事の手順に従ってください。

この記事では、プライベート IP アドレスを使用して、AKS ノードとの RDP 接続を作成する方法を示します。

開始する前に

この記事は、Windows Server ノードを含む AKS クラスターが既に存在していることを前提としています。 AKS クラスターが必要な場合は、Azure CLI を使用して Windows コンテナーと共に AKS クラスターを作成する方法に関する記事を参照してください。 トラブルシューティングを行う Windows Server ノードに対して、Windows 管理者のユーザー名とパスワードが必要です。 Microsoft リモート デスクトップなどの RDP クライアントも必要です。

パスワードをリセットする必要がある場合は、az aks update を使用してパスワードを変更します。

az aks update -g myResourceGroup -n myAKSCluster --windows-admin-password $WINDOWS_ADMIN_PASSWORD

ユーザー名とパスワードをリセットする必要がある場合は、「Windows VM でリモート デスクトップ サービスまたはその管理者パスワードをリセットする」を参照してください。

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

クラスターと同じサブネットに仮想マシンをデプロイする

AKS クラスターの Windows Server ノードには、外部からアクセスできる IP アドレスはありません。 RDP 接続を作成するには、Windows Server ノードと同じサブネットに、パブリックにアクセス可能な IP アドレスを持つ仮想マシンをデプロイします。

次の例では、リソース グループ myResourceGroupmyVM という名前の仮想マシンを作成します。

Windows Server ノード プールで使用されているサブネット ID を取得する必要があります。 以下のコマンドは、次の情報のクエリを実行します。

  • クラスターのノード リソース グループ
  • 仮想ネットワーク。
  • サブネットの名前
  • サブネット ID
CLUSTER_RG=$(az aks show -g myResourceGroup -n myAKSCluster --query nodeResourceGroup -o tsv)
VNET_NAME=$(az network vnet list -g $CLUSTER_RG --query [0].name -o tsv)
SUBNET_NAME=$(az network vnet subnet list -g $CLUSTER_RG --vnet-name $VNET_NAME --query [0].name -o tsv)
SUBNET_ID=$(az network vnet subnet show -g $CLUSTER_RG --vnet-name $VNET_NAME --name $SUBNET_NAME --query id -o tsv)

SUBNET_ID を取得したので、同じ Azure Cloud Shell ウィンドウで次のコマンドを実行して VM を作成します。

PUBLIC_IP_ADDRESS="myVMPublicIP"

az vm create \
    --resource-group myResourceGroup \
    --name myVM \
    --image win2019datacenter \
    --admin-username azureuser \
    --admin-password {admin-password} \
    --subnet $SUBNET_ID \
    --nic-delete-option delete \
    --os-disk-delete-option delete \
    --nsg "" \
    --public-ip-address $PUBLIC_IP_ADDRESS \
    --query publicIpAddress -o tsv

次の出力例では、VM が正常に作成されたことを示し、仮想マシンのパブリック IP アドレスが表示されています。

13.62.204.18

仮想マシンのパブリック IP アドレスを書き留めます。 このアドレスは、後の手順で使用します。

仮想マシンへのアクセスを許可する

AKS ノード プールのサブネットは、既定で NSG (ネットワーク セキュリティ グループ) によって保護されます。 仮想マシンへのアクセスを取得するには、NSG でアクセスを有効にする必要があります。

Note

NSG は、AKS サービスによって制御されます。 NSG に加えた変更は、コントロール プレーンによっていつでも上書きされます。

まず、ルールを追加する NSG のリソース グループと名前を取得します。

CLUSTER_RG=$(az aks show -g myResourceGroup -n myAKSCluster --query nodeResourceGroup -o tsv)
NSG_NAME=$(az network nsg list -g $CLUSTER_RG --query [].name -o tsv)

次に、NSG ルールを作成します。

az network nsg rule create \
 --name tempRDPAccess \
 --resource-group $CLUSTER_RG \
 --nsg-name $NSG_NAME \
 --priority 100 \
 --destination-port-range 3389 \
 --protocol Tcp \
 --description "Temporary RDP access to Windows nodes"

ノード アドレスを取得する

Kubernetes クラスターを管理するには、Kubernetes のコマンドライン クライアントである kubectl を使用します。 Azure Cloud Shell を使用している場合、kubectl は既にインストールされています。 kubectl をローカルにインストールするには、az aks install-cli コマンドを使用します。

az aks install-cli

Kubernetes クラスターに接続するように kubectl を構成するには、az aks get-credentials コマンドを使用します。 このコマンドは、資格情報をダウンロードし、それを使用するように Kubernetes CLI を構成します。

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster

kubectl get コマンドを使用して、Windows Server ノードの内部 IP アドレスの一覧を表示します。

kubectl get nodes -o wide

次の出力例では、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-42485177-vmss000000   Ready    agent   18h   v1.12.7   10.240.0.4    <none>        Ubuntu 16.04.6 LTS          4.15.0-1040-azure   docker://3.0.4
aksnpwin000000                      Ready    agent   13h   v1.12.7   10.240.0.67   <none>        Windows Server Datacenter   10.0.17763.437

トラブルシューティングを行う Windows Server ノードの内部 IP アドレスを書き留めます。 このアドレスは、後の手順で使用します。

仮想マシンとノードに接続する

Microsoft リモート デスクトップなどの RDP クライアントを使用して前に作成した仮想マシンのパブリック IP アドレスに接続します。

RDP クライアントを使用した仮想マシンへの接続のイメージ

仮想マシンに接続したら、仮想マシン内から、RDP クライアントを使用してトラブルシューティングを行う Windows Server ノードの内部 IP アドレスに接続します。

RDP クライアントを使用した Windows Server ノードへの接続のイメージ

これで Windows Server ノードに接続されました。

Windows Server ノード内の cmd ウィンドウのイメージ

これで、cmd ウィンドウで任意のトラブルシューティング コマンドを実行できるようになりました。 Windows Server ノードでは Windows Server Core が使用されるため、RDP 経由で Windows Server ノードに接続するときに、完全な GUI またはその他の GUI ツールはありません。

RDP アクセスを削除する

作業が完了したら、Windows Server ノードへの RDP 接続を終了し、仮想マシンへの RDP セッションを終了します。 両方の RDP セッションを終了したら、az vm delete コマンドを使用して仮想マシンを削除します。

# Delete the virtual machine
az vm delete \
 --resource-group myResourceGroup \
 --name myVM

仮想マシンに関連付けられているパブリック IP を削除します。

az network public-ip delete \
 --resource-group myResourceGroup \
 --name $PUBLIC_IP_ADDRESS

NSG 規則を削除します。

CLUSTER_RG=$(az aks show -g myResourceGroup -n myAKSCluster --query nodeResourceGroup -o tsv)
NSG_NAME=$(az network nsg list -g $CLUSTER_RG --query [].name -o tsv)
az network nsg rule delete \
 --resource-group $CLUSTER_RG \
 --nsg-name $NSG_NAME \
 --name tempRDPAccess

Azure Bastion を使用して接続する

別の方法として、Azure Bastion を使用して Windows Server ノードに接続することもできます。

Azure Bastion をデプロイする

Azure Bastion をデプロイするには、AKS クラスターが接続されている仮想ネットワークを見つける必要があります。

  1. Azure portal で [仮想ネットワーク] に移動します。 AKS クラスターが接続されている仮想ネットワークを選択します。
  2. [設定][Bastion] を選択し、[Deploy Bastion] (Bastion のデプロイ) を選択します。 このプロセスが完了するまで待ってから、次の手順に進みます。

Azure Bastion を使用して Windows Server ノードに接続する

AKS クラスターのノード リソース グループに移動します。 Azure Cloud Shell で以下のコマンドを実行して、ノード リソース グループの名前を取得します。

az aks show -n myAKSCluster -g myResourceGroup --query 'nodeResourceGroup' -o tsv
  1. [概要] を選択し、Windows ノード プールの仮想マシン スケール セットを選択します。
  2. [設定] で、[インスタンス] を選択します。 接続先とする Windows サーバー ノードを選択します。
  3. [サポート + トラブルシューティング] で、[Bastion] を選択します。
  4. AKS クラスターを作成したときに設定した資格情報を入力します。 [接続] を選択します。

これで、cmd ウィンドウで任意のトラブルシューティング コマンドを実行できるようになりました。 Windows Server ノードでは Windows Server Core が使用されるため、RDP 経由で Windows Server ノードに接続するときに、完全な GUI またはその他の GUI ツールはありません。

注意

ターミナル ウィンドウを終了した場合は、Ctrl + Alt + End キーを押して、[タスク マネージャー] を選択し、[詳細] を選択します。[ファイル][新しいタスクの実行] の順に選択し、「cmd.exe」と入力して別のターミナルを開きます。 ログアウトして Bastion に再接続することもできます。

Bastion のアクセスを解除する

完了したら、Bastion セッションを終了し、Bastion リソースを削除します。

  1. Azure portal で [Bastion] に移動し、作成した Bastion リソースを選択します。
  2. ページの上部で、[削除] を選択します。 このプロセスが完了するまで待ってから、次の手順に進みます。
  3. Azure portal で [仮想ネットワーク] に移動します。 AKS クラスターが接続されている仮想ネットワークを選択します。
  4. [設定][サブネット] を選択し、Bastion リソース用に作成された AzureBastionSubnet サブネットを削除します。

次のステップ

トラブルシューティング データがさらに必要な場合は、Kubernetes プライマリ ノードのログまたは Azure Monitor を表示できます。