你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Kubernetes 使用容器网络接口 (CNI) 插件来管理 Kubernetes 群集中的网络。 CNIS 负责将 IP 地址分配给 Pod、Pod 之间的网络路由、Kubernetes 服务路由等。
Azure Kubernetes 服务(AKS)使用两种主要网络模型: 覆盖 网络和 平面 网络。
覆盖网络:
- 使用 Pod 的逻辑分隔 CIDR 范围来节省 VNet IP 地址空间。
- 最大群集规模支持。
- 简单的 IP 地址管理。
平面网络:
- Pod 获得完整的 VNet 连接,可以直接通过连接的网络的专用 IP 地址进行访问。
- 需要大型非碎片化 VNet IP 地址空间。
选择网络模型时,请考虑每个 CNI 插件的用例及其使用的网络模型类型:
| CNI 插件 | 网络模型 | 用例要点 |
|---|---|---|
| Azure CNI 覆盖 | 覆盖 | - 最适合 VNET IP 保护 - API 服务器支持的最大节点数 + 每个节点 250 个 Pod - 更简单的配置 - 无直接外部 Pod IP 访问 |
| Azure CNI Pod 子网 | 平坦 | - 可直接从外部访问 Pod - 有效 VNet IP 使用率 或 大型群集规模支持的模式 |
| Azure CNI 节点子网 | 平坦 | - 可直接从外部访问 Pod - 更简单的配置 - 扩展性受限 - VNet IP 使用效率低下 |
将用于容器的应用程序网关预配到启用了 CNI 覆盖或 CNI 的群集时,适用于容器的应用程序网关会自动检测预期的网络配置。 网关或入口 API 配置无需更改即可指定 CNI overlay 或 CNI。
用于容器的 CNI 覆盖和应用程序网关
在 Azure 网络堆栈中为 Pod 的专用 CIDR 空间创建单独的路由域,这将创建一个覆盖网络,用于 Pod 之间的直接通信。 预配用于容器的应用程序网关时,覆盖路由域会进一步扩展到用于容器的应用程序网关子网,从而允许将应用程序网关的请求直接代理到 Pod。
用于容器的应用程序网关支持在群集中运行的 Azure 网络策略、Calico 和 Cilium Kubernetes 网络策略。
局限性
- ALB 控制器:必须运行版本 1.7.9 或更高版本才能利用 CNI 覆盖。
- 子网大小:容器子网的应用程序网关必须是 /24 前缀;每个子网仅支持一个部署。 不支持较大的或较小的前缀。
- 区域 VNet 对等互连:不支持区域 A 中部署在虚拟网络中的容器的应用程序网关和区域 A 中虚拟网络中的 AKS 群集节点。
- 全局 VNet 对等互连:不支持在区域 A 的虚拟网络中部署的容器的应用程序网关和区域 B 中虚拟网络中的 AKS 群集节点。
用于容器的 CNI 和应用程序网关
用于容器的应用程序网关支持在 Kubernetes 群集中运行的 Azure CNI 的各种部署。
- 用于动态 IP 分配的 Azure CNI
- 用于静态块分配的 Azure CNI
在这两种情况下,用于容器的应用程序网关都支持在群集中运行的 Azure 网络策略、Calico 和 Cilium Kubernetes 网络策略。
用于容器的 Kubenet 和应用程序网关
适用于容器的应用程序网关不支持 Kubenet。 如果使用 Kubenet,建议 升级到 CNI 覆盖层。
FAQ
问:是否可以将包含用于容器的应用程序网关的现有群集从 CNI 覆盖升级到 CNI 覆盖?
答:是的,将 AKS 群集从 CNI 升级到 CNI 覆盖层和用于容器的应用程序网关会自动检测更改。 建议在维护时段内计划升级,因为可能发生流量中断。 控制器可能需要几分钟的群集后升级来检测和配置对 CNI 覆盖的支持。
警告
在升级之前,请确保容器子网的应用程序网关为 /24。 从 CNI 升级到具有较大子网的 CNI 覆盖层(/23 或更大)将导致中断,并要求使用 /24 子网大小重新创建容器子网的应用程序网关。
问:是否可以将具有 Kubenet 的现有群集升级到 CNI 覆盖?
答:不支持在具有 Kubenet 的群集上安装用于容器的应用程序网关。 在升级到 CNI 覆盖后安装用于容器的应用程序网关。