IP 地址规划要求
适用于:Azure 本地版本 23H2
Azure Arc 启用的 AKS 的 IP 地址规划涉及设计支持应用程序、节点池、Pod 网络、服务通信和外部访问的网络。 本文将指导你完成有效 IP 地址规划的一些关键注意事项,以及在生产环境中部署 AKS 所需的最小 IP 地址数。 阅读本文之前, 请参阅 AKS 网络概念和要求 。
Kubernetes 群集和应用程序的简单 IP 地址规划
在以下方案演练中,为 Kubernetes 群集和服务保留单个网络的 IP 地址。 此示例是 IP 地址分配的最简单简单方案。
IP 地址要求 | 最小 IP 地址数 | 如何和在哪里进行此预留 |
---|---|---|
AKS Arc VM IP | 为 Kubernetes 群集中的每个工作器节点保留一个 IP 地址。 例如,如果要在每个节点池中创建包含 3 个节点的 3 个节点池,则需要 IP 池中的 9 个 IP 地址。 | 通过 Arc VM 逻辑网络中 IP 池保留 IP 地址。 |
AKS Arc K8s 版本升级 IP | 由于 AKS Arc 执行滚动升级,因此对于 Kubernetes 版本升级操作,请为每个 AKS Arc 群集保留一个 IP 地址。 | 通过 Arc VM 逻辑网络中 IP 池保留 IP 地址。 |
控制平面 IP | 为环境中的每个 Kubernetes 群集保留一个 IP 地址。 例如,如果要总共创建 5 个群集,请保留 5 个 IP 地址,为每个 Kubernetes 群集保留一个。 | 通过 Arc VM 逻辑网络中 IP 池保留 IP 地址。 |
负载均衡器 IP | 保留的 IP 地址数取决于应用程序部署模型。 首先,可以为每个 Kubernetes 服务保留一个 IP 地址。 | 保留与 Arc VM 逻辑网络位于同一子网中的 IP 地址,但在 IP 池外部。 |
Kubernetes 群集和应用程序的 IP 地址预留示例演练
Jane 是 IT 管理员,刚从 Azure Arc 启用的 AKS 开始。Jane 想要在 Azure 本地群集上部署两个 Kubernetes 群集:Kubernetes 群集 A 和 Kubernetes 群集 B。 Jane 还想要在群集 A 之上运行投票应用程序。此应用程序包含跨两个群集和一个后端数据库的一个实例运行的前端 UI 的三个实例。 所有 AKS 群集和服务都在具有单个子网的单个网络中运行。
- Kubernetes 群集 A 有 3 个控制平面节点和 5 个工作器节点。
- Kubernetes 群集 B 有 1 个控制平面节点和 3 个工作器节点。
- 前端 UI 的 3 个实例(端口 443)。
- 后端数据库的 1 个实例(端口 80)。
根据上表,Jane 必须在 Jane 子网中保留总共 19 个 IP 地址:
- 群集 A 中 AKS Arc 节点 VM 的 8 个 IP 地址(每个 K8s 节点 VM 一个 IP)。
- 群集 B 中 AKS Arc 节点 VM 的 4 个 IP 地址(每个 K8s 节点 VM 一个 IP)。
- 用于运行 AKS Arc 升级操作的 2 个 IP 地址(每个 AKS Arc 群集一个 IP 地址)。
- AKS Arc 控制平面的 2 个 IP 地址(每个 AKS Arc 群集一个 IP 地址)
- Kubernetes 服务的 3 个 IP 地址(每个前端 UI 实例有一个 IP 地址,因为它们都使用相同的端口。只要后端数据库使用不同的端口,后端数据库就可以使用这三个 IP 地址中的任何一个。
继续执行此示例,并将其添加到下表中,你将获得:
参数 | IP 地址数 | 如何和在哪里进行此预留 |
---|---|---|
AKS Arc VM、K8s 版本升级和控制平面 IP | 保留 16 个 IP 地址 | 通过 Azure 本地逻辑网络中 IP 池进行此预留。 |
负载均衡器 IP | 适用于 Kubernetes 服务的 3 个 IP 地址,用于 Jane 的投票应用程序。 | 在群集 A 上安装负载均衡器时,会使用这些 IP 地址。可以使用 MetalLB Arc 扩展,或自带第三方负载均衡器。 确保此 IP 与 Arc 逻辑网络位于同一子网中,但在 Arc VM 逻辑网络中定义的 IP 池外部。 |
Kubernetes 群集和应用程序的 IP 地址预留的示例 CLI 命令
本部分介绍 Jane 为方案运行的命令集。 首先,创建具有至少 16 个 IP 地址的 IP 池的逻辑网络。 我们创建了包含 20 个 IP 地址的 IP 池,以提供在 N 天缩放的选项。有关逻辑网络中参数选项的详细信息,请参阅 az stack-hci-vm network lnet create
:
$ipPoolStart = "10.220.32.18"
$ipPoolEnd = "10.220.32.37"
az stack-hci-vm network lnet create --subscription $subscription --resource-group $resource_group --custom-location $customLocationID --name $lnetName --vm-switch-name $vmSwitchName --ip-allocation-method "Static" --address-prefixes $addressPrefixes --gateway $gateway --dns-servers $dnsServers --ip-pool-start $ipPoolStart --ip-pool-end $ipPoolEnd
接下来,使用上一个逻辑网络创建 AKS Arc 群集:
az aksarc create -n $aksclustername -g $resource_group --custom-location $customlocationID --vnet-ids $lnetName --aad-admin-group-object-ids $aadgroupID --generate-ssh-keys
现在,可以在 Arc VM 逻辑网络所在的子网中,使用 IP 池 3 个 IP 地址启用 MetalLB 负载均衡器。 如果应用程序需要增加,可以稍后添加更多 IP 池。 有关详细要求,请参阅 MetalLB Arc 扩展概述。
az k8s-runtime load-balancer create --load-balancer-name $lbName --resource-uri subscriptions/$subscription/resourceGroups/$resource_group/providers/Microsoft.Kubernetes/connectedClusters/metallb-demo --addresses 10.220.32.47-10.220.32.49 --advertise-mode ARP
AKS 群集和 Arc VM 的 LNET 注意事项
Azure 本地上的逻辑网络由 AKS 群集和 Arc VM 使用。 可以通过以下 2 种方式之一配置逻辑网络:
- 在 AKS 和 Arc VM 之间共享逻辑网络。
- 为 AKS 群集和 Arc VM 定义单独的逻辑网络。
在 Azure 本地上的 AKS 和 Arc VM 之间共享逻辑网络可提供简化的通信、节省成本以及简化的网络管理的好处。 但是,此方法还引入了潜在的挑战,例如资源争用、安全风险和故障排除的复杂性。
条件 | 共享逻辑网络 | 定义单独的逻辑网络 |
---|---|---|
配置复杂性 | 使用单个网络进行更简单的配置,减少了设置复杂性。 | 更复杂的设置,因为需要为 VM 和 AKS 群集配置多个逻辑网络。 |
伸缩性 | Arc VM 和 AKS 群集共享网络资源时的潜在可伸缩性限制。 | 更具可缩放性,因为网络资源是分开的,可以独立缩放。 |
网络策略管理 | 更易于使用一组网络策略进行管理,但更难隔离工作负荷。 | 更容易隔离工作负荷,因为每个逻辑网络可以应用单独的策略。 |
安全注意事项 | 如果未正确分段,则增加跨通信漏洞的风险。 | 更好的安全性,因为每个网络可以更严格地分段和隔离。 |
网络故障的影响 | 共享网络中的故障可以同时影响 AKS 和 Arc VM。 | 一个网络中的故障仅影响该网络中的工作负荷,从而降低总体风险。 |
Pod CIDR 和服务 CIDR 的 IP 地址范围分配
本部分介绍 Kubernetes 用于群集中 Pod 和服务通信的 IP 地址范围。 这些 IP 地址范围是在 AKS 群集创建过程中定义的,用于向群集中的 Pod 和服务分配唯一 IP 地址。
Pod 网络 CIDR
Pod 网络 CIDR 是 Kubernetes 用来将唯一 IP 地址分配给 Kubernetes 群集中运行的各个 Pod 的一系列 IP 地址。 每个 Pod 在此范围内获取其自己的 IP 地址,允许 Pod 相互通信,并与群集内的服务通信。 在 AKS 中,Pod IP 地址是通过 VXLAN 模式下的 Calico CNI 分配的。 Calico VXLAN 可帮助创建 覆盖网络,其中 Pod(从 Pod 网络 CIDR)的 IP 地址通过物理网络进行虚拟化和隧道传输。 在此模式下,每个 Pod 都分配有 Pod 网络 CIDR 中的 IP 地址,但此 IP 地址不能直接在物理网络上路由。 而是封装在网络数据包中,并通过基础物理网络发送,以在另一个节点上访问其目标 Pod。
AKS 为 Pod 网络 CIDR 提供 默认值 10.244.0.0/16 。 AKS 支持 Pod 网络 CIDR 的自定义。 创建 AKS 群集时,可以使用参数设置自己的值 --pod-cidr
。 确保 CIDR IP 范围足够大,以适应每个节点和跨 Kubernetes 群集的最大 Pod 数。
服务网络 CIDR
服务网络 CIDR 是为群集中的 LoadBalancers、ClusterIP 和 NodePort 等 Kubernetes 服务保留的 IP 地址范围。 Kubernetes 支持以下服务类型:
- ClusterIP:默认服务类型,用于公开群集中的服务。 从服务网络 CIDR 分配的 IP 只能在 Kubernetes 群集中访问。
- NodePort:在每个节点的 IP 地址的特定端口上公开服务。 ClusterIP 仍在内部使用,但外部访问是通过节点 IP 和特定端口进行访问。
- LoadBalancer:此类型创建云提供程序管理的负载均衡器,并在外部公开服务。 云提供商通常管理外部 IP 分配,而内部 ClusterIP 保留在服务网络 CIDR 中。
AKS 为服务网络 CIDR 提供 默认值 10.96.0.0/12 。 AKS 目前不支持服务网络 CIDR 的自定义。