规划您的 IP 地址

本文档举例说明如何为高可用性 (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 地址全都运行控制平面组件。例如,您可以将以下 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 范围
管理员集群中的 Pod192.168.0.0/16
用户集群 1 中的 Pod192.168.0.0/16
用户集群 2 中的 Pod192.168.0.0/16
管理员集群中的 Service10.96.0.0/20
用户集群 1 中的 Service10.96.0.0/20
用户集群 2 中的 Service10.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 地址,请参阅以下文档: