Kubenet 不适用于 Windows Server 容器。 若要使用 Windows Server 节点池,需要使用 Azure CNI。
Azure CNI 节点子网
借助
Azure 容器网络接口 (CNI)
,每个 Pod 都可以从子网获得 IP 地址,并且可供直接访问。 与 AKS 群集处于同一虚拟网络中的系统将 Pod IP 视为来自 Pod 的任何流量的源地址。 AKS 群集虚拟网络外部的系统将节点 IP 视为来自 Pod 的任何流量的源地址。 这些 IP 地址在网络空间中必须唯一,并且必须事先计划。 每个节点都有一个配置参数来表示它支持的最大 Pod 数。 这样,就会为每个节点预留相应的 IP 地址数。 使用此方法需要经过更详细的规划,并且经常会耗尽 IP 地址,或者在应用程序需求增长时需要在更大的子网中重建群集。
使用 Azure CNI 节点子网时,每个 Pod 将接收 IP 子网中的 IP 地址,并且可以直接与其他 Pod 和服务通信。 群集的最大大小可为指定的 IP 地址范围上限。 但是,必须提前规划 IP 地址范围,AKS 节点根据它们支持的最大 Pod 数消耗所有 IP 地址。 Azure CNI 支持
虚拟节点
或网络策略(Azure 或 Calico)等高级网络功能和方案。
Kubernetes DNS 服务 IP 地址:群集 DNS 服务的 IP 地址。 此地址必须在 Kubernetes 服务地址范围内。 请勿使用地址范围内的第一个 IP 地址。 子网范围内的第一个地址用于 kubernetes.default.svc.cluster.local 地址。
Kubenet
默认情况下,AKS 群集使用 kubenet,并为你创建 Azure 虚拟网络和子网。 节点使用 kubenet 从 Azure 虚拟网络子网获取 IP 地址。 Pod 接收从逻辑上不同的地址空间到节点的 Azure 虚拟网络子网的 IP 地址。 然后配置网络地址转换 (NAT),以便 Pod 可以访问 Azure 虚拟网络上的资源。 流量的源 IP 地址通过 NAT 转换为节点的主 IP 地址。 这种方法大大减少了需要在网络空间中保留供 Pod 使用的 IP 地址数量。
可以在创建群集时或新建节点池时,配置可部署到节点的最大 Pod 数。 如果在创建新节点池时未指定
maxPods
,则会收到 kubenet 的默认值 110。
使用自有子网的 kubenet 网络概述
在许多环境中,你已定义分配了 IP 地址范围的虚拟网络和子网,并且你会使用这些资源来支持多个服务和应用程序。 若要提供网络连接,AKS 群集可以使用
kubenet
(基本网络)或 Azure CNI(高级网络)。
使用
kubenet
时,只有节点接收虚拟网络子网中的 IP 地址。 Pod 无法直接相互通信。 用户定义的路由 (UDR) 和 IP 转发处理不同节点中 Pod 之间的连接。 默认情况下,UDR 和 IP 转发配置由 AKS 服务进行创建和维护,但如果需要,你可以自带路由表以进行自定义路由管理。 此外,可以在接收分配的 IP 地址的服务后面部署 Pod,并对应用程序的流量进行负载均衡。 下图显示了 AKS 节点(不是 Pod)如何接收虚拟网络子网中的 IP 地址:
群集中的某些系统 Pod(例如
konnectivity
)使用主机节点 IP 地址,而不使用覆盖地址空间中的 IP。 系统 Pod 仅使用节点 IP,而不使用虚拟网络中的 IP 地址。
IP 地址可用性和耗尽
Azure CNI 的一个常见问题是分配的 IP 地址范围太小,无法在扩展或升级群集时添加更多节点。 网络团队可能无法提供足够大的 IP 地址范围来支持预期的应用程序需求。 作为一种折衷方案,可以创建使用
kubenet
的 AKS 群集并连接到现有虚拟网络子网。 这种方法可让节点接收定义的 IP 地址,而无需提前为群集中可能运行的所有潜在 Pod 节点预留大量的 IP 地址。
使用 kubenet 时,可以大幅减小要使用的 IP 地址范围,并且可以支持大型群集和应用程序的需求。 例如,在子网上使用 /27 IP 地址范围时,可运行包括 20-25 个节点的群集,空间足以进行缩放或升级。 此群集大小最多支持 2,200-2,750 个 Pod(每个节点的最大 Pod 数默认为 110 个)。 可以在 AKS 中使用 kubenet 配置的每个节点的最大 Pod 数为 250。
以下基本计算方法对网络模型的差异做了比较:
kubenet:一个简单的 /24 IP 地址范围可以支持群集中最多 251 个节点。 每个 Azure 虚拟网络子网保留前三个 IP 地址用于管理操作。 此节点计数最多支持 27,610 个 Pod(每个节点的最大 Pod 数默认为 110 个)。
默认情况下,AKS 群集使用
kubenet
并创建虚拟网络和子网络。 使用
kubenet
,节点从虚拟网络子网获取 IP 地址。 然后会在节点上配置网络地址转换 (NAT),并且 Pod 将接收“隐藏”在节点 IP 背后的 IP 地址。 这种方法减少了需要在网络空间中保留供 Pod 使用的 IP 地址数量。
借助
Azure 容器网络接口 (CNI)
,每个 Pod 都可以从子网获得 IP 地址,并且可供直接访问。 与 AKS 群集处于同一虚拟网络中的系统将 Pod IP 视为来自 Pod 的任何流量的源地址。 AKS 群集虚拟网络外部的系统将节点 IP 视为来自 Pod 的任何流量的源地址。 这些 IP 地址在网络空间中必须唯一,并且必须事先计划。 每个节点都有一个配置参数来表示它支持的最大 Pod 数。 这样,就会为每个节点预留相应的 IP 地址数。 使用此方法需要经过更详细的规划,并且经常会耗尽 IP 地址,或者在应用程序需求增长时需要在更大的子网中重建群集。