你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于:✔️ AKS Automatic ✔️ AKS Standard
使用 API Server VNet 集成配置的Azure Kubernetes 服务 (AKS)群集将 API 服务器终结点直接投影到部署 AKS 的 VNet 中的委托子网中。 通过 API 服务器 VNet 集成,无需构建专用链接或隧道,即可在 API 服务器与群集节点之间实现网络通信。 API 服务器在委派子网中的内部负载均衡器 VIP 后面提供,节点将配置为使用该子网。 使用 API 服务器 VNet 集成可以确保 API 服务器与节点池之间的网络流量仅保留在专用网络上。
对于大多数生产工作负荷,AKS 自动是推荐的默认 AKS 体验。 默认情况下,AKS 自动已准备就绪,并包含 API Server VNet 集成作为预配置的群集安全功能。 在 AKS 标准版中,API Server VNet 集成是可选的,可以在群集创建期间或通过更新现有群集来启用它。
若要了解有关 AKS 自动的详细信息,请参阅什么是Azure Kubernetes 服务 (AKS)自动?
AKS 自动和 AKS 标准版中的 API 服务器 VNet 集成
API Server VNet 集成在 AKS 群集模式下都可用,但设置不同:
- AKS 自动:API 服务器 VNet 集成已预配置。
- AKS 标准:API 服务器 VNet 集成是可选的,必须显式启用。
对于大多数生产方案,从 AKS 自动开始,使用生产就绪的默认值并减少运营开销。
API 服务器连接
控制平面或 API 服务器位于 AKS 管理的Azure订阅中。 群集或节点池位于Azure订阅中。 构成群集节点的服务器和虚拟机可以通过投影到委托子网的 API 服务器 VIP 和 Pod IP 相互通信。
公共或专用群集支持 API 服务器 VNet 集成。 可以在预配群集后添加或删除公共访问权限。 与非 VNet 集成群集不同,代理节点始终与 API 服务器内部负载均衡器 (ILB) IP 的专用 IP 地址直接通信,而无需使用 DNS。 所有从节点到 API 服务器的流量都保留在专用网络上,进行从 API 服务器到节点的连接无需隧道。 如果启用了公用网络访问,需要与 API 服务器通信的群集外客户端可以正常通信。 如果禁用了公用网络访问,则你应遵循与标准专用群集相同的专用 DNS 设置方法。
Prerequisites
- 必须安装 Azure CLI 2.73.0 或更高版本。 可以使用
az --version命令查看版本。 - 如果自带虚拟网络,请查看 虚拟网络先决条件。
局限性
以下限制适用于 API 服务器 VNet 集成,无论是在 AKS 自动模式中预配置,还是在 AKS 标准模式中显式启用:
- API Server VNet 集成不支持虚拟网络加密。 在 v3 或更早版本的 AKS 节点 SKU (不支持 VNet 加密)上部署的群集是允许的,但流量不会加密。 在 v4 或更高版本 AKS 节点 SKU (支持 VNet 加密)上部署的群集会被阻止,因为加密的 VNet 与 API Server VNet 集成不兼容。 有关详细信息,请参阅 AKS 支持的 VM SKU。
- 若要使用双堆栈网络,群集需要 Kubernetes 版本 1.26.3 或更高版本,网络插件
azure和网络插件模式overlay。 有关详细信息,请参阅具有双堆栈网络的 Azure CNI 群集。
可用性
- 除卡塔尔中心外,所有 GA 公有云区域都提供 API 服务器 VNet 集成。
使用 API Server VNet 集成创建群集
AKS 自动(建议作为生产环境的默认选项)
在 AKS Automatic 中,API 服务器与 VNet 的集成已预先配置。 不需要显式 --enable-apiserver-vnet-integration 标志。
按照快速入门中的说明创建 AKS 自动化群集:
AKS 标准版:托管虚拟网络
可以使用托管 VNet 模式下的 API 服务器 VNet 集成将 AKS 标准群集配置为公共群集或专用群集。
注意
API 服务器 VNet 集成在卡塔尔中部区域不可用。
创建资源组
使用 az group create 命令创建资源组。
az group create --location <location> --name <resource-group>
部署公共群集
使用带有 --enable-apiserver-vnet-integration 标志的 az aks create 命令,为托管 VNet 部署具有 API Server VNet 集成的公共 AKS Standard 群集。
az aks create --name <cluster-name> \
--resource-group <resource-group> \
--location <location> \
--network-plugin azure \
--enable-apiserver-vnet-integration \
--generate-ssh-keys
部署专用群集
使用带有 --enable-apiserver-vnet-integration 和 --enable-private-cluster 标志的 az aks create 命令,为托管 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
AKS 标准版:自带虚拟网络
使用自带 VNet 时,必须创建 API 服务器子网并将其委托给 Microsoft.ContainerService/managedClusters。 此委派向 AKS 服务授予权限,以将 API 服务器 Pod 和内部负载均衡器部署到该子网中。 无法将该子网用于任何其他工作负载,但可将其用于同一虚拟网络中的多个 AKS 群集。 支持的 API 服务器子网大小最低为 /28。
群集标识需要拥有对 API 服务器子网和节点子网的权限。 缺少对 API 服务器子网的权限可能导致预配失败。
警告
AKS 群集在子网地址空间中至少保留 9 个 IP。 IP 地址不足可能会阻止 API 服务器缩放并导致 API 服务器中断。
注意
API 服务器 VNet 集成在 qatarcentral 区域中不可用。
创建资源组
使用 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-apiserver-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-apiserver-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 Server VNet 集成
警告
API Server VNet 集成是一种单向的容量敏感功能。 在现有 AKS 标准群集上启用 API Server VNet 集成时,以下限制适用:
-
需要手动重启:启用
az aks update --enable-apiserver-vnet-integrationAPI 服务器 VNet 集成后,由于控制平面资源转换,必须立即重启群集,使更改生效。 此重启不是自动化的。 延迟重启会增加容量变得不可用的风险,这可以防止 API 服务器启动。 群集重启还可确保所有节点可靠地重新连接到新的 API 服务器终结点。 - 对容量进行验证,但未保留:在现有群集上启用该功能时,AKS 会验证区域容量,但此验证不会保留容量。 如果延迟重启,并且容量在此期间变得不可用,群集可能无法在停止或重启后启动。 在正式版(GA)之前启用此功能或自启用以来尚未重启的群集不会进行容量验证。
- 无法禁用功能:启用后,该功能是永久性的。 不能禁用 API Server VNet 集成。
此升级在所有节点池上执行节点映像版本升级,并在所有工作负载进行滚动映像升级期间重启工作负载。
警告
将群集转换为 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>使用 [
az aks stop][az-aks-stop] 和 [az aks start][az-aks-start] 命令重启群集。az aks stop --name <cluster-name> --resource-group <resource-group> az aks start --name <cluster-name> --resource-group <resource-group>
在具有 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 \
--enable-apiserver-vnet-integration \
--apiserver-subnet-id <apiserver-subnet-resource-id>
禁用专用群集模式
使用带有 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 服务器 VNet 集成在 qatarcentral 中不可用。
创建 API Server VNet 集成专用群集
使用az aks create命令并带有--enable-apiserver-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
有关如何使用 API Server VNet 集成设置专用链接的更多指南,请参阅专用链接 API Server VNet 集成。
网络安全组 (NSG) 安全规则
默认情况下,允许 VNet 中的所有流量。 但是,如果添加了 NSG 规则来限制不同子网之间的流量,请确保 NSG 安全规则允许以下类型的通信:
| 目标 | 来源 | 协议 | 端口 | 用途 |
|---|---|---|---|---|
| APIServer 子网 CIDR | 群集子网 | TCP | 443 和 4443 | 如需启用节点与 API 服务器之间的通信,则必须支持。 |
| APIServer 子网 CIDR | Azure 负载均衡器 | TCP | 9988 | 启用Azure 负载均衡器与 API 服务器之间的通信所必需的。 还可以启用Azure 负载均衡器与 API 服务器子网 CIDR 之间的所有通信。 |
相关内容
- 创建 AKS 自动群集
- 如需相关的最佳做法,请参阅 AKS 中的网络连接和安全性的最佳做法。
- 关于如何通过 API Server VNet 集成来设置专用链接的指导,请参阅专用链接 with API Server VNet Integration。