创建专用 Azure Kubernetes 服务 (AKS) 群集

本文帮助你部署基于专用链接的 AKS 群集。

AKS 中的专用群集概述

在专用群集中,控制平面或 API 服务器具有内部 IP 地址,这些地址在 RFC1918 - 专用 Internet 的地址分配文档中定义。 使用专用群集可以确保 API 服务器与节点池之间的网络流量仅保留在专用网络上。

控制平面或 API 服务器位于 AKS 管理的 Azure 资源组中,而你的群集或节点池位于你的资源组中。 服务器和群集或节点池可以通过 API 服务器虚拟网络中的 Azure 专用链接服务 以及 AKS 群集子网上公开的专用终结点相互通信。

创建专用 AKS 群集时,AKS 默认会创建具有相应 DNS 区域的专用和公用完全限定域名(FQDN)。 有关详细的 DNS 配置选项,请参阅 “配置专用 DNS 区域”、“专用 DNS 子区域”或“自定义子域”。

上市区域

专用群集在支持 AKS 的公共区域、Azure 中国云和由世纪互联运营的 Azure 区域提供。

专用 AKS 群集的先决条件

  • Azure CLI 版本 2.28.0 或更高版本。 可通过运行 az --version 查找版本,运行 az upgrade 升级版本。 如果需要进行安装或升级,请参阅安装 Azure CLI
  • 如果使用 Azure 资源管理器(ARM)或 Azure REST API,AKS API 版本必须为 2021-05-01 或更高版本
  • 若要使用自定义 DNS 服务器,请将 Azure 公共 IP 地址 168.63.129.16 添加为自定义 DNS 服务器中的上游 DNS 服务器,并确保将此公共 IP 地址添加为 第一个 DNS 服务器。 有关 Azure IP 地址的详细信息,请参阅 IP 地址 168.63.129.16 是什么?

重要

2025 年 11 月 30 日起,Azure Kubernetes 服务(AKS)不再支持或提供 Azure Linux 2.0 安全更新。 Azure Linux 2.0 节点映像在 202512.06.0 版中冻结。 从 2026 年 3 月 31 日开始,将删除节点映像,并且无法缩放节点池。 通过将 节点池升级到 受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3,迁移到受支持的 Azure Linux 版本。 有关详细信息,请参阅 AKS 上的 Azure Linux 2.0 节点池

专用 AKS 群集的限制和注意事项

  • 不能将 IP 授权范围应用于专用 API 服务器终结点 - 它们仅适用于公共 API 服务器。
  • Azure 专用链接服务限制适用于专用群集。
  • 不支持具有专用群集的 Azure DevOps Microsoft 托管的代理。 请考虑使用自托管代理
  • 如果需要在专用 AKS 群集上启用 Azure 容器注册表,请 为群集虚拟网络(VNet)中的容器注册表设置专用链接, 或在容器注册表的虚拟网络与专用群集的虚拟网络之间设置对等互连。
  • 删除或修改客户子网中的专用终结点会导致群集停止运行。
  • 仅标准 Azure 负载均衡器支持 Azure 专用链接服务。 不支持基本 Azure 负载均衡器。

创建具有默认基本网络的专用 AKS 群集

  1. 使用 az group create 命令创建资源组。 还可以将现有资源组用于 AKS 群集。

    az group create \
        --name <private-cluster-resource-group> \
        --location <location>
    
  2. 使用带 az aks create 标志的 --enable-private-cluster 命令创建具有默认基本网络的专用群集。

    此命令中的关键参数

    • --enable-private-cluster:启用专用群集模式。
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --generate-ssh-keys
    
  3. 配置 kubectl 以连接到专用 AKS 群集

创建具有高级网络的专用 AKS 群集

  1. 使用 az group create 命令创建资源组。 还可以将现有资源组用于 AKS 群集。

    az group create \
        --name <private-cluster-resource-group> \
        --location <location>
    
  2. 使用 az aks create 命令创建具有高级网络的专用群集。

    此命令中的关键参数

    • --enable-private-cluster:启用专用群集模式。
    • --network-plugin azure:指定 Azure CNI 网络插件。
    • --vnet-subnet-id:虚拟网络中现有子网的资源 ID。
    • --dns-service-ip:Kubernetes 服务地址范围中可用于群集 DNS 服务的可用 IP 地址。
    • --service-cidr:用于分配服务集群 IP 的 CIDR 表示法 IP 范围。
    az aks create \
        --resource-group <private-cluster-resource-group> \
        --name <private-cluster-name> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24
        --generate-ssh-keys
    
  3. 配置 kubectl 以连接到专用 AKS 群集

将自定义域与专用 AKS 群集配合使用

如果要配置只能在内部解析的自定义域,请参阅使用自定义域

在专用 AKS(Azure Kubernetes 服务)群集上禁用公共 FQDN

在新群集上禁用公共 FQDN

  • 在创建专用 AKS 群集时使用 az aks create 命令和 --disable-public-fqdn 标志禁用公共 FQDN。

    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resource-id> \
        --private-dns-zone <private-dns-zone-mode> \
        --disable-public-fqdn \
        --generate-ssh-keys
    

在现有群集上禁用公共 FQDN

  • 使用带 az aks update 标志的 --disable-public-fqdn 命令在现有 AKS 群集上禁用公共 FQDN。

    az aks update \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --disable-public-fqdn
    

为专用 AKS 群集配置专用 DNS 区域、专用 DNS 子区域或自定义子域

可以使用 Azure CLI(带 --private-dns-zone 参数)或 Azure 资源管理器(ARM)模板(使用 privateDNSZone 属性)为专用 AKS 群集配置专用 DNS 设置。 下表概述了可用于 --private-dns-zone 参数/ privateDNSZone 属性的选项:

