本文介绍如何创建虚拟网络(VNet)和子网、创建有权访问 VNet 的托管标识,以及如何在启用了节点自动预配(NAP)的自定义 VNet 中创建 Azure Kubernetes 服务(AKS)群集。
先决条件
- 一份 Azure 订阅。 如果没有试用版,可以创建 试用版。
- Azure CLI
2.76.0或更高版本。 若要查找版本,请运行az --version。 若要详细了解如何安装或升级 Azure CLI,请参阅安装 Azure CLI。 - 阅读 AKS 文章中的节点自动预配概述(NAP), 其中详细介绍 了 NAP 的工作原理。
- 阅读 Azure Kubernetes 服务(AKS)中节点自动预配(NAP)的网络配置概述。
局限性
- 在自定义虚拟网络(VNet)中创建 NAP 群集时,必须使用 标准负载均衡器。 不支持基本负载均衡器。
- 若要查看 NAP 的其他限制和不支持的功能,请参阅 AKS 文章中的节点自动预配(NAP)概述 。
创建虚拟网络和子网
重要
将自定义 VNet 与 NAP 配合使用时,请记住以下信息:
- 必须创建 API 服务器子网并将其委托给
Microsoft.ContainerService/managedClusters,该子网授予 AKS 服务权限,以将 API 服务器 Pod 和内部负载均衡器注入到该子网中。 不能将子网用于任何其他工作负荷,但可以将其用于位于同一 VNet 中的多个 AKS 群集。 支持的 API 服务器子网大小最低为 /28。 - 默认情况下,允许 VNet 中的所有流量。 但是,如果添加了网络安全组(NSG)规则来限制不同子网之间的流量,则需要确保配置适当的权限。 有关详细信息,请参阅 网络安全组文档。
使用
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命令创建子网并将其委托给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 的权限
使用
az identity create命令创建托管标识。az identity create \ --resource-group $RG_NAME \ --name $IDENTITY_NAME \ --location $LOCATION获取托管标识的主体 ID,并使用 [
az identity show][az-identity-show] 命令将其设置为环境变量。IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group $RG_NAME --name $IDENTITY_NAME --query principalId -o tsv)使用
命令将 网络贡献者 角色分配给托管标识。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 群集
使用
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 格式信息。
使用
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 中的节点自动预配的详细信息,请参阅以下文章: