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

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

先决条件

局限性

设置环境变量并创建资源组

  1. 设置本文中使用的环境变量。 将占位符中的值替换为您自己的值。

    export SUBSCRIPTION_ID="<subscription-id>"
    export RG_NAME="<resource-group-name>"
    export LOCATION="<location>"
    export VNET_NAME="<vnet-name>"
    export SUBNET_NAME="<subnet-name>"
    export IDENTITY_NAME="<managed-identity-name>"
    export CLUSTER_NAME="<cluster-name>"
    
  2. 使用az account set命令选择Azure订阅。

    az account set --subscription $SUBSCRIPTION_ID
    
  3. 使用 az group create 命令创建资源组。

    az group create \
        --name $RG_NAME \
        --location $LOCATION
    

创建虚拟网络和子网

  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 命令创建节点子网。

    az network vnet subnet create \
        --resource-group $RG_NAME \
        --vnet-name $VNET_NAME \
        --name $SUBNET_NAME \
        --address-prefixes 172.19.0.0/24
    

创建托管标识并分配 VNet 权限

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

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

    IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group $RG_NAME --name $IDENTITY_NAME --query principalId -o tsv)
    
  3. 使用 az role assignment create 命令将“网络参与者”角色分配给托管标识。 该 --assignee-principal-type 参数可防止在创建托管标识后复制延迟导致的失败。

    重要

    VNet 范围内的网络参与者角色授予广泛的权限。 在生产环境中使用此方法之前,请查看 自定义子网配置的 RBAC 设置 ,并考虑分配限定范围的子网权限。

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

启用 NAP 并连接到群集

使用你在前几节中创建的托管标识、VNet 和节点子网。 群集必须使用标准负载均衡器,如“限制”中所述。

  1. 使用 az aks create 命令在自定义 VNet 中创建启用了 NAP 的 AKS 群集。 下表描述了命令中使用的 NAP 和网络参数:

    参数 价值 Description
    --node-provisioning-mode Auto 在群集上启用 NAP。
    --network-plugin azure 将 Azure CNI 用于群集网络。
    --network-plugin-mode overlay 使用 Azure CNI Overlay 进行 Pod 网络配置。
    --network-dataplane cilium 使用 Cilium 数据平面。

    有关详细信息,请参阅Azure Kubernetes 服务 (AKS)中节点自动预配(NAP)的网络配置概述

    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/$VNET_NAME/subnets/$SUBNET_NAME" \
        --node-provisioning-mode Auto \
        --generate-ssh-keys
    

    群集创建完成后,该命令将返回有关群集的 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 中的节点自动预配的详细信息,请参阅以下文章: