Kubernetes 使用容器网络接口 (CNI) 插件来管理 Kubernetes 群集中的网络。 CNI 插件处理向 Pod 分配 IP 地址、在 Pod 之间路由网络流量、路由 Kubernetes 服务流量等。
Azure Kubernetes 服务 (AKS)提供可在群集中使用的多个 CNI 网络配置,具体取决于网络要求。 规划 Pod 网络时,可以选择 IP 地址管理(IPAM)选项和网络数据平面的路由和传输技术。
AKS 中的网络模型
为 AKS 群集选择 IPAM 选项在很大程度上取决于哪种网络模型最适合你的需求。 每个模型都有自己的优点和缺点,在规划 AKS 群集时应考虑这些优点和缺点。
AKS 使用两个主要网络模型:
覆盖网络:
- 通过为 Pod 使用逻辑上相互独立的无类别域间路由(CIDR)范围,为虚拟网络(VNet)节省 IP 地址空间。
- 提供最大群集规模支持。
- 提供对 IP 地址的简单管理。
平面网络:
- 为 Pod 提供完整的 VNet 连接。 可以通过连接网络中的 Pod 专用 IP 地址直接访问它们。
- VNet 需要大且连续的 IP 地址空间。
这两种网络模型都支持多个 IPAM 选项。 模型之间的主要区别在于如何分配 Pod IP 地址以及流量如何离开群集。
对于 Azure CNI,IPAM 选项独立于网络数据平面。 可以将由 Cilium 提供支持的 Azure CNI 数据平面与 Azure CNI 覆盖网络、Azure CNI Pod 子网或 Azure CNI 节点子网配合使用。 有关 IPAM 和数据平面选项的详细信息,请参阅 为 AKS 规划 Pod 网络。
覆盖网络
AKS 中的叠加网络会从单独的 Pod CIDR 分配 Pod IP 地址,该 CIDR 与 VNet 中的节点子网不同。 此配置允许比平面网络模型更简单且通常更好的可伸缩性。
在覆盖网络中,Pod 可以直接相互通信。 离开集群的流量会进行源网络地址转换 (SNAT),转换到节点的 IP 地址。 入站 Pod IP 流量通过服务(例如负载均衡器)进行路由。 然后,Pod IP 地址被“隐藏”在节点的 IP 地址之后。 此方法可减少群集中虚拟网络所需的 IP 地址数。
对于覆盖网络功能,AKS 提供 Azure CNI Overlay。 对于大多数方案,请使用此 IPAM 选项。
平面网络
与覆盖网络不同,AKS 中的平面网络模型会从与 AKS 节点位于同一 Azure 虚拟网络中的子网内为 Pod 分配 IP 地址。 对于专用网络流量,目标看到的源 IP 地址取决于 IPAM 选项。 Azure CNI Pod 子网会跨连接的虚拟网络保留 Pod IP 地址。 使用 Azure CNI 节点子网时,群集虚拟网络中的目标将看到 Pod IP 地址,但群集虚拟网络外部的目标将看到节点 IP 地址。 启用 Internet 出口后,群集 配置的出站方法 将确定 Internet 目标看到的公用源 IP 地址。
AKS 为平面网络提供了两个Azure CNI IPAM 选项:
- Azure CNI Pod Subnet 是平面网络场景中推荐的 IPAM 选项。
- Azure CNI 节点子网,这是适用于平面网络的旧 CNI 模型。 一般情况下,建议仅在需要群集的托管虚拟网络时使用它。
为 AKS 选择 IPAM 选项
选择 IPAM 选项时,请考虑多种因素。 每个网络模型都有自己的优点和缺点。 你群集的最佳选择取决于你的特定要求。
用例比较
| IPAM 选项 | 网络模型 | 用例要点 |
|---|---|---|
| Azure CNI 覆盖 | 覆盖 | • 最适合为虚拟网络保存 IP • API 服务器支持的最大节点数,再加上每个节点 250 个 Pod • 更简单的配置 • 无法从外部直接访问 Pod IP |
| Azure CNI Pod 子网 | 平坦 | • 直接外部 Pod 访问 • 用于虚拟网络或大规模群集支持的高效 IP 使用模式(预览版) |
| Kubenet (旧版) | 覆盖 | • 2028 年 3 月 31 日停用;在停用日期之前迁移到 Azure CNI 覆盖层 • IP 保护的优先顺序 • 规模有限 • 手动路由管理 |
| Azure CNI 节点子网(旧版) | 平坦 | • 直接外部 Pod 访问 • 更简单的配置 • 规模有限 • 虚拟网络 IP 的使用效率低下 |
功能对比
| 功能 / 特点 | Azure CNI 覆盖 | Azure CNI Pod 子网 | Azure CNI 节点子网(旧版) | Kubenet (旧版) |
|---|---|---|---|---|
| 在现有或新虚拟网络中部署群集 | 已支持 | 已支持 | 已支持 | 支持手动用户定义的路由(UDR) |
| Pod 与虚拟机 (VM) 之间的连接,其中 VM 位于同一虚拟网络或对等虚拟网络中。 | Pod 已启动 | 这两种方式 | 这两种方式 | Pod 已启动 |
| 通过虚拟专用网络(VPN)和 Azure ExpressRoute 进行本地访问 | Pod 已启动 | 这两种方式 | 这两种方式 | Pod 已启动 |
| 访问服务终结点 | 已支持 | 已支持 | 已支持 | 已支持 |
| 通过负载均衡器公开服务 | 已支持 | 已支持 | 已支持 | 已支持 |
| 通过 Azure 应用程序网关入口控制器公开服务 | 已支持 | 已支持 | 已支持 | 已支持 |
| 通过用于容器的应用程序网关公开服务 | 已支持 | 已支持 | 已支持 | 不支持 |
| Windows 节点池 | 已支持 | 已支持 | 已支持 | 不支持 |
| 默认 Azure DNS 和专用区域 | 已支持 | 已支持 | 已支持 | 已支持 |
| 跨多个群集共享虚拟网络子网 | 已支持 | 已支持 | 已支持 | 不支持 |
网络模型之间的支持范围
根据使用的 IPAM 选项,可以通过以下方式之一为群集部署虚拟网络资源:
- 创建 AKS 群集时,Azure 平台可以自动创建和配置虚拟网络资源。
- 创建 AKS 群集时,可以手动创建和配置虚拟网络资源并附加到这些资源。
尽管支持服务终结点或 UDR 等功能, 但 AKS 的支持策略 定义了可以做出哪些更改。 例如:
- 如果您手动为 AKS 群集创建虚拟网络资源,在配置自己的用户定义路由 (UDR) 或服务终结点时,将获得支持。
- 如果 Azure 平台自动为 AKS 群集创建虚拟网络资源,则无法手动更改这些 AKS 托管的资源来配置自己的 UDR 或服务终结点。
AKS CNI 网络先决条件
规划 AKS 的网络配置时,请记住以下要求和注意事项:
AKS 地址范围具有以下限制:
保留 CIDR 范围 适用对象 条件 169.254.0.0/16Kubernetes 服务、Pod 和群集虚拟网络地址范围 所有 AKS 群集 192.0.2.0/24Kubernetes 服务、Pod 和群集虚拟网络地址范围 所有 AKS 群集 172.30.0.0/16Kubernetes 服务、Pod 和群集虚拟网络地址范围 所有 AKS 群集 172.31.0.0/16Kubernetes 服务、Pod 和群集虚拟网络地址范围 所有 AKS 群集 AKS 拒绝群集创建或更新期间与保留范围重叠的 Pod CIDR。 例如,
172.16.0.0/12由于范围包括172.30.0.0/16和172.31.0.0/16.,因此无效。在自带虚拟网络的情况下,AKS 群集使用的群集标识必须至少对虚拟网络中的子网具有 网络参与者 权限。
如果定义 自定义角色 而不是使用内置网络参与者角色,请包含以下权限:
许可 需要时 Microsoft.Network/virtualNetworks/subnets/join/action在使用自定义角色时始终 Microsoft.Authorization/roleAssignments/write始终在使用自定义角色时 Microsoft.Network/virtualNetworks/subnets/read仅在定义您自己的子网和 CIDR 时 分配给 AKS 节点池的子网不能是委托子网。
AKS 不会将网络安全组 (NSG) 应用于其子网,也不会修改与该子网相关的任何 NSG。 如果提供自己的子网并添加与该子网关联的 NSG,则必须确保 NSG 中的安全规则允许节点 CIDR 范围内的流量。 使用 Azure CNI Overlay 时,如果某条 NSG 拒绝规则影响到 Pod CIDR 流量,则还必须允许从节点 CIDR 到 Pod CIDR 以及从 Pod CIDR 到 Pod CIDR 的所有端口和协议的流量。 有关详细信息,请参阅使用 Azure CNI Overlay 的网络安全组。
容器网络服务(CNS)是 Azure Kubernetes 服务 CNI 网络中的节点本地服务,用于为 Pod 分配、跟踪和编程网络。 默认情况下,此组件会将遥测数据(指标和日志)发送到集群外部,由 Microsoft 托管的 Application Insights 终结点,以便更快速地排查任何 Pod 网络 IP 地址分配问题。