快速入门:在自定义虚拟网络中创建专用的 Azure Kubernetes 服务 (AKS) 自动版群集(预览版)

适用于:✔️ AKS Automatic(预览版)

[Azure Kubernetes 服务 (AKS) 自动(预览版)][what-is-aks-automatic] 为开发人员、DevOps 工程师和平台工程师提供最简单的托管 Kubernetes 体验。 AKS Automatic 可自动执行 AKS 群集设置和操作,并嵌入最佳做法配置,非常适合新式应用程序和 AI 应用程序。 任何技能级别的用户都可以从 AKS Automatic 对其应用程序的安全性、性能和可靠性中受益。

在此快速入门中,你将了解:

  • 创建虚拟网络。
  • 创建对虚拟网络具有权限的托管标识。
  • 在虚拟网络中部署专用 AKS 自动版群集。
  • 连接到专用群集。
  • 运行一个示例多容器应用程序,其中的一组微服务和 Web 前端模拟零售场景。

在您开始之前

本快速入门假设读者基本了解 Kubernetes 的概念。 有关详细信息,请参阅 Azure Kubernetes 服务 (AKS) 的 Kubernetes 核心概念

可以使用本地 Azure CLI。

  • 本文需要 2.68 或更高版本的 Azure CLI。
  • 本文需要 Azure CLI 扩展版本 3.0.0b13 或更高版本。aks-preview
  • 如果有多个 Azure 订阅,请使用 az account set 命令选择应在其中计收资源费用的相应订阅 ID。
  • 在 Azure 订阅中注册 AutomaticSKUPreview 功能。
  • 创建群集的身份还应具有资源组的以下权限[Azure-Policy-RBAC-permissions]:
    • Microsoft.Authorization/policyAssignments/write
    • Microsoft.Authorization/policyAssignments/read
  • 使用自定义虚拟网络的 AKS 自动群集仅支持用户分配的托管标识。
  • 使用自定义虚拟网络的 AKS Automatic 群集不支持托管 NAT 网关出站类型。
  • AKS 自动群集需要在至少支持三个[可用性区域][可用性区域]的 Azure 区域中部署。
  • 若要部署 Bicep 文件,需要对所创建的资源拥有写入访问权限,并且需要对 Microsoft.Resources/deployments 资源类型上的所有操作拥有访问权限。 例如,若要创建虚拟机,需要 Microsoft.Compute/virtualMachines/writeMicrosoft.Resources/deployments/* 权限。 有关角色和权限的列表,请参阅 Azure 内置角色

将自定义虚拟网络与 AKS Automatic 配合使用时,必须创建 API 服务器子网并将其委托给 Microsoft.ContainerService/managedClusters,该子网授予 AKS 服务将 API 服务器 Pod 和内部负载均衡器注入该子网的权限。 无法将该子网用于任何其他工作负载,但可将其用于同一虚拟网络中的多个 AKS 群集。 支持的最小 API 服务器子网大小为 /28。

群集标识需要在虚拟网络上拥有“网络参与者”权限。 缺少对 API 服务器子网的权限可能导致预配失败。 缺少虚拟网络的权限可能会导致节点自动预配缩放失败。

警告

AKS 群集在子网地址空间中保留至少 9 个 IP。 用尽 IP 地址可能会阻止 API 服务器缩放并导致 API 服务器中断。

重要

AKS Automatic 尝试根据订阅中可用的容量动态选择 system 节点池的虚拟机大小。 确保你的订阅在要部署群集的区域中具有以下任意大小的 16 个 vCPU 的配额:Standard_D4pds_v5、Standard_D4lds_v5、Standard_D4ads_v5、Standard_D4ds_v5、Standard_D4d_v5、Standard_D4d_v4、Standard_DS3_v2、Standard_DS12_v2。 可以通过 Azure 门户查看特定 VM 系列配额,并提交配额增加请求。

安装 aks-preview Azure CLI 扩展

重要

AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:

若要安装 aks-preview 扩展,请运行以下命令:

az extension add --name aks-preview

运行以下命令以更新到已发布的最新扩展版本:

az extension update --name aks-preview

注册功能标志

若要在预览版中使用 AKS Automatic,请使用 [az feature register][az-feature-register] 命令注册以下标志。

az feature register --namespace Microsoft.ContainerService --name AutomaticSKUPreview

使用 [az feature show][az-feature-show] 命令验证注册状态。 需要花费几分钟时间,状态才会显示为“已注册”

az feature show --namespace Microsoft.ContainerService --name AutomaticSKUPreview

当状态反映 已注册时,请使用 [az provider register][az-provider-register] 命令刷新 Microsoft.ContainerService 资源提供程序的注册:

az provider register --namespace Microsoft.ContainerService

定义变量

定义将在后续步骤中使用的以下变量。

RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)

创建资源组

Azure 资源组是用于部署和管理 Azure 资源的逻辑组。

使用 az group create 命令创建资源组。

az group create -n ${RG_NAME} -l ${LOCATION}

以下示例输出类似于资源组成功创建:

{
  "id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
  "location": "chinanorth3",
  "managedBy": null,
  "name": "automatic-rg",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

创建虚拟网络

使用 [az network vnet create][az-network-vnet-create] 命令创建虚拟网络。 使用 [az network vnet subnet create][az-network-vnet-subnet-create] 命令创建 API 服务器子网和群集子网。 API 子网需要委托给 Microsoft.ContainerService/managedClusters

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 --resource-group ${RG_NAME} --vnet-name ${VNET_NAME} --name apiServerSubnet --delegations Microsoft.ContainerService/managedClusters --address-prefixes 172.19.0.0/28

az network vnet subnet create --resource-group ${RG_NAME} --vnet-name ${VNET_NAME} --name clusterSubnet --address-prefixes 172.19.1.0/24

默认情况下,允许虚拟网络中的所有流量。 但是,如果添加了网络安全组规则 (NSG) 来限制不同子网之间的流量,请确保 NSG 安全规则允许以下类型的通信:

目的地 来源 协议 港口 使用
APIServer 子网 CIDR 群集子网 TCP 443 和 4443 如需启用节点与 API 服务器之间的通信,则必须支持。
APIServer 子网 CIDR Azure 负载均衡器 TCP 9988 如需启用 Azure 负载均衡器与 API 服务器之间的通信,则必须支持。 你还可以启用 Azure 负载均衡器与 API 服务器子网 CIDR 之间的所有通信。

创建托管标识并为其授予对虚拟网络的权限

使用 [az identity create][az-identity-create] 命令创建托管标识并检索主体 ID。 使用 [az role assignment create][az-role-assignment-create] 命令将虚拟网络上的网络参与者角色分配给托管标识。

az identity create --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --location ${LOCATION}

IDENTITY_CLIENT_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query clientId -o tsv)

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

在自定义虚拟网络中创建专用 AKS 自动群集

要创建专用 AKS 自动群集,请使用 az aks create 命令。 请注意 --enable-private-cluster 标志的使用。

az aks create --resource-group ${RG_NAME} --name ${CLUSTER_NAME} --location ${LOCATION} --apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" --vnet-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/clusterSubnet" --assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" --sku automatic --enable-private-cluster --no-ssh-key

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

连接至群集

将 AKS 自动群集创建为专用群集时,API 服务器终结点没有公共 IP 地址。 例如,要通过 kubectl 管理 API 服务器,需要通过一台可以访问该群集的 Azure 虚拟网络的计算机进行连接。 有几种选项可用于建立与专用群集的网络连接。 有关详细信息,请参阅 [连接到专用群集的选项][connect-private-cluster]。

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 要在本地安装 kubectl,请运行 az aks install-cli 命令。 AKS 自动化群集配置为使用 [用于 Kubernetes 基于角色的访问控制(RBAC)的 Microsoft Entra ID][aks-entra-rbac]。

使用 Azure CLI 创建群集时,您的用户将为Azure Kubernetes Service RBAC Cluster Admin分配[内置角色][aks-entra-rbac-builtin-roles]。

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

az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}

使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

kubectl get nodes

以下示例输出展示了登录的要求。

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

登录后,以下示例输出会显示托管系统节点池。 确保节点状态为“就绪”。

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-13213685-vmss000000   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000001   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000002   Ready    agent   2m26s   v1.28.5

创建资源组

Azure 资源组是用于部署和管理 Azure 资源的逻辑组。 创建资源组时,系统会提示你指定一个位置。 此位置是资源组元数据的存储位置,也是资源在 Azure 中运行的位置(如果你在创建资源期间未指定其他区域)。

使用 az group create 命令创建资源组。

az group create --name <resource-group> --location <location>

以下示例输出类似于资源组成功创建:

{
  "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
  "location": "chinanorth3",
  "managedBy": null,
  "name": "myResourceGroup",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null
}

创建虚拟网络

此 Bicep 文件定义了一个虚拟网络。

@description('The location of the managed cluster resource.')
param location string = resourceGroup().location

@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'

@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'

@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'

@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'

@description('The name of the cluster subnet.')
param clusterSubnetName string = 'clusterSubnet'

@description('The subnet prefix of the cluster subnet.')
param clusterSubnetPrefix string = '172.19.1.0/24'

// Virtual network with an API server subnet and a cluster subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
    name: vnetName
    location: location
    properties: {
        addressSpace: {
            addressPrefixes: [ addressPrefix ]
        }
        subnets: [
            {
                name: apiServerSubnetName
                properties: {
                    addressPrefix: apiServerSubnetPrefix
                }
            }
            {
                name: clusterSubnetName
                properties: {
                    addressPrefix: clusterSubnetPrefix
                }
            }
        ]
    }
}

output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output clusterSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, clusterSubnetName)

将 Bicep 文件“virtualNetwork.bicep”保存到本地计算机。

重要

该 Bicep 文件将 vnetName 参数设置为 aksAutomaticVnet,将 参数设置为 172.19.0.0/16,将 addressPrefix 参数设置为 172.19.0.0/28,将 参数设置为 172.19.1.0/24。apiServerSubnetPrefixapiServerSubnetPrefix 如果你想使用不同的值,请确保将字符串更新为偏好的值。

使用 Azure CLI 部署 Bicep 文件。

az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep

默认情况下,允许虚拟网络中的所有流量。 但是,如果添加了网络安全组规则 (NSG) 来限制不同子网之间的流量,请确保 NSG 安全规则允许以下类型的通信:

目的地 来源 协议 港口 使用
APIServer 子网 CIDR 群集子网 TCP 443 和 4443 如需启用节点与 API 服务器之间的通信,则必须支持。
APIServer 子网 CIDR Azure 负载均衡器 TCP 9988 如需启用 Azure 负载均衡器与 API 服务器之间的通信,则必须支持。 你还可以启用 Azure 负载均衡器与 API 服务器子网 CIDR 之间的所有通信。

创建管理标识

此 Bicep 文件定义用户分配的托管标识。

param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'

resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
  name: uamiName
  location: location
}

output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId

将 Bicep 文件 uami.bicep 保存到本地计算机。

重要

Bicep 文件将 uamiName 参数设置为 aksAutomaticUAMI。 如果你想使用不同的标识名称,请确保将字符串更新为偏好的名称。

使用 Azure CLI 部署 Bicep 文件。

az deployment group create --resource-group <resource-group> --template-file uami.bicep

分配对虚拟网络的网络参与者角色

此 Bicep 文件定义对虚拟网络的角色分配。

@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'

@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string

// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
  name: vnetName
}

// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
  name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
  scope: virtualNetwork
  properties: {
      roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
      principalId: uamiPrincipalId
  }
}

将 Bicep 文件 roleAssignments.bicep 保存到本地计算机。

重要

Bicep 文件将 vnetName 参数设置为 aksAutomaticVnet。 如果你使用其他虚拟网络名称,请确保将字符串更新为偏好的虚拟网络名称。

使用 Azure CLI 部署 Bicep 文件。 需要提供用户分配的标识的主体 ID。

az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>

在自定义虚拟网络中创建专用 AKS 自动群集

此 Bicep 文件会定义 AKS 自动群集。

@description('The name of the managed cluster resource.')
param clusterName string = 'aksAutomaticCluster'

@description('The location of the managed cluster resource.')
param location string = resourceGroup().location

@description('The resource ID of the API server subnet.')
param apiServerSubnetId string

@description('The resource ID of the cluster subnet.')
param clusterSubnetId string

@description('The resource ID of the user assigned managed identity.')
param uamiId string

/// Create the private AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
  name: clusterName
  location: location  
  sku: {
    name: 'Automatic'
  }
  properties: {
    agentPoolProfiles: [
      {
        name: 'systempool'
        mode: 'System'
          count: 3
        vnetSubnetID: clusterSubnetId
      }
    ]
    apiServerAccessProfile: {
        subnetId: apiServerSubnetId
        enablePrivateCluster: true
    }
    networkProfile: {
      outboundType: 'loadBalancer'
    }
  }
  identity: {
    type: 'UserAssigned'
    userAssignedIdentities: {
      '${uamiId}': {}
    }
  }
}

将 Bicep 文件 aks.bicep 保存到本地计算机。

重要

Bicep 文件将 clusterName 参数设置为 aksAutomaticCluster。 如果你想要其他群集名称,请确保将字符串更新为偏好的群集名称。

使用 Azure CLI 部署 Bicep 文件。 需要提供 API 服务器子网资源 ID、群集子网资源 ID 和用户分配的标识主体 ID。

az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters clusterSubnetId=<cluster subnet resource id> \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>

连接至群集

将 AKS 自动群集创建为专用群集时,API 服务器终结点没有公共 IP 地址。 例如,要通过 kubectl 管理 API 服务器,需要通过一台可以访问该群集的 Azure 虚拟网络的计算机进行连接。 有几种选项可用于建立与专用群集的网络连接。 有关详细信息,请参阅 [连接到专用群集的选项][connect-private-cluster]。

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 要在本地安装 kubectl,请运行 az aks install-cli 命令。 AKS 自动化群集配置为使用 [Microsoft Entra ID 进行 Kubernetes 基于角色的访问控制 (RBAC)][aks-entra-rbac]。

重要

使用 Bicep 创建群集时,您需要将内置角色之一[c0]、[c1]、[c2]或[c3]分配给您的用户,并且范围可以限定为群集或特定命名空间,例如使用[c4]。 另请确保用户具有 Azure Kubernetes Service Cluster User 内置角色以便能够运行 az aks get-credentials,然后使用 az aks get-credentials 命令获取 AKS 群集的 kubeconfig。

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

az aks get-credentials --resource-group <resource-group> --name <cluster-name>

使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

kubectl get nodes

以下示例输出展示了登录的要求。

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.

登录后,以下示例输出会显示托管系统节点池。 确保节点状态为“就绪”。

NAME                                STATUS   ROLES   AGE     VERSION
aks-nodepool1-13213685-vmss000000   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000001   Ready    agent   2m26s   v1.28.5
aks-nodepool1-13213685-vmss000002   Ready    agent   2m26s   v1.28.5

部署应用程序

若要部署该应用程序,请使用清单文件创建运行 AKS 应用商店应用程序所需的所有对象。 Kubernetes 清单文件定义群集的所需状态,例如,要运行哪些容器映像。 该清单包括以下 Kubernetes 部署和服务:

Azure 应用商店示例体系结构的屏幕截图。

  • 门店:Web 应用程序,供客户查看产品和下单。
  • 产品服务:显示产品信息。
  • 订单服务:下单。
  • Rabbit MQ:工单队列的消息队列

注释

不建议在没有持久性存储用于生产的情况下,运行有状态容器(例如 Rabbit MQ)。 为简单起见,此处使用这些容器,但建议使用托管服务,例如 Azure Cosmos DB 或 Azure 服务总线。

  1. 创建命名空间 aks-store-demo 以将 Kubernetes 资源部署到其中。

    kubectl create ns aks-store-demo
    
  2. 使用 kubectl apply 命令将应用程序部署到 aks-store-demo 命名空间中。 定义部署的 YAML 文件位于 GitHub 上。

    kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yaml
    

    以下示例输出显示部署和服务:

    statefulset.apps/rabbitmq created
    configmap/rabbitmq-enabled-plugins created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    ingress/store-front created
    

测试应用程序

应用程序运行时,Kubernetes 服务将向 Internet 公开应用程序前端。 此过程可能需要几分钟才能完成。

  1. 使用 kubectl get pods 命令查看已部署的 Pod 的状态。 在继续操作之前,请确保所有 Pod 的状态为 Running。 如果这是你要部署的第一个工作负载,节点自动预配可能需要花费几分钟时间来创建节点池,以运行 Pod。

    kubectl get pods -n aks-store-demo
    
  2. 检查应用商店前端应用程序的公共 IP 地址。 使用带有 参数的 --watch 命令来监视进度。

    kubectl get ingress store-front -n aks-store-demo --watch
    

    服务的 ADDRESS 输出最初显示为空:store-front

    NAME          CLASS                                HOSTS   ADDRESS        PORTS   AGE
    store-front   webapprouting.kubernetes.azure.com   *                      80      12m
    
  3. 在 ADDRESS 从空白变为实际公共 IP 地址后,使用 停止 CTRL-C 监视过程。kubectl

    以下示例输出显示向服务分配的有效公共 IP 地址:

    NAME          CLASS                                HOSTS   ADDRESS        PORTS   AGE
    store-front   webapprouting.kubernetes.azure.com   *       4.255.22.196   80      12m
    
  4. 若要查看 Azure Store 应用的实际效果,请打开 Web 浏览器并转到入口的外部 IP 地址。

    AKS 应用商店示例应用程序的屏幕截图。

删除群集

如果不打算完成 AKS 教程,请清理不必要的资源以避免产生 Azure 费用。 运行 az group delete 命令以移除资源组、容器服务及所有相关资源。

az group delete --name <resource-group> --yes --no-wait

注释

AKS 群集是使用用户分配的托管标识创建的。 如果你不再需要该身份,则可以手动将其移除。

后续步骤

在本快速入门中,你在自定义虚拟网络中使用 [AKS Automatic][what-is-aks-automatic] 部署了专用 Kubernetes 群集,然后将简单的多容器应用程序部署到该群集。 此示例应用程序仅用于演示目的,并未展示出 Kubernetes 应用程序的所有最佳做法。

若要详细了解 AKS Automatic,请继续阅读简介。

[Azure Kubernetes 服务自动化(预览版)介绍][what-is-aks-automatic]

https://learn.microsoft.com [az-feature-register]: https://learn.microsoft.com/cli/azure/feature#az_feature_register [az-feature-show]: https://learn.microsoft.com/cli/azure/feature#az_feature_show [az-provider-register]: https://learn.microsoft.com/cli/azure/provider#az_provider_register [what-is-aks-automatic]: ../intro-aks-automatic.md [Azure-Policy-RBAC-permissions]: /governance/policy/overview#azure-rbac-permissions-in-azure-policy [aks-entra-rbac]: /aks/manage-azure-rbac [aks-entra-rbac-builtin-roles]: /aks/manage-azure-rbac#create-role-assignments-for-users-to-access-the-cluster [availability-zones]: /reliability/availability-zones-region-support [az-network-vnet-create]: https://learn.microsoft.com/cli/azure/network/vnet#az-network-vnet-create [az-network-vnet-subnet-create]: https://learn.microsoft.com/cli/azure/network/vnet/subnet#az-network-vnet-subnet-create [az-identity-create]: https://learn.microsoft.com/cli/azure/identity#az-identity-create [az-role-assignment-create]: https://learn.microsoft.com/cli/azure/role/assignment#az-role-assignment-create [connect-private-cluster]: ../private-clusters.md#options-for-connecting-to-the-private-cluster