使用 RDP 连接到 Azure Kubernetes 服务 (AKS) 群集 Windows Server 节点以进行维护或故障排除

在 Azure Kubernetes 服务 (AKS) 群集的整个生命周期内,可能需要访问 AKS Windows Server 节点。 进行这种访问的原因包括维护、日志收集或其他故障排除操作。 可以使用 RDP 访问 AKS Windows Server 节点。 出于安全考虑,AKS 节点不会在 Internet 中公开。

或者,如果要通过 SSH 连接到 AKS Windows Server 节点,则需要访问在创建群集期间使用的同一个密钥对。 按照通过 SSH 连接到 Azure Kubernetes 服务 (AKS) 群集节点中的步骤进行操作。

本文说明如何使用 AKS 节点的专用 IP 地址来与它们建立 RDP 连接。

准备阶段

本文假设你已有一个 AKS 群集,其中包含 Windows Server 节点。 如果需要 AKS 群集,请参阅有关使用 Azure CLI 创建包含 Windows 容器的 AKS 群集的文章。 你需要用于想要进行故障排除的 Windows Server 节点的 Windows 管理员用户名和密码。 你还需要一个 RDP 客户端,例如 Microsoft 远程桌面

如需重置密码,请使用 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 连接,可以将具有可公共访问 IP 地址的虚拟机部署到与 Windows Server 节点相同的子网中。

以下示例在 myResourceGroup 资源组中创建名为 myVM 的虚拟机。

需要获取 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 CLI 控制台中运行以下命令来创建 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 中启用访问权限。

注意

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。 若要在本地安装 kubectl,请使用 az aks install-cli 命令:

az aks install-cli

若要将 kubectl 配置为连接到 Kubernetes 群集,请使用 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 地址。

Image of connecting to the virtual machine using an RDP client

连接到虚拟机后,使用虚拟机内部的 RDP 客户端连接到要进行故障排除的 Windows Server 节点的内部 IP 地址。

Image of connecting to the Windows Server node using an RDP client

现在,你已连接到 Windows Server 节点。

Image of cmd window in the Windows Server node

现在,可以在 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 门户中,转到虚拟网络。 选择 AKS 群集连接到的虚拟网络。
  2. 在“设置”下,选择“Bastion”,然后选择“部署 Bastion”。 等到该过程完成后再进行下一步。

使用 Azure Bastion 连接到 Windows Server 节点

转到 AKS 群集的节点资源组。 在 Azure 本地 Shell 中运行以下命令以获取节点资源组的名称:

az aks show -n myAKSCluster -g myResourceGroup --query 'nodeResourceGroup' -o tsv
  1. 选择我们在上一步中得到的 CLUSTER_RG 资源组,格式类似于 MC_<AKS_RESOURCE_GROUP>_<ASK_CLUSTER_NAME>_<ASK_DEPLOY_REGION>,然后选择“概述”,然后在“资源”选项卡中选择 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 门户中,转到 Bastion 并选择创建的 Bastion 资源。
  2. 在页面顶部,选择“删除”。 等到该过程完成后再继续下一步。
  3. 在 Azure 门户中,转到虚拟网络。 选择 AKS 群集连接到的虚拟网络。
  4. 在“设置”下,选择“子网”,然后删除为 Bastion 资源创建的 AzureBastionSubnet 子网。

后续步骤

如果需要更多故障排除数据,可以查看 Kubernetes 主节点日志Azure Monitor