设置 Description
system 配置专用 DNS 区域时的默认值。 如果省略 --private-dns-zone / privateDNSZone,AKS 会在节点资源组中创建专用 DNS 区域。
none 如果将 设置为 ,AKS 不会创建专用 DNS 区域。
<custom-private-dns-zone-resource-id> 若要使用此参数,需要为 Azure 全局云创建采用以下格式的专用 DNS 区域: privatelink.<region>.cx.prod.service.azk8s.cn<subzone>.privatelink.<region>.cx.prod.service.azk8s.cn。 需要专用 DNS 区域的资源 ID 供将来使用。 还需要具有专用 DNS 区域参与者网络参与者角色的用户分配标识或服务主体。 对于使用 API 服务器 VNet 集成的群集,专用 DNS 区域支持命名格式 private.<region>.cx.prod.service.azk8s.cn<subzone>.private.<region>.cx.prod.service.azk8s.cn。 创建群集后无法更改或删除此资源,因为这可能会导致出现性能问题和群集升级失败。 只能将 --fqdn-subdomain <subdomain><custom-private-dns-zone-resource-id> 结合使用,以便为 privatelink.<region>.cx.prod.service.azk8s.cn 提供子域功能。 如果要指定子区域,则名称有 32 个字符的限制 <subzone>

为专用 AKS 群集配置专用 DNS 时,请记住以下注意事项:

  • 如果专用 DNS 区域与 AKS 群集位于不同的订阅中,需要在这两个订阅中注册 Azure 提供程序 Microsoft.ContainerServices
  • 如果为 AKS 群集配置了 Active Directory 服务主体,则 AKS 不支持将系统分配的托管标识用于自定义专用 DNS 区域。 群集必须使用用户分配的托管标识身份验证

创建具有专用 DNS 区域的专用 AKS 群集

  1. 使用 az aks create 命令创建具有专用 DNS 区域的专用 AKS 群集。

    此命令中的关键参数

    • --enable-private-cluster:启用专用群集模式。
    • --private-dns-zone [system|none]:配置群集的专用 DNS 区域。 默认值为 system
    • --assign-identity <resource-id>:具有 专用 DNS 区域参与者网络参与者 角色的用户分配的托管身份的资源 ID。
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resource-id> \
        --private-dns-zone [system|none] \
        --generate-ssh-keys
    
  2. 配置 kubectl 以连接到专用 AKS 群集

创建具有自定义专用 DNS 区域和专用 DNS 子区域的专用 AKS 群集

  1. 使用 az aks create 命令创建具有自定义专用 DNS 区域或子区域的专用 AKS 群集。

    此命令中的关键参数

    • --enable-private-cluster:启用专用群集模式。
    • --private-dns-zone <custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>:Azure 全局云采用以下格式的预创建专用 DNS 区域或子区域的资源 ID: privatelink.<region>.cx.prod.service.azk8s.cn<subzone>.privatelink.<region>.cx.prod.service.azk8s.cn
    • --assign-identity <resource-id>:具有 专用 DNS 区域参与者网络参与者 角色的用户分配的托管身份的资源 ID。
    # The custom private DNS zone name should be in the following format: "<subzone>.privatelink.<region>.cx.prod.service.azk8s.cn"
    
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resource-id> \
        --private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
        --generate-ssh-keys
    
  2. 配置 kubectl 以连接到专用 AKS 群集

创建具有自定义专用 DNS 区域和自定义子域的专用 AKS 群集

  1. 使用 az aks create 命令创建具有自定义专用 DNS 区域和子域的专用 AKS 群集。

    此命令中的关键参数

    • --enable-private-cluster:启用专用群集模式。
    • --private-dns-zone <custom-private-dns-zone-resource-id>:Azure 全局云的预先创建的专用 DNS 区域的资源 ID 格式如下:privatelink.<region>.cx.prod.service.azk8s.cn
    • --fqdn-subdomain <subdomain>:用于自定义专用 DNS 区域中群集 FQDN 的子域。
    • --assign-identity <resource-id>:具有 专用 DNS 区域参与者网络参与者 角色的用户分配的托管身份的资源 ID。
    # The custom private DNS zone name should be in one of the following formats: "privatelink.<region>.cx.prod.service.azk8s.cn" or "<subzone>.privatelink.<region>.cx.prod.service.azk8s.cn"
    
    az aks create \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --load-balancer-sku standard \
        --enable-private-cluster \
        --assign-identity <resource-id> \
        --private-dns-zone <custom-private-dns-zone-resource-id> \
        --fqdn-subdomain <subdomain> \
        --generate-ssh-keys
    
  2. 配置 kubectl 以连接到专用 AKS 群集

将现有专用 AKS 群集从专用 DNS 区域更新为公共区域

只能从 byo (自带的)或 system 更新到 none。 不支持更新值的其他组合。

警告

byosystem 将专用群集更新为 none 时,代理节点将更改为使用公共 FQDN。 在使用 Azure 虚拟机规模集的 AKS 群集中,将执行节点映像升级,以使用公共 FQDN 更新节点。

  • 使用byo命令,将参数system设置为none,以便从az aks update--private-dns-zone更新到none专用群集。

    az aks update \
        --name <private-cluster-name> \
        --resource-group <private-cluster-resource-group> \
        --private-dns-zone none
    

配置 kubectl 以连接到专用 AKS 群集

若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。 若要在本地安装 kubectl,请使用 az aks install-cli 命令。

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

    az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>
    
  2. 使用 kubectl get 命令验证与群集之间的连接。 此命令将返回群集节点的列表。

    kubectl get nodes
    

    该命令返回类似于以下示例输出的输出:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-12345678-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-12345678-vmss000002   Ready    agent   3h6m   v1.15.11