你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文介绍如何使用 Azure CLI 或 Terraform 部署基于专用链接的 AKS 群集。 如果有兴趣创建 AKS 群集而无需专用链接或隧道,请参阅创建具有 API Server VNet 集成的Azure Kubernetes 服务 (AKS)群集。
AKS 中的专用群集概述
在专用群集中,控制平面或 API 服务器具有内部 IP 地址,这些地址在 RFC1918 - 专用 Internet 的地址分配文档中定义。 使用专用群集可以确保 API 服务器与节点池之间的网络流量仅保留在专用网络上。
控制平面或 API 服务器位于 AKS 管理的Azure资源组中,群集或节点池位于资源组中。 服务器和群集或节点池可以通过 API 服务器虚拟网络中的 Azure 专用链接 服务以及 AKS 群集子网上公开的专用终结点相互通信。
创建专用 AKS 群集时,AKS 默认会创建具有相应 DNS 区域的专用和公用完全限定域名(FQDN)。 有关详细的 DNS 配置选项,请参阅 “配置专用 DNS 区域”、“专用 DNS 子区域”或“自定义子域”。
区域可用性
专用群集在支持 AKS 的公共区域、Azure 政府和由世纪互联区域运营的 Microsoft Azure 中提供。
重要
2026年8月18日,中国地区的Azure将正式停用所有Microsoft Defender for Cloud功能。 由于即将停用,Azure中国客户不再能够将新订阅加入该服务。 新订阅是指截至到 2025 年 8 月 18 日(即服务停用公告日期)之前尚未接入 Microsoft Defender for Cloud 服务的任何订阅。 有关停用的详细信息,请参阅由世纪互联运营的 Microsoft Azure 中的 Microsoft Defender for Cloud 弃用公告。
客户应与世纪互联运营的Microsoft Azure的帐户代表合作,评估此退役对其自身运营的影响。
专用 AKS 群集的先决条件
有效的 Azure 订阅。 如果没有Azure订阅,请在开始前创建 free 帐户。
使用
az account set命令设置订阅上下文。 例如:az account set --subscription "00000000-0000-0000-0000-000000000000"Azure CLI版本 2.28.0 或更高版本。 使用
az --version命令查找版本。 如果需要安装或升级,请参阅 Install Azure CLI。如果使用 Azure 资源管理器(ARM)或 Azure REST API,AKS API 版本必须2021-05-01 或更高版本。
若要使用自定义 DNS 服务器,请将Azure公共 IP 地址168.63.129.16添加为自定义 DNS 服务器的上游 DNS 服务器,并确保将此公共 IP 地址添加为 first DNS 服务器。 有关Azure IP 地址的详细信息,请参阅 IP 地址 168.63.129.16?
- 应将群集的 DNS 区域转发到 168.63.129.16。 可以在 Azure 服务 DNS 区域配置中找到有关区域名称的详细信息。
使用 API 服务器 VNet 集成启用的现有 AKS 群集可以启用专用群集模式。 有关详细信息,请参阅 在具有 API Server VNet 集成的现有群集上启用或禁用专用群集模式。
如果需要在专用 AKS 群集上启用 Azure 容器注册表,请在群集虚拟网络 (VNet) 中为容器注册表设置专用链接,或设置容器注册表所在 VNet 与专用群集 VNet 之间的对等互连。
已安装 kubectl 。 您可以使用
az aks install-cli命令在本地安装它。
- 在本地安装 Terraform。 有关安装说明,请参阅 安装 Terraform。
重要
从2025年11月30日开始,Azure Kubernetes 服务 (AKS) 不再支持或提供 Azure Linux 2.0 的安全更新。 Azure Linux 2.0 节点映像在 202512.06.0 版中被冻结。 从 2026 年 3 月 31 日开始,将删除节点映像,并且无法缩放节点池。 迁移到受支持的 Azure Linux 版本,方法是将节点池升级到受支持的 Kubernetes 版本或迁移到 osSku AzureLinux3。 有关详细信息,请参阅 退役GitHub问题和 Azure 更新退休公告。 若要随时了解公告和更新,请按照 AKS 发行说明进行操作。
局限性
- IP 授权范围仅适用于公共 API 服务器。 不能将这些范围应用于专用 API 服务器终结点。
- Azure 专用链接服务限制适用于专用群集。
- 不支持在专用群集中使用由 Microsoft 托管的 Azure DevOps 代理。 请考虑使用自托管代理。
- 删除或修改客户子网中的专用终结点会导致群集停止运行。
- 标准Azure 负载均衡器仅支持Azure 专用链接服务。 不兼容基本 Azure 负载均衡器。
采用自定义 DNS 的专用 AKS 群集的中心和分支
Hub 和辐射体系结构通常用于在Azure中部署网络。 在许多此类部署中,会将分支 VNet 中的 DNS 设置配置为引用中心 DNS 转发器,以允许本地和基于 Azure 的 DNS 解析。
下图说明了一个具有自定义 DNS 的专用 AKS 集群的中心辐射型体系结构:
- 创建专用群集时,默认在群集管理的资源组中创建专用终结点(1)和专用 DNS 区域(2)。 群集使用专用区域中的
A记录来解析专用终结点的 IP,以便与 API 服务器通信。 - 专用 DNS 区域仅链接到群集节点附加到的 VNet(3),这意味着专用终结点只能由该链接 VNet 中的主机解析。 在 VNet 上不配置任何自定义 DNS(默认设置)的情况下,这可以正常工作,因为主机指向用于 DNS 的 168.63.129.16,因此可以解析专用 DNS 区域中的记录(由于存在链接)。
- 如果保留默认的专用 DNS 区域行为,AKS 会尝试直接将区域链接到托管群集的分支 VNet(即使该区域已链接到中心 VNet)。
- 在使用自定义 DNS 服务器的分支 VNet 中,如果群集的托管标识在该分支 VNet 上缺少“网络参与者”角色,则此操作可能会失败。 若要防止失败,请选择以下受支持的配置 之一 :
-
自定义专用 DNS 区域:提供现有的专用区域并将其设置为
privateDNSZone/--private-dns-zone其资源 ID。 将该区域链接到相应的 VNet(例如中心 VNet),并将publicDNS设置为false,使用--disable-public-fqdn。 仅限公共 DNS :通过设置为 并将 保持其默认值( ),同时不使用 来禁用专用区域创建。
-
自定义专用 DNS 区域:提供现有的专用区域并将其设置为
- 在使用自定义 DNS 服务器的分支 VNet 中,如果群集的托管标识在该分支 VNet 上缺少“网络参与者”角色,则此操作可能会失败。 若要防止失败,请选择以下受支持的配置 之一 :
- 如果你将自带 (BYO) 路由表与 kubenet 配合使用,并且将自带 DNS 与专用群集配合使用,群集创建操作将会失败。 你需要在群集创建操作失败之后将节点资源组中的
RouteTable关联到子网,以使创建能够成功。
使用自定义 DNS 的专用 AKS 群集的限制
-
privateDNSZone同时将 /--private-dns-zonenone设置为publicDNS: false/--disable-public-fqdn。 - 条件转发不支持子域。
创建资源组
使用 az group create 命令创建资源组。 还可以将现有资源组用于 AKS 群集。
az group create \
--name <private-cluster-resource-group> \
--location <location>
创建具有默认基本网络的专用 AKS 群集
使用带 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
创建名为
main.tf的文件,并添加以下代码以定义 Terraform 版本并指定Azure提供程序:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }将以下代码添加到
main.tf,为Azure订阅 ID、资源组名称、位置和 AKS 群集名称创建输入变量。 可以根据需要修改默认值。variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-basic" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-basic" }将以下代码添加到
main.tf以创建Azure资源组:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location }添加以下代码到
main.tf以创建具有基本网络的专用 AKS 群集:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privatebasicaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "kubenet" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
创建具有高级网络的专用 AKS 群集
使用 az aks create 命令创建具有高级网络的专用群集。
此命令中的关键参数:
-
--enable-private-cluster:启用专用群集模式。 -
--network-plugin azure:指定 Azure CNI 网络插件。 -
--vnet-subnet-id <subnet-id>:VNet 中现有子网的资源 ID。 -
--dns-service-ip <dns-service-ip>:Kubernetes 服务地址范围中可用于群集 DNS 服务的可用 IP 地址。 例如,10.2.0.10。 -
--service-cidr <service-cidr>:用于分配服务集群 IP 的 CIDR 表示法 IP 范围。 例如,10.2.0.0/24。
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 <dns-service-ip> \
--service-cidr <service-cidr> \
--generate-ssh-keys
创建名为
main.tf的文件,并添加以下代码以定义 Terraform 版本并指定Azure提供程序:terraform { required_version = ">= 1.3.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} subscription_id = var.subscription_id }将以下代码添加到
main.tf,为Azure订阅 ID、资源组名称、位置、AKS 群集名称、虚拟网络(VNet)名称和子网名称创建输入变量。 可以根据需要修改默认值。variable "subscription_id" { description = "The Azure subscription ID." type = string } variable "resource_group_name" { description = "The name of the resource group for the AKS cluster." type = string default = "rg-private-aks-advanced" } variable "location" { description = "The Azure region where the resources will be created." type = string default = "eastus" } variable "aks_cluster_name" { description = "The name of the AKS cluster." type = string default = "aks-private-advanced" } variable "vnet_name" { description = "The name of the virtual network." type = string default = "vnet-private-aks" } variable "subnet_name" { description = "The name of the subnet used by AKS." type = string default = "snet-aks" }将以下代码添加到
main.tf,以创建Azure资源组、VNet 和子网:resource "azurerm_resource_group" "this" { name = var.resource_group_name location = var.location } resource "azurerm_virtual_network" "this" { name = var.vnet_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name address_space = ["10.0.0.0/8"] } resource "azurerm_subnet" "aks" { name = var.subnet_name resource_group_name = azurerm_resource_group.this.name virtual_network_name = azurerm_virtual_network.this.name address_prefixes = ["10.240.0.0/16"] }将以下代码添加到
main.tf以创建具有高级网络的 AKS 群集:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateadvancedaks" private_cluster_enabled = true default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
将自定义域与专用 AKS 群集配合使用
如果要配置只能在内部解析的自定义域,请参阅使用自定义域。
在专用 AKS(Azure Kubernetes 服务)群集上禁用公共 FQDN
在新群集上禁用公共 FQDN
在创建专用 AKS 群集时使用 az aks create 命令和 --disable-public-fqdn 标志禁用公共 FQDN。
此命令中的关键参数:
-
--disable-public-fqdn:禁用 API 服务器的公共完全限定域名(FQDN)。 -
--assign-identity <resource-id>:指定要用于群集的托管标识。 -
--private-dns-zone [system|none]:指定要用于群集的专用 DNS 区域。system是配置专用 DNS 区域时的默认值。 如果省略--private-dns-zone,AKS 会在节点资源组中创建专用 DNS 区域。none禁用创建专用 DNS 区域。
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] \
--disable-public-fqdn \
--generate-ssh-keys
按照创建 具有高级网络的专用 AKS 群集 或 创建具有默认基本网络的专用 AKS 群集 中的步骤 1-3 设置 Terraform 配置,并根据方案创建必要的资源。 此示例使用高级网络。
添加以下代码以
main.tf创建具有用户分配标识和禁用公共 FQDN 的专用 AKS 群集:resource "azurerm_user_assigned_identity" "aks" { name = "id-private-aks-public-fqdn-off" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
在现有群集上禁用公共 FQDN
使用带 az aks update 标志的 --disable-public-fqdn 命令在现有 AKS 群集上禁用公共 FQDN。
此命令中的关键参数:
-
--disable-public-fqdn:禁用 API 服务器的公共完全限定域名(FQDN)。
az aks update \
--name <private-cluster-name> \
--resource-group <private-cluster-resource-group> \
--disable-public-fqdn
将以下代码添加到现有
main.tf代码,以在现有 AKS 群集上禁用公共 FQDN。 此示例使用高级网络。 可以通过更改相关的 Terraform 资源和参数来修改它以使用默认的基本网络。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "privateaks" private_cluster_enabled = true private_cluster_public_fqdn_enabled = false private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { load_balancer_sku = "standard" network_plugin = "azure" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。terraform plan terraform apply
专用 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 |
如果将 |
<custom-private-dns-zone-resource-id> |
若要使用此参数,需要使用以下格式为Azure全局云创建专用 DNS 区域:privatelink.<region>.azmk8s.io 或 <subzone>.privatelink.<region>.azmk8s.io。 需要专用 DNS 区域的资源 ID 供将来使用。 还需要具有专用 DNS 区域参与者和网络参与者角色的用户分配标识或服务主体。 对于使用 API 服务器 VNet 集成的群集,专用 DNS 区域支持命名格式 private.<region>.azmk8s.io 或 <subzone>.private.<region>.azmk8s.io。
创建群集后,无法更改或删除这些资源资源,因为它可能会导致性能问题和群集升级失败。 只能将 --fqdn-subdomain <subdomain> 与 <custom-private-dns-zone-resource-id> 结合使用,以便为 privatelink.<region>.azmk8s.io 提供子域功能。 如果要指定子区域,则名称有 32 个字符的限制 <subzone> 。 |
专用 DNS 的注意事项
为专用 AKS 群集配置专用 DNS 时,请记住以下注意事项:
- 如果专用 DNS 区域与 AKS 群集位于不同的订阅中,则需要在这两个订阅中注册
Microsoft.ContainerServiceAzure 提供程序。 - 如果 AKS 群集配置了Active Directory服务主体,则 AKS 不支持将系统分配的托管标识与自定义专用 DNS 区域配合使用。 群集必须使用用户分配的托管标识身份验证。
创建具有专用 DNS 区域的专用 AKS 群集
使用 az aks create 命令创建具有专用 DNS 区域的专用 AKS 群集。
此命令中的关键参数:
-
--enable-private-cluster:启用专用群集模式。 -
--private-dns-zone [system|none]:配置群集的专用 DNS 区域。system是配置专用 DNS 区域时的默认值。 如果省略--private-dns-zone,AKS 会在节点资源组中创建专用 DNS 区域。none禁用创建专用 DNS 区域。 -
--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
按照创建 具有高级网络的专用 AKS 群集 或 创建具有默认基本网络的专用 AKS 群集 中的步骤 1-3 设置 Terraform 配置,并根据方案创建必要的资源。 此示例使用高级网络。
将以下代码添加到
main.tf,以创建具有 AKS 管理专用 DNS 区域的专用 AKS 群集:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-system-dns" private_cluster_enabled = true private_dns_zone_id = "System" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
在没有专用 DNS 区域的情况下创建专用 AKS 群集
按照创建 具有高级网络的专用 AKS 群集 或 创建具有默认基本网络的专用 AKS 群集 中的步骤 1-3 设置 Terraform 配置,并根据方案创建必要的资源。 此示例使用高级网络。
添加以下代码以
main.tf创建没有专用 DNS 区域的 AKS 群集:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-no-dns" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "SystemAssigned" } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
创建具有自定义专用 DNS 区域和专用 DNS 子区域的专用 AKS 群集
使用 az aks create 命令创建具有自定义专用 DNS 区域或子区域的专用 AKS 群集。
此命令中的关键参数:
-
--enable-private-cluster:启用专用群集模式。 -
--private-dns-zone [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>]:现有专用 DNS 区域或子区域的资源 ID,适用于 Azure 全局云,采用以下格式:privatelink.<region>.azmk8s.io或<subzone>.privatelink.<region>.azmk8s.io。 -
--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 [<custom-private-dns-zone-resource-id>|<custom-private-dns-subzone-resource-id>] \
--generate-ssh-keys
使用自定义专用 DNS 区域时,你负责创建和管理 DNS 基础结构,而不是依赖于Azure管理的 DNS。 这包括创建 DNS 区域、将其链接到 VNet,以及分配 AKS 管理记录所需的权限。
对于自定义 DNS 配置,你必须使用具有专用 DNS 区域参与者和网络参与者角色的用户分配的托管标识。
按照创建 具有高级网络的专用 AKS 群集 或 创建具有默认基本网络的专用 AKS 群集 中的步骤 1-3 设置 Terraform 配置,并根据方案创建必要的资源。 此示例使用高级网络。
添加代码到
main.tf中以创建具有自定义私有 DNS 域或子域的私人 AKS 群集:resource "azurerm_user_assigned_identity" "aks" { name = "aks-custom-dns-id" location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone" "aks" { name = "privatelink.eastus.azmk8s.io" resource_group_name = azurerm_resource_group.this.name } resource "azurerm_private_dns_zone_virtual_network_link" "link" { name = "aks-dns-link" resource_group_name = azurerm_resource_group.this.name private_dns_zone_name = azurerm_private_dns_zone.aks.name virtual_network_id = azurerm_virtual_network.this.id } resource "azurerm_role_assignment" "dns" { scope = azurerm_private_dns_zone.aks.id role_definition_name = "Private DNS Zone Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_role_assignment" "network" { scope = azurerm_virtual_network.this.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id } resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-custom-dns" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } depends_on = [ azurerm_role_assignment.dns, azurerm_role_assignment.network ] }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
创建具有自定义专用 DNS 区域和自定义子域的专用 AKS 群集
使用 az aks create 命令创建具有自定义专用 DNS 区域和子域的专用 AKS 群集。
此命令中的关键参数:
-
--enable-private-cluster:启用专用群集模式。 -
--private-dns-zone <custom-private-dns-zone-resource-id>:用于 Azure 全局云的现有专用 DNS 区域的资源 ID,格式如下:privatelink.<region>.azmk8s.io。 -
--fqdn-subdomain <subdomain>:用于自定义专用 DNS 区域中群集 FQDN 的子域。 -
--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 <custom-private-dns-zone-resource-id> \
--fqdn-subdomain <subdomain> \
--generate-ssh-keys
按照创建 具有高级网络的专用 AKS 群集 或 创建具有默认基本网络的专用 AKS 群集 中的步骤 1-3 设置 Terraform 配置,并根据方案创建必要的资源。 此示例使用高级网络。
将以下代码添加到
main.tf以创建具有自定义私有 DNS 区域和子域的专用 AKS 群集:resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-subdomain" private_cluster_enabled = true private_dns_zone_id = azurerm_private_dns_zone.aks.id fqdn_subdomain = "team1" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }按照步骤 初始化 Terraform、 格式化和验证 Terraform 配置、 创建 Terraform 执行计划、 应用 Terraform 配置并 连接到 AKS 群集。
将现有专用 AKS 群集从专用 DNS 区域更新为公共区域
只能从 byo(自带)或 system 更新到 none。 不支持更新值的其他组合。
警告
从 byo 或 system 将专用群集更新为 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
将以下代码添加到现有
main.tf代码,将专用 AKS 群集从专用 DNS 区域更新为公共区域。 此示例使用高级网络。 可以通过更改相关的 Terraform 资源和参数来修改它以使用默认的基本网络。resource "azurerm_kubernetes_cluster" "this" { name = var.aks_cluster_name location = azurerm_resource_group.this.location resource_group_name = azurerm_resource_group.this.name dns_prefix = "aks-update" private_cluster_enabled = true private_dns_zone_id = "None" default_node_pool { name = "system" node_count = 1 vm_size = "Standard_DS2_v2" vnet_subnet_id = azurerm_subnet.aks.id } identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } network_profile { network_plugin = "azure" load_balancer_sku = "standard" dns_service_ip = "10.2.0.10" service_cidr = "10.2.0.0/24" } }使用
terraform plan和terraform apply命令应用更新后的 Terraform 配置。terraform plan terraform apply
初始化 Terraform
使用main.tf命令在包含terraform init文件的目录中初始化 Terraform。 此命令下载用于通过 Terraform 管理 Azure 资源所需的 Azure 提供程序。
terraform init
格式化并验证 Terraform 配置
使用 terraform fmt 和 terraform validate 命令格式化和验证 Terraform 配置。
terraform fmt
terraform validate
创建 Terraform 执行计划
使用 terraform plan 命令创建 Terraform 执行计划。 此命令显示 Terraform 将在Azure订阅中创建或修改的资源。
terraform plan -var="subscription_id=<your-subscription-id>"
应用 Terraform 配置
查看并确认执行计划后,使用 terraform apply 命令应用 Terraform 配置。 此命令创建或修改Azure订阅中 main.tf 文件中定义的资源。
terraform apply -var="subscription_id=<your-subscription-id>"
配置 kubectl 以连接到专用 AKS 群集
若要管理 Kubernetes 群集,请使用 Kubernetes 命令行客户端 kubectl。 如果使用Azure Cloud Shell,则已安装 kubectl。 若要在本地安装 kubectl,请使用 az aks install-cli 命令。
使用
kubectl命令将az aks get-credentials配置为连接到你的 Kubernetes 群集。 此命令将下载凭据,并将 Kubernetes CLI 配置为使用这些凭据。az aks get-credentials --resource-group <private-cluster-resource-group> --name <private-cluster-name>使用
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