本文档举例说明如何为高可用性 (HA) 管理员集群和两个高可用性用户集群分配 IP 地址。
准备工作
如需了解管理员集群、用户集群和高可用性,请参阅选择部署模型。
IP 地址分配示例
本部分介绍如何在包含以下元素的安装中分配 IP 地址:
集群节点的 IP 地址
Pod 的 IP 地址
Service 的集群 IP 地址
控制平面和入站流量代理的虚拟 IP 地址 (VIP)
要用作 Service 的外部 IP 地址的 VIP 地址
管理员集群节点
下例中的管理员集群有 3 个节点。每个节点都运行控制层面组件。
用户集群节点
在此示例中,每个用户集群有 6 个节点:3 个控制平面节点和 3 个工作器节点。
负载平衡
在本示例中,假设集群使用绑定的 MetalLB 负载均衡器。负载均衡器在集群节点上运行,因此无需额外的机器即可实现负载均衡。
子网
对于此示例,假设每个集群位于自己的第 2 层网域,并且集群位于以下子网中:
集群 | 子网 | 默认网关 |
---|---|---|
管理员集群 | 172.16.20.0/24 | 172.16.20.1 |
用户集群 1 | 172.16.21.0/24 | 172.16.21.1 |
用户集群 2 | 172.16.22.0/24 | 172.16.22.1 |
下图演示了三个子网。请注意,VIP 未显示与集群中的任何特定节点相关联。这是因为 MetalLB 负载均衡器可以选择哪个节点公布单个 Service 的 VIP。例如,在用户集群 1 中,一个节点可以公布 172.16.21.52,另一个节点可以公布 172.16.21.53。
示例 IP 地址:管理员集群节点
管理员集群节点需要三个 IP 地址,这些 IP 地址全都运行控制平面组件。例如,您可以将以下 IP 地址用于管理员集群中的节点。此示例中的地址是连续的,但这不作要求:
管理员集群中的节点的 IP 地址 |
---|
172.16.20.2 - 172.16.20.4 |
示例 IP 地址:管理员集群的控制平面 VIP 地址
您需要为管理员集群的 Kubernetes API 服务器预留一个 VIP。在管理员配置文件中,这称为 controlPlaneVIP
。
例如,您可以预留以下 IP 地址以用作管理员集群的控制平面 VIP:
管理员集群的控制平面 VIP |
---|
172.16.20.50 |
示例 IP 地址:用户集群 1 节点
示例:您可以将以下 IP 地址用于用户集群 1 中的三个控制平面节点和三个工作器节点。此示例中的地址是连续的,但这不作要求:
用户集群 1 中的节点的 IP 地址 |
---|
172.16.21.2 - 172.16.21.7 |
示例 IP 地址:用户集群 1 的 VIP 地址
下表举例说明了如何为用户集群 1 指定要在负载均衡器上配置的 VIP 地址。 此示例中的 VIP 是连续的,但这不作要求:
VIP | 说明 | IP 地址 |
---|---|---|
用户集群 1 的控制平面 VIP。 | 在负载均衡器上为用户集群 1 配置 | 172.16.21.50 |
用户集群 1 的 Ingress VIP 地址 | 在负载均衡器上为用户集群 1 配置 | 172.16.21.51 |
用户集群 1 的 Service VIP 地址 | LoadBalancer 类型的 Service 的 10 个地址。根据需要在负载均衡器上为用户集群 1 配置。 请注意,此范围包含 Ingress VIP 地址。 这是 MetalLB 负载平衡器的要求。 |
172.16.21.51 - 172.16.21.60 |
示例 IP 地址:用户集群 2 节点
示例:您可以将以下 IP 地址用于用户集群 2 中的节点。 此示例中的地址是连续的,但这不作要求:
用户集群 2 中的节点的 IP 地址 |
---|
172.16.22.2 - 172.16.22.7 |
示例 IP 地址:用户集群 2 的 VIP 地址
下表举例说明了如何为用户集群 2 指定要在负载均衡器上配置的 VIP 地址。 此示例中的 VIP 是连续的,但这不作要求:
VIP | 说明 | IP 地址 |
---|---|---|
用户集群 2 的控制平面 VIP 地址 | 在负载均衡器上为用户集群 2 配置 | 172.16.22.50 |
用户集群 2 的 Ingress VIP 地址 | 在负载均衡器上为用户集群 2 配置 | 172.16.22.51 |
用户集群 2 的 Service VIP 地址 | LoadBalancer 类型的 Service 的 10 个地址。根据需要在负载均衡器上为用户集群 2 配置。 请注意,此范围包含 Ingress VIP 地址。 这是 MetalLB 负载均衡器的要求。 |
172.16.22.51 - 172.16.22.60 |
示例 IP 地址:Pod 和服务
在创建集群之前,您必须指定用于 Pod IP 地址的 CIDR 范围以及用于 Kubernetes Service 的 ClusterIP
地址的另一个 CIDR 范围。
确定要用于 Pod 和 Service 的 CIDR 范围。例如:
目的 | CIDR 范围 |
---|---|
管理员集群中的 Pod | 192.168.0.0/16 |
用户集群 1 中的 Pod | 192.168.0.0/16 |
用户集群 2 中的 Pod | 192.168.0.0/16 |
管理员集群中的 Service | 10.96.0.0/20 |
用户集群 1 中的 Service | 10.96.0.0/20 |
用户集群 2 中的 Service | 10.96.0.0/20 |
上述示例阐述了以下要点:
在默认的孤岛模式网络模型中,多个集群的 Pod CIDR 范围可以相同。在平面模式网络中,Pod 的 IP 地址在所有集群中必须是唯一的。如需详细了解影响 Pod 的网络模型,请参阅平面与孤岛模式网络模型。
多个集群的 Service CIDR 范围可以相同。
通常,您需要的 Pod 多于 Service,因此对于一个给定集群,Pod CIDR 范围应该要大于 Service CIDR 范围。用户集群的示例 Pod 范围为 192.168.0.0/16,地址数为 2^(32-16) = 2^16 个。但用户集群的示例 Service 范围为 10.96.0.0/20,地址数仅为 2^(32-20) = 2^12 个。
避免重叠
确保 CIDR 范围与网络中可访问的 IP 地址不重叠。Service 和 pod 范围不得与您要从集群内部访问的任何集群外部地址重叠。
例如,假设您的 Service 范围为 10.96.0.0/20,您的 Pod 范围为 192.168.0.0/16。从 Pod 发送到上述任一范围中的地址的任何流量都将被视为集群内的流量,并且不会到达集群外部的任何目的地。
具体来说,Service 和 pod 范围不得与以下各项重叠:
任何集群中节点的 IP 地址
负载均衡器使用的 IP 地址
控制平面节点和负载均衡器使用的 VIP 地址
DNS 服务器和 NTP 服务器的 IP 地址
我们建议您的 Service 和 Pod 范围位于 RFC 1918 专用地址空间中。
以下是建议使用 RFC 1918 地址的一个原因。假设您的 Pod 或 Service 范围包含外部 IP 地址。从 Pod 发送到其中一个外部地址的任何流量都将被视为集群内流量,并且不会到达外部目标。
分配 IP 地址的不同方法
本文档中提供的示例演示了为特定类型的安装分配 IP 地址的一种方法。但是,您可以通过多种方式安装 GKE on Bare Metal,并且您选择的方法会影响您规划 IP 地址的方式。
例如,您可能决定使用非 HA 集群,或者决定将集群节点分布在多个第 2 层网域。您可能会决定使用平面模式网络,而不是孤岛模式网络。
有关如何在各种安装的集群配置文件中指定 IP 地址的示例,请参阅集群配置示例
如需详细了解如何为不同类型的安装规划 IP 地址,请参阅以下文档:
-
在平面模式下,Pod 在多个集群中具有唯一地址。相应地调整 Pod CIDR 范围。
-
节点、Pod 和 Service 同时具有 IPv4 和 IPv6 地址。IPv6 网络处于平面模式,但 IPv4 网络可以处于孤岛模式或平面模式。对于平面模式网络,您必须安排 Pod 可达性。
-
您必须安排 Pod 可达性。增大 Pod 范围和节点范围的子集。
-
集群中的浮动 BGP 发言者需要浮动 IP 地址,并且必须指定对等路由器的 IP 地址。
-
集群中的浮动 BGP 发言者需要浮动 IP 地址,并且必须指定对等路由器的 IP 地址。
配置 Network Connectivity Gateway
您必须指定对等 IP 地址和本地隧道 IP 地址。