本文介绍 Azure CNI 覆盖 AKS 群集的设置过程、双堆栈网络配置和示例工作负荷部署。 有关 Azure CNI 覆盖网络的概述,请参阅 Azure Kubernetes 服务(AKS)中的 Azure 容器网络接口(CNI)覆盖网络概述。
重要
自 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 节点池。
先决条件
- 一份 Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户。
- Azure CLI 2.48.0 或更高版本。 若要安装或升级 Azure CLI,请参阅 安装 Azure CLI。
- 现有的 Azure 资源组。 如果需要创建一个资源组,请参阅 “创建 Azure 资源组”。
对于双堆栈网络,需要 Kubernetes 1.26.3 或更高版本。
Azure CNI Overlay AKS 集群的关键参数
下表介绍了在 AKS 群集中配置 Azure CNI 覆盖网络的关键参数:
| 参数 | Description |
|---|---|
--network-plugin |
将azure设为使用 Azure CNI 网络。 |
--network-plugin-mode |
将overlay设置为以启用 Azure CNI 覆盖网络。 此设置仅在--network-plugin=azure时适用。 |
--pod-cidr |
为群集指定自定义 Pod CIDR 块。 默认值为 10.244.0.0/16。 |
默认网络插件行为取决于是否显式设置 --network-plugin:
- 如果未指定
--network-plugin,AKS 默认使用 Azure CNI Overlay。 - 如果指定
--network-plugin=azure并省略--network-plugin-mode,AKS 会有意使用虚拟网络(节点子网)模式实现向后兼容性。
创建 Azure CNI 覆盖网络 AKS 群集
使用
az aks create命令和--network-plugin=azure--network-plugin-mode=overlay命令创建 Azure CNI 覆盖 AKS 群集。 如果未指定值--pod-cidr,AKS 将分配默认值10.244.0.0/16。az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --location $REGION \ --network-plugin azure \ --network-plugin-mode overlay \ --pod-cidr 192.168.0.0/16 \ --generate-ssh-keys
将新节点池添加到专用子网
将节点池添加到同一虚拟网络的不同子网中,以控制 VM 节点的 IP 地址,从而管理发往虚拟网络或对等虚拟网络资源的网络流量。
使用
az aks nodepool add命令向群集添加新节点池,并使用参数指定子网资源 ID--vnet-subnet-id。 例如:az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --name $NODE_POOL_NAME \ --node-count 1 \ --mode system \ --vnet-subnet-id $SUBNET_RESOURCE_ID
关于具有双堆栈网络的 Azure CNI 覆盖 AKS 群集
可以使用 Azure 虚拟网络在双堆栈模式下部署 Azure CNI 覆盖 AKS 群集。 在此配置中,节点从 Azure 虚拟网络子网接收 IPv4 和 IPv6 地址。 Pod 从与节点的 Azure 虚拟网络子网不同的地址空间接收 IPv4 和 IPv6 地址。 然后配置网络地址转换(NAT),以便 Pod 可以访问 Azure 虚拟网络上的资源。 流量的源 IP 地址通过 NAT 转换为同系列节点的主 IP 地址(IPv4 转换为 IPv4 和 IPv6 转换为 IPv6)。
注释
还可以使用由 Cilium 提供支持的 Azure CNI 部署双堆栈网络群集。 有关详细信息,请参阅 由 Cilium 双堆栈网络提供支持的 Azure CNI。
双堆栈网络限制
双堆栈网络不支持以下功能:
双堆栈网络的关键参数
下表介绍了在 Azure CNI 覆盖 AKS 群集中配置双堆栈网络的关键参数:
| 参数 | Description |
|---|---|
--ip-families |
获取以逗号分隔的 IP 系列列表,以便在群集上启用。 仅支持 ipv4 或 ipv4,ipv6。 |
--pod-cidrs |
采用以逗号分隔的 CIDR 表示法 IP 范围列表,从中分配 Pod IP。 此列表中范围的计数和顺序必须与提供给 --ip-families 的值匹配。 如果未提供任何值,则使用默认值 10.244.0.0/16,fd12:3456:789a::/64 。 |
--service-cidrs |
采用以逗号分隔的 CIDR 表示法 IP 范围列表,以便从中分配服务 IP。 此列表中范围的计数和顺序必须与提供给 --ip-families 的值匹配。 如果未提供任何值,则使用默认值 10.0.0.0/16,fd12:3456:789a:1::/108 。 分配给 --service-cidrs 的 IPv6 子网不能大于 /108。 |
使用双堆栈网络创建 Azure CNI 覆盖 AKS 群集(Linux)
使用
az group create命令为群集创建 Azure 资源组。az group create --location $REGION --name $RESOURCE_GROUP使用
az aks create参数设置为--ip-families的ipv4,ipv6命令创建双堆栈 AKS 群集。az aks create \ --location $REGION \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --network-plugin azure \ --network-plugin-mode overlay \ --ip-families ipv4,ipv6 \ --generate-ssh-keys
使用双堆栈网络创建 Azure CNI 覆盖 AKS 群集(Windows)
重要
AKS 预览功能可在自助服务和自愿选择的基础上启用。 预览版按“现状”和“视供应情况”提供,它们不包括在服务级别协议和有限保证范围内。 AKS 预览功能是由客户支持尽最大努力部分覆盖。 因此,这些功能并不适合用于生产。 有关详细信息,请参阅以下支持文章:
在创建启用双栈网络和 Windows 节点池的 Azure CNI Overlay AKS 群集之前,需要安装 aks-preview Azure CLI 扩展并在订阅中注册 AzureOverlayDualStackPreview 功能标记。
安装 aks-preview Azure CLI 扩展
使用
aks-preview命令安装az extension add扩展。az extension add --name aks-preview使用
az extension update命令更新到已发布的最新扩展版本。az extension update --name aks-preview
注册 AzureOverlayDualStackPreview 功能标志
使用
AzureOverlayDualStackPreview命令注册az feature register功能标志。az feature register --namespace "Microsoft.ContainerService" --name "AzureOverlayDualStackPreview"几分钟后,状态将显示为“已注册”。
使用
az feature show命令验证注册状态:az feature show --namespace "Microsoft.ContainerService" --name "AzureOverlayDualStackPreview"当状态反映为已注册时,使用 命令刷新
az provider register资源提供程序的注册。az provider register --namespace Microsoft.ContainerService
创建双堆栈 Azure CNI 覆盖 AKS 群集并添加 Windows 节点池
通过
az aks create命令使用 Azure CNI 覆盖创建群集。az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --location $REGION \ --network-plugin azure \ --network-plugin-mode overlay \ --ip-families ipv4,ipv6 \ --generate-ssh-keys使用
az aks nodepool add命令将 Windows 节点池添加到群集。az aks nodepool add \ --resource-group $RESOURCE_GROUP \ --cluster-name $CLUSTER_NAME \ --os-type Windows \ --name $WINDOWS_NODE_POOL_NAME \ --node-count 2
将示例工作负荷部署到 Azure CNI 覆盖 AKS 群集
在 VM 节点上部署具有 IPv4/IPv6 地址的双堆栈 AKS CNI 覆盖群集。 此示例中,通过服务 LoadBalancer 部署 NGINX web服务器,并用 IPv4 和 IPv6 地址公开。
注释
我们建议在 AKS 群集中的入口使用应用路由附加组件。 但是,出于演示目的,此示例在没有应用程序路由加载项的情况下部署 NGINX Web 服务器。 有关加载项的更多信息,请参阅 带有应用程序路由加载项的托管 NGINX 入口。
使用 LoadBalancer 服务公开工作负荷
使用 kubectl 命令或 YAML 清单公开 NGINX 部署。
重要
AKS 中的 IPv6 服务目前有 两个限制 :
- Azure 负载均衡器将运行状况探测从链接本地地址发送到 IPv6 目标。 在 Azure Linux 节点池中,无法将此流量路由到 pod,因此流量无法到达通过
externalTrafficPolicy: Cluster部署的 IPv6 服务。 - 必须使用
externalTrafficPolicy: Local部署 IPv6 服务,这会导致kube-proxy对节点上的探测做出响应。
使用
kubectl expose deployment nginx命令公开 NGINX 部署。kubectl expose deployment nginx --name=nginx-ipv4 --port=80 --type=LoadBalancer' kubectl expose deployment nginx --name=nginx-ipv6 --port=80 --type=LoadBalancer --overrides='{"spec":{"ipFamilies": ["IPv6"]}}'输出应显示暴露的服务。 例如:
service/nginx-ipv4 exposed service/nginx-ipv6 exposed公开部署并完全预配
LoadBalancer服务后,使用kubectl get services命令获取服务的 IP 地址。kubectl get services输出应显示服务及其分配的 IP 地址。 例如:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-ipv4 LoadBalancer 10.0.88.78 20.46.24.24 80:30652/TCP 97s nginx-ipv6 LoadBalancer fd12:3456:789a:1::981a 2603:1030:8:5::2d 80:32002/TCP 63s使用
kubectl get services命令获取服务 IP,并将其设置为环境变量。SERVICE_IP=$(kubectl get services nginx-ipv6 -o jsonpath='{.status.loadBalancer.ingress[0].ip}')使用支持 IPv6 的主机发出的
curl请求来验证功能。curl -s "http://[${SERVICE_IP}]" | head -n5输出应显示 NGINX 欢迎页 HTML。 例如:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style>
相关内容
若要详细了解 AKS 上的 Azure CNI 覆盖网络,请参阅以下文章: