在 Azure Kubernetes 服务(AKS)的自定义虚拟网络中创建节点自动预配(NAP)群集

本文介绍如何创建虚拟网络(VNet)和子网、创建有权访问 VNet 的托管标识,以及如何在启用了节点自动预配(NAP)的自定义 VNet 中创建 Azure Kubernetes 服务(AKS)群集。

先决条件

局限性

创建虚拟网络和子网

重要

将自定义 VNet 与 NAP 配合使用时,请记住以下信息:

  • 必须创建 API 服务器子网并将其委托给 Microsoft.ContainerService/managedClusters,该子网授予 AKS 服务权限,以将 API 服务器 Pod 和内部负载均衡器注入到该子网中。 不能将子网用于任何其他工作负荷,但可以将其用于位于同一 VNet 中的多个 AKS 群集。 支持的 API 服务器子网大小最低为 /28
  • 默认情况下,允许 VNet 中的所有流量。 但是,如果添加了网络安全组(NSG)规则来限制不同子网之间的流量,则需要确保配置适当的权限。 有关详细信息,请参阅 网络安全组文档
  1. 使用 az network vnet create 命令创建 VNet。

    az network vnet create \
        --name $VNET_NAME \
        --resource-group $RG_NAME \
        --location $LOCATION \
        --address-prefixes 172.19.0.0/16
    
  2. 使用 az network vnet subnet create 命令创建子网并将其委托给 Microsoft.ContainerService/managedClusters

    az network vnet subnet create \
        --resource-group $RG_NAME \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --delegations Microsoft.ContainerService/managedClusters \
        --address-prefixes 172.19.0.0/28
    

创建托管标识并向其授予访问 VNet 的权限

  1. 使用 az identity create 命令创建托管标识。

    az identity create \
        --resource-group $RG_NAME \
        --name $IDENTITY_NAME \
        --location $LOCATION
    
  2. 获取托管标识的主体 ID,并使用 [az identity show][az-identity-show] 命令将其设置为环境变量。

    IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group $RG_NAME --name $IDENTITY_NAME --query principalId -o tsv)
    
  3. 使用命令将网络贡献者角色分配给托管标识。

    az role assignment create \
        --scope "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.Network/virtualNetworks/$VNET_NAME" \
        --role "Network Contributor" \
        --assignee $IDENTITY_PRINCIPAL_ID
    

在自定义 VNet 中创建具有节点自动预配(NAP)的 AKS 群集

  1. 使用 az aks create 命令在自定义 VNet 中创建启用了 NAP 的 AKS 群集。 请确保将 --node-provisioning-mode 标志设置为 Auto 以启用 NAP。

    以下命令还会将 --network-plugin 设置为 azure--network-plugin-mode 设置为 overlay,以及 --network-dataplane 设置为 cilium。 有关 NAP 支持的网络配置的详细信息,请参阅 为 AKS 上的节点自动预配配置网络

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RG_NAME \
        --location $LOCATION \
        --assign-identity "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$IDENTITY_NAME" \
        --network-dataplane cilium \
        --network-plugin azure \
        --network-plugin-mode overlay \
        --vnet-subnet-id "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RG_NAME/providers/Microsoft.Network/virtualNetworks/$CUSTOM_VNET_NAME/subnets/$SUBNET_NAME" \
        --node-provisioning-mode Auto
    

    片刻之后,该命令将会完成,并返回有关群集的 JSON 格式信息。

  2. 使用 kubectl 命令将 az aks get-credentials 配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。

    az aks get-credentials \
        --resource-group $RG_NAME \
        --name $CLUSTER_NAME
    
  3. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    

后续步骤

有关 AKS 中的节点自动预配的详细信息,请参阅以下文章: