确定插件选项
网络插件是 AKS 群集的必需插件,用于实现 Pod 到 Pod 通信、Pod 到节点通信,并在某些情况下用于实现节点到 pod 通信。 AKS 提供了两个网络模型:即 kubenet 和 Azure CNI。 Azure CNI 还有其他的演进,包括 Azure CNI Overlay、用于动态 IP 分配的 Azure CNI 和由 Cilium 提供支持的 Azure CNI。 其中每个模型都有自己的一组功能和限制。
kubenet
默认情况下,AKS 群集使用 kubenet。 使用 kubenet,在部署群集时会自动创建 Azure 虚拟网络、子网和路由表,但可以提供现有网络资源。 使用 kubenet:
- 节点从 Azure 虚拟网络子网接收 IP 地址。
- Pod 从逻辑上与节点池子网不同的地址空间接收 IP 地址。
- 然后系统会配置网络地址转换 (NAT),以便 Pod 可以访问 Azure 虚拟网络上的资源。
- 流量的源 IP 地址会转换为节点的主 IP 地址。
Pod 无法直接跨节点相互通信。 用户定义的路由 (UDR) 和 IP 转发用于不同节点中 Pod 之间的连接。 默认情况下,UDR 和 IP 转发配置由 AKS 服务进行创建和维护,但你可以选择自带路由表以进行自定义路由管理。
如果自定义子网不包含路由表,AKS 会为你创建一个路由表,并在整个群集生命周期中向其添加规则。 如果在创建群集时自定义子网包含路由表,AKS 将在群集操作期间确认现有路由表,并相应地为云提供程序操作添加/更新规则。
Azure CNI
Azure CNI 插件是一个更复杂的网络选项,具有更高的可配置性和更多受支持的功能。 使用 Azure CNI,需要预先存在的子网和虚拟网络,才能利用与 Azure CNI 网络一起使用的群集,这需要进行额外的规划。 虚拟网络及其子网的大小必须适应计划运行的 Pod 数以及群集的节点数。 使用 Azure CNI:
- 节点从 Azure 虚拟网络子网接收 IP 地址空间。
- 每个 Pod 将接收节点池子网中的 IP 地址,并且可以直接与其他 Pod 和服务通信。
- 群集的最大大小可为指定的 IP 地址范围上限。 但是,必须提前规划 IP 地址范围,AKS 节点根据它们支持的最大 Pod 数消耗所有 IP 地址。
使用 Azure CNI,需要预先存在的子网和虚拟网络,才能利用 Azure CNI 网络插件。 可以在创建 AKS 群集时创建此子网和虚拟网络。
Azure CNI 覆盖
Azure CNI 覆盖表示 Azure CNI 的演变,解决了向 Pod 分配虚拟网络 IP 时出现的可伸缩性和规划难题。 Azure CNI 覆盖为 Pod 分配私有 CIDR IP。 专用 IP 与虚拟网络分离,可以在多个群集中重复使用。 Azure CNI 覆盖可以扩展到超出 Kubenet 群集中强制实施的 400 节点限制。 对于大多数群集,建议使用 Azure CNI 覆盖。
由 Cilium 提供支持的 Azure CNI
由 Cilium 提供支持的 Azure CNI 使用 Cilium 来提供高性能网络、可观测性和网络策略强制实施。 它以本机方式与 Azure CNI 覆盖集成,以便进行可缩放的 IP 地址管理 (IPAM)。
此外,Cilium 在默认情况下会强制实施网络策略,而无需单独的网络策略引擎。 透过使用 eBPF 程序和更高效的 API 对象结构,由 Cilium 提供支持的 Azure CNI 可以扩展到超出 Azure 网络策略管理器的 250 个节点/20K Pod 的限制。
对于需要强制实施网络策略的群集,建议使用由 Cilium 提供支持的 Azure CNI。
使用自定义插件
对于计划使用自定义网络配置的客户,不存在网络插件要求。 可以从 CNI 提供商(如 Cilium 或 Flannel)中进行选择。 但最好求助于自己的文档,因为 Microsoft 并未将其涵盖在内。