本文介绍如何在自定义虚拟网络(VNet)中创建启用了节点自动预配(NAP)的Azure Kubernetes 服务 (AKS)群集。 创建 VNet 和子网,然后授予对 VNet 的托管标识访问权限。
先决条件
- 一份 Azure 订阅。 如果没有试用版,可以创建 试用版。
- Azure CLI 版本为
2.76.0或更高版本。 若要查找版本,请运行az --version。 若要详细了解如何安装或升级 Azure CLI,请参阅安装 Azure CLI。 - Bash 环境。 如果你在本地运行这些命令,请使用
az login命令登录。 - Kubernetes 命令行客户端。
kubectl若要在本地安装它,请使用az aks install-cli命令。 -
Microsoft.Authorization/roleAssignments/write权限(例如 基于角色的访问控制管理员 角色),以分配“网络参与者”角色。 - 熟悉 AKS 中节点自动预配概述(NAP)中所述的概念,以及 Azure Kubernetes 服务 (AKS) 中节点自动预配(NAP)的网络配置概述。
局限性
- 在自定义虚拟网络(VNet)中创建 NAP 群集时,必须使用 标准负载均衡器。 不支持基本负载均衡器。
- 若要查看 NAP 的其他限制和不支持的功能,请参阅 AKS 文章中的节点自动预配(NAP)概述 。
设置环境变量并创建资源组
设置本文中使用的环境变量。 将占位符中的值替换为您自己的值。
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>"使用
az account set命令选择Azure订阅。az account set --subscription $SUBSCRIPTION_ID使用
az group create命令创建资源组。az group create \ --name $RG_NAME \ --location $LOCATION
创建虚拟网络和子网
使用
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使用
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 权限
使用
az identity create命令创建托管标识。az identity create \ --resource-group $RG_NAME \ --name $IDENTITY_NAME \ --location $LOCATION使用
az identity show命令获取托管标识的主体 ID,并将其保存到环境变量中。IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group $RG_NAME --name $IDENTITY_NAME --query principalId -o tsv)使用
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 和节点子网。 群集必须使用标准负载均衡器,如“限制”中所述。
使用
az aks create命令在自定义 VNet 中创建启用了 NAP 的 AKS 群集。 下表描述了命令中使用的 NAP 和网络参数:参数 价值 Description --node-provisioning-modeAuto在群集上启用 NAP。 --network-pluginazure将 Azure CNI 用于群集网络。 --network-plugin-modeoverlay使用 Azure CNI Overlay 进行 Pod 网络配置。 --network-dataplanecilium使用 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 格式的信息。
使用
kubectl命令将az aks get-credentials配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。az aks get-credentials \ --resource-group $RG_NAME \ --name $CLUSTER_NAME使用
kubectl get命令验证与群集之间的连接。 此命令将返回群集节点的列表。kubectl get nodes
后续步骤
有关 AKS 中的节点自动预配的详细信息,请参阅以下文章: