规划您的 IP 地址 (kubeception)

本文档介绍如何规划 IP 地址,以便安装 GKE on VMware,其中包含使用 kubeception 的用户集群。

什么是 kubeception?

术语 kubeception 用于传达 Kubernetes 集群用于创建和管理其他 Kubernetes 集群的想法。在 GKE on VMware 环境中,kubeception 指的是用户集群的控制平面在管理员集群中的一个或多个节点上运行的情况。

我们不建议使用 kubeception。我们建议您改为使用 Controlplane V2。使用 Controlplane V2 时,用户集群的控制平面节点位于用户集群本身中。

准备工作

阅读 GKE on VMware 概览安装概览

IP 地址分配示例

本部分介绍如何在包含以下元素的安装中分配静态 IP 地址:

  • 一个管理员工作站

  • 一个管理员集群

  • 一个具有五个工作器节点的高可用性 (HA) 用户集群

  • 一个具有四个工作器节点的非 HA 用户集群

管理员集群节点

管理员集群有 7 个节点:

  • 一个运行管理员集群的控制层面的节点
  • 两个运行管理员集群插件的节点
  • 三个运行 HA 用户集群控制层面的节点
  • 一个运行非 HA 用户集群的控制层面的节点

负载平衡

在本示例中,假设集群使用 MetalLB 负载均衡器。此负载均衡器在集群节点上运行,因此无需额外的虚拟机即可实现负载均衡。

子网

对于此示例,假设每个集群位于自己的 VLAN 上,并且集群位于以下子网中:

虚拟机 子网 默认网关
管理员工作站和管理员集群 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

下图演示了三个 VLAN 和子网。请注意,VIP 未显示与集群中的任何特定节点相关联。这是因为 MetalLB 负载均衡器可以选择哪个节点公布单个 Service 的 VIP。例如,在用户集群 1 中,一个工作器节点可以公布 172.16.21.31,另一个工作器节点可以公布 172.16.21.32。

一个管理员集群和两个用户集群的 IP 地址。
一个管理员集群和两个用户集群的 IP 地址(点击可放大)

IP 地址示例:管理员工作站

在本示例中,管理员工作站与管理员集群位于同一子网中:172.16.20.0/24。节点地址附近的地址适合管理员工作站。例如:172.16.20.20。

示例 IP 地址:管理员集群节点

对于具有七个节点的管理员集群,您需要预留八个 IP 地址。额外的地址是必需的,因为在集群升级、更新和自动修复期间需要用到它。例如,您可以为管理员集群中的节点预留以下 IP 地址:

管理员集群中的节点的 IP 地址
172.16.20.2 - 172.16.20.9

示例 IP 地址:管理员集群子网中的 VIP 地址

下表示例演示了如何为管理员集群的负载均衡器指定 VIP 地址。请注意,用户集群的 Kubernetes API 服务器的 VIP 位于管理员集群子网上。这是因为在此示例中,用户集群的 Kubernetes API 服务器在管理员集群中的节点上运行。请注意,在集群配置文件中,用于指定 Kubernetes API 服务器的 VIP 的字段称为 controlPlaneVIP

VIP IP 地址
管理员集群的 Kubernetes API 服务器的 VIP 地址172.16.20.30
管理员集群插件 VIP 172.16.20.31
用户集群 1 的 Kubernetes API 服务器的 VIP 地址 172.16.20.32
用户集群 2 的 Kubernetes API 服务器的 VIP 地址 172.16.20.33

示例 IP 地址:用户集群 1 节点

对于具有五个节点的用户集群,您需要预留六个 IP 地址。额外的地址是必需的,因为在集群升级、更新和自动修复期间需要用到它。例如,您可以为用户集群 1 中的节点预留以下 IP 地址:

用户集群 1 中的节点的 IP 地址
172.16.21.2 - 172.16.21.7

示例 IP 地址:用户集群 1 子网中的 VIP 地址

下表举例说明了如何为用户集群 1 指定要在负载均衡器上配置的 VIP 地址:

VIP 说明 IP 地址
用户集群 1 的 Ingress VIP 地址 在负载均衡器上为用户集群 1 配置 172.16.21.30
用户集群 1 的 Service VIP 地址 LoadBalancer 类型的 Service 的 10 个地址。
根据需要在负载均衡器上为用户集群 1 配置。
请注意,此范围包含 Ingress VIP 地址。
这是 MetalLB 负载均衡器的要求。
172.16.21.30 - 172.16.21.39

示例 IP 地址:用户集群 2 节点

对于具有四个节点的用户集群,您需要预留五个 IP 地址。额外的地址是必需的,因为在集群升级、更新和自动修复期间需要用到它。例如,您可以为用户集群 2 中的节点预留以下 IP 地址:

用户集群 2 中的节点的 IP 地址
172.16.22.2 - 172.16.22.6

示例 IP 地址:用户集群 2 子网中的 VIP 地址

下表举例说明了如何为用户集群 2 指定要在负载均衡器上配置的 VIP 地址:

VIP 说明 IP 地址
用户集群 2 的 Ingress VIP 地址 在负载均衡器上为用户集群 2 配置 172.16.22.30
用户集群 2 的 Service VIP 地址 LoadBalancer 类型的 Service 的 10 个地址。
根据需要在负载均衡器上为用户集群 2 配置。
请注意,此范围包含 Ingress VIP 地址。
这是 MetalLB 负载均衡器的要求。
172.16.22.30 - 172.16.22.39

示例 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.232.0/24
用户集群 1 中的 Service10.96.0.0/20
用户集群 2 中的 Service10.96.128.0/20

上述示例阐述了以下要点:

  • 多个集群的 Pod 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.232.0/24,您的 Pod 范围为 192.168.0.0/16 (192.168.0.1 - 192.168.255.254)。从 Pod 发送到上述任一范围中的地址的任何流量都将被视为集群内的流量,并且不会到达集群外部的任何目的地。

具体来说,Service 和 pod 范围不得与以下各项重叠:

  • 任何集群中节点的 IP 地址

  • 负载均衡器使用的 IP 地址

  • 控制平面节点和负载均衡器使用的 VIP 地址

  • vCenter 服务器、DNS 服务器和 NTP 服务器的 IP 地址

我们建议您的 Service 和 Pod 范围位于 RFC 1918 专用地址空间中。

以下是建议使用 RFC 1918 地址的一个原因。假设您的 Pod 或 Service 范围包含外部 IP 地址。从 Pod 发送到其中一个外部地址的任何流量都将被视为集群内流量,并且不会到达外部目标。

DNS 服务器和默认网关

在填写配置文件之前,您必须知道管理员工作站和集群节点可以使用的 DNS 服务器的 IP 地址。

您还必须知道每个子网的默认网关的 IP 地址。在前面的示例中,每个子网的默认网关是范围内的第一个地址。例如,在管理员集群的子网中,默认网关显示为 172.16.20.1。

更多信息

管理节点 IP 地址