你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
配置了 API 服务器 VNet 集成的 Azure Kubernetes 服务 (AKS) 群集将 API 服务器终结点直接投影到部署 AKS 的 VNet 上的委派子网中。 通过 API 服务器 VNet 集成,无需构建专用链接或隧道,即可在 API 服务器与群集节点之间实现网络通信。 API 服务器在委派子网中的内部负载均衡器 VIP 后面提供,节点将配置为使用该子网。 使用 API 服务器 VNet 集成可以确保 API 服务器与节点池之间的网络流量仅保留在专用网络上。
API 服务器连接
控制平面或 API 服务器位于 AKS 托管的 Azure 订阅中。 群集或节点池位于 Azure 订阅中。 构成群集节点的服务器和虚拟机可以通过投影到委托子网的 API 服务器 VIP 和 Pod IP 相互通信。
公共或专用群集支持 API 服务器 VNet 集成。 可以在预配群集后添加或删除公共访问权限。 与非 VNet 集成群集不同,代理节点始终与 API 服务器内部负载均衡器 (ILB) IP 的专用 IP 地址直接通信,而无需使用 DNS。 所有从节点到 API 服务器的流量都保留在专用网络上,进行从 API 服务器到节点的连接无需隧道。 如果启用了公用网络访问,需要与 API 服务器通信的群集外客户端可以正常通信。 如果禁用了公用网络访问,则你应遵循与标准专用群集相同的专用 DNS 设置方法。
先决条件
- 必须安装 Azure CLI 2.73.0 或更高版本。 可以使用
az --version
命令查看版本。
有限的可用性
重要
API 服务器 VNet 集成在某些区域中的可用性和容量有限。
创建或更新启用了 API Server VNet 集成的群集时,可能会收到以下错误:
API Server VNet Integration is currently unavailable in region (_region_) due to high demand and limited capacity. AKS is actively expanding support for this feature. Check for other available regions at aka.ms/AksVnetIntegration.
此消息指示所选区域已暂时达到 API 服务器 VNet 集成的容量。
若要继续,可以:
- 稍后重试请求,因为容量可能可用。
- 选择当前支持此功能的备用区域。
谨慎
在群集上启用 API 服务器 VNet 集成后,停止群集会解除控制平面的分配并释放容量。 在遇到容量限制的区域,客户可能无法启动已停止的群集。 我们不建议因此停止任务关键型工作负载。
API Server VNet 集成在以下区域中可用:
australiacentral、australiacentral2、australiaeast、australiasoutheast、brazilsoutheast、canadacentral、canadaeast、centraluseuap、eastus2euap、francecentral、francesouth、germanynorth、indonesiacentral、israelcentral、italynorth、japaneast、japanwest、jioindiacentral、jioindiawest、koreacentral、koreasouth、newzealandnorth、northcentralus、norwayeast、norwaywest、polandcentral、southafricanorth、southafricawest、southcentralus、southeastus、southindia、spaincentral、swedencentral、swedensouth、switzerlandwest、taiwannorth、taiwannorthwest、uaecentral、uaenorth、ukwest、westcentralus、westus、westus3
使用托管 VNet 创建具有 API 服务器 VNet 集成的 AKS 群集
可以在托管 VNet 或自带 VNet 模式中配置具有 API 服务器 VNet 集成的 AKS 群集。 可以将它们创建为公共群集(可通过公共 IP 访问 API 服务器)或专用群集(其中的 API 服务器只能通过专用 VNet 连接进行访问)。 也可以在公共和专用状态之间切换,无需重新部署群集。
创建资源组
使用
az group create
命令创建资源组。az group create --___location westus2 --name <resource-group>
部署公共群集
使用带有
az aks create
标志的--enable-api-server-vnet-integration
命令,为托管 VNet 部署具有 API 服务器 VNet 集成的公共 AKS 群集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --___location <___location> \ --network-plugin azure \ --enable-apiserver-vnet-integration \ --generate-ssh-keys
部署专用群集
使用带有
az aks create
和--enable-api-server-vnet-integration
标志的--enable-private-cluster
命令,为托管 VNet 部署具有 API 服务器 VNet 集成的专用 AKS 群集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --___location <___location> \ --network-plugin azure \ --enable-private-cluster \ --enable-apiserver-vnet-integration \ --generate-ssh-keys
使用自带 VNet 创建具有 API 服务器 VNet 集成的专用 AKS 群集
使用自带 VNet 时,必须创建一个 API 服务器子网并将其委派给 Microsoft.ContainerService/managedClusters
,这会授予 AKS 服务将 API 服务器 Pod 和内部负载均衡器注入该子网的权限。 无法将该子网用于任何其他工作负载,但可将其用于同一虚拟网络中的多个 AKS 群集。 支持的最小 API 服务器子网大小为 /28。
群集标识需要拥有对 API 服务器子网和节点子网的权限。 缺少对 API 服务器子网的权限可能导致预配失败。
警告
AKS 群集在子网地址空间中保留至少 9 个 IP。 用尽 IP 地址可能会阻止 API 服务器缩放并导致 API 服务器中断。
创建资源组
- 使用
az group create
命令创建资源组。
az group create --___location <___location> --name <resource-group>
创建虚拟网络
使用
az network vnet create
命令创建虚拟网络。az network vnet create --name <vnet-name> \ --resource-group <resource-group> \ --___location <___location> \ --address-prefixes 172.19.0.0/16
使用
az network vnet subnet create
命令创建 API 服务器子网。az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <apiserver-subnet-name> \ --delegations Microsoft.ContainerService/managedClusters \ --address-prefixes 172.19.0.0/28
使用
az network vnet subnet create
命令创建群集子网。az network vnet subnet create --resource-group <resource-group> \ --vnet-name <vnet-name> \ --name <cluster-subnet-name> \ --address-prefixes 172.19.1.0/24
创建托管标识并为其授予对虚拟网络的权限
使用
az identity create
命令创建托管标识。az identity create --resource-group <resource-group> --name <managed-identity-name> --___location <___location>
使用
az role assignment create
命令将网络参与者角色分配给 API 服务器子网。az role assignment create --scope <apiserver-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>
使用
az role assignment create
命令将网络参与者角色分配给群集子网。az role assignment create --scope <cluster-subnet-resource-id> \ --role "Network Contributor" \ --assignee <managed-identity-client-id>
部署公共群集
使用带有
az aks create
标志的--enable-api-server-vnet-integration
命令,部署具有 API 服务器 VNet 集成的公共 AKS 群集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --___location <___location> \ --network-plugin azure \ --enable-apiserver-vnet-integration \ --vnet-subnet-id <cluster-subnet-resource-id> \ --apiserver-subnet-id <apiserver-subnet-resource-id> \ --assign-identity <managed-identity-resource-id> \ --generate-ssh-keys
部署专用群集
使用带有
az aks create
和--enable-api-server-vnet-integration
标志的--enable-private-cluster
命令,部署具有 API 服务器 VNet 集成的专用 AKS 群集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --___location <___location> \ --network-plugin azure \ --enable-private-cluster \ --enable-apiserver-vnet-integration \ --vnet-subnet-id <cluster-subnet-resource-id> \ --apiserver-subnet-id <apiserver-subnet-resource-id> \ --assign-identity <managed-identity-resource-id> \ --generate-ssh-keys
将现有 AKS 群集转换为 API 服务器 VNet 集成
警告
API Server VNet 集成是一种单向的容量敏感功能。
在启用 API Server VNet 集成时,目前尚未对该区域的容量可用性进行验证。 如果启用该功能,而区域容量不可用,则在停止群集后可能无法启动该群集。
推荐的方法
创建一个新群集,并在创建时启用该功能。 验证预配是否成功,然后迁移工作负载。 此方法可避免在更新以启用该功能时发生的控制平面停机或中断的风险。
需要手动重启。 如果决定接受风险并更新现有群集,请在启用 API Server VNet 集成后使用
az aks update --enable-apiserver-vnet-integration
,必须手动重启群集才能使更改生效。 此重启不是自动化的,与任何重启一样,群集在完成之前将暂时不可用。无法禁用功能,并且无法保证容量
启用后,该功能是永久性的。 不能禁用它或还原到以前的配置。 这意味着,如果启用该功能,但该功能所需的容量不可用,则在停止群集后可能无法重新启动群集。
此升级在所有节点池上执行节点映像版本升级,并在所有工作负载进行滚动映像升级期间重启工作负载。
警告
将群集转换为 API 服务器 VNet 集成会导致 API 服务器 IP 地址更改,但主机名会保持不变。 如果 API 服务器的 IP 地址已在任何防火墙或网络安全组规则中配置,则可能需要更新这些规则。
使用带有
az aks update
标志的--enable-apiserver-vnet-integration
命令,将群集更新到 API 服务器 VNet 集成。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-apiserver-vnet-integration \ --apiserver-subnet-id <apiserver-subnet-resource-id>
在具有 API 服务器 VNet 集成的现有群集上启用或禁用专用群集模式
使用 API 服务器 VNet 集成配置的 AKS 群集可以启用或禁用公用网络访问/专用群集模式,而无需重新部署群集。 不会更改 API 服务器主机名,但会根据需要修改或删除公共 DNS 条目。
注意
--disable-private-cluster
当前处于预览状态。 有关详细信息,请参阅参考和支持级别。
启用专用群集模式
使用带有
az aks update
标志的--enable-private-cluster
命令启用专用群集模式。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --enable-private-cluster
禁用专用群集模式
使用带有
az aks update
标志的--disable-private-cluster
命令禁用专用群集模式。az aks update --name <cluster-name> \ --resource-group <resource-group> \ --disable-private-cluster
使用 kubectl 连接到群集
使用
kubectl
命令将az aks get-credentials
配置为连接到你的群集。az aks get-credentials --resource-group <resource-group> --name <cluster-name>
通过专用链接公开 API 服务器
可以使用 Azure 专用链接通过 API 服务器 VNet 集成公开专用群集的 API 服务器终结点。 以下步骤演示如何在群集 VNet 中创建专用链接服务(PLS),并使用专用终结点从另一个 VNet 或订阅连接到它。
创建 API Server VNet 集成专用群集
使用
az aks create
命令并带有--enable-api-server-vnet-integration
和--enable-private-cluster
标志创建具有 API Server VNet 集成的专用 AKS 群集。az aks create --name <cluster-name> \ --resource-group <resource-group> \ --___location <___location> \ --enable-private-cluster \ --enable-apiserver-vnet-integration
NSG 安全规则
默认情况下,允许 VNet 中的所有流量。 但是,如果添加了 NSG 规则来限制不同子网之间的流量,请确保 NSG 安全规则允许以下类型的通信:
目标 | 来源 | 协议 | 端口 | 使用 |
---|---|---|---|---|
APIServer 子网 CIDR | 群集子网 | TCP | 443 和 4443 | 如需启用节点与 API 服务器之间的通信,则必须支持。 |
APIServer 子网 CIDR | Azure 负载均衡器 | TCP | 9988 | 如需启用 Azure 负载均衡器与 API 服务器之间的通信,则必须支持。 还可以启用 Azure 负载均衡器与 API 服务器子网 CIDR 之间的所有通信。 |
后续步骤
如需相关的最佳做法,请参阅 AKS 中的网络连接和安全性的最佳做法。