启用手动负载平衡模式

GKE On-Prem 集群可以通过两种负载平衡模式之一运行:集成模式或手动模式。使用集成模式时,GKE On-Prem 集群将通过 F5 BIG-IP 负载平衡器运行。在手动模式下,您可以使用 F5 BIG-IP 负载平衡器或您选择的任何其他负载平衡器。手动负载平衡模式要求您进行比集成模式更多的配置。本页面介绍在您选择使用手动负载平衡模式时需要执行的步骤。

您可以通过手动负载均衡模式使用的负载均衡器示例包括 Citrix 负载均衡器Seesaw 负载均衡器

在本主题中,您要预留 IP 地址和 nodePort 值,供以后使用。您可以选择要用于负载平衡和集群节点的 IP 地址和 nodePort 值。但是,此时您不会对地址和 nodePort 值执行任何操作。稍后,当您准备好安装 GKE On-Prem 时,需要使用地址和 nodePort 值来填充集群配置文件。在手动配置负载平衡器时,您还需要使用地址和 nodePort 值。

预留虚拟 IP 地址

无论您使用集成还是手动负载平衡模式,都必须预留一些虚拟 IP (VIP) 地址以用于负载平衡。这些 VIP 允许外部客户端访问您的 Kubernetes API 服务器、入站服务和插件服务。如需详细了解如何预留 VIP,请参阅预留虚拟 IP 地址

预留节点 IP 地址

使用手动负载平衡模式时,您无法使用 DHCP。您必须为集群节点指定静态 IP 地址。您需要为管理员集群中的节点预留足够的地址,并为您要创建的所有用户集群中的节点预留足够的地址。如需详细了解要预留的节点 IP 地址数量,请参阅配置静态 IP

预留 nodePort

在 GKE On-Prem 集群中,Kubernetes API 服务器、入站服务和插件服务是作为 NodePort 类型的 Kubernetes 服务实现的。使用手动负载平衡模式时,您必须为这些服务选择自己的 nodePort 值。请选择 30000 - 32767 范围内的值。选择 nodePort 值后,请将其预留以供稍后在修改集群配置文件时使用。

选择并保留以下 nodePort 值。

  • 对于您为 Kubernetes API 服务器预留的每个 VIP 地址,请预留一个 nodePort 值。

  • 对于您为集群入站服务预留的每个 VIP 地址,请预留两个 nodePort 值:一个用于 HTTP 流量,一个用于 HTTPS 流量。

  • 对于您为集群插件服务预留的每个 VIP 地址,请预留一个 nodePort 值。

例如,假设您打算使用两个用户集群,并且打算在所有集群中使用插件。您需要选择并预留以下 nodePort 值:

  • 为管理员集群中的 Kubernetes API 服务器预留一个 nodePort 值。

  • 对于两个用户集群中的每一个,为 Kubernetes API 服务器预留一个 nodePort 值。

  • 为进入管理员集群中的入站服务的 HTTP 流量预留一个 nodePort 值。

  • 为进入管理员集群中的入站服务的 HTTPS 流量预留一个 nodePort 值。

  • 对于两个用户集群中的每一个,为进入入站服务的 HTTP 流量预留一个 nodePort 值。

  • 对于两个用户集群中的每一个,为进入入站服务的 HTTPS 流量预留 nodePort 值。

  • 为管理员集群中的插件服务预留一个 nodePort 值。

  • 对于两个用户集群中的每一个,为插件服务器预留一个 nodePort 值。

因此,在前面的示例中,您需要预留 11 个 nodePort 值。

修改 GKE On-Prem 配置文件

安装 GKE On-Prem 时,您会生成一个配置文件。对于手动负载平衡模式,请对配置文件进行以下修改:

  • lbmode 设置为 Manual

  • admincluster.ipblockfilepath 设置为管理员集群的静态 IP 地址 YAML 文件的路径。相关说明请参阅配置静态 IPManual 模式不支持 DHCP。

  • usercluster.ipblockfilepath 设置为用户集群的静态 IP YAML 文件的路径。

  • 使用您为管理员集群选择的 nodePort 值更新 admincluster.manuallbspec 字段。

  • 使用您为用户集群选择的 nodePort 值更新 usercluster.manuallbspec 部分。

以下示例显示了更新后的配置文件的一部分:

...
lbmode: Manual
...
admincluster:
  ipblockfilepath: "ipblock1.yaml"
  manuallbspec:
    ingresshttpnodeport: 32527
    ingresshttpsnodeport: 30139
    controlplanenodeport: 30968
    addonsnodeport: 31405
...
usercluster:
  ipblockfilepath: "env/default/ipblock2.yaml"
  manuallbspec:
    ingresshttpnodeport: 30243
    ingresshttpsnodeport: 30879
    controlplanenodeport: 30562

配置负载平衡器

现在您已更新了配置文件,接下来请登录负载平衡器的管理控制台并配置 VIP。

如前所述,您需要配置 5 个 VIP 和 7 个端口。因此,您需要在负载平衡器上创建七个虚拟服务:

  • 管理员集群控制层面,TCP 端口 443
  • 管理员集群 Ingress 控制器,TCP 端口 80
  • 管理员集群 Ingress 控制器,TCP 端口 443
  • 插件管理器,TCP 端口 8443
  • 用户控制层面,TCP 端口 80
  • 用户集群 Ingress 控制器,TCP 端口 80
  • 用户集群 Ingress 控制器,TCP 端口 443

负载平衡示例

Service 有一个 ports 字段,它是 ServicePort 对象的数组。在 NodePort 类型的 Service 中,每个 ServicePort 对象都有一个 protocolportnodePorttargetPort。例如,下面是对应 ports 数组中有两个 ServicePort 对象的 Service 的清单的一部分:

...
kind: Service
...
spec:
  ...
  type: NodePort
  ports:
  - protocol: TCP
    port: 80
    nodePort: 32676
    targetPort: 8080
  - protocol: TCP
    port: 443
    nodePort: 32677
    targetPort: 443
...

假设上述 Service 代表您的某个用户集群的入站服务。另外,还假设您已做出以下选择:

  • 203.0.113.5 是您的用户集群的入站服务的 VIP。

  • 您的用户集群的节点地址为 192.168.0.10192.168.0.11192.168.0.12

配置好负载平衡器后,流量路由如下:

  • 客户端在 TCP 端口 80 上向 203.0.113.5 发送请求。负载平衡器选择用户集群节点。对于此示例,假设节点地址为 192.168.0.11。负载平衡器将请求转发到 TCP 端口 32676 上的 192.168.0.11。节点上的 iptables 规则将请求转发到 TCP 端口 8080 上的相应 pod。

  • 客户端在 TCP 端口 443 上向 203.0.113.5 发送请求。负载平衡器选择用户集群节点。对于此示例,假设节点地址为 192.168.0.10。负载平衡器将请求转发到 TCP 端口 32677 上的 192.168.0.10。节点上的 iptables 规则将请求转发到 TCP 端口 443 上的相应 Pod。

获取对手动负载平衡的支持

Google 不提供对使用手动负载平衡模式配置的负载平衡器的支持。如果您遇到与负载平衡器相关的问题,请与负载平衡器的供应商联系。

后续步骤

问题排查

如需了解详情,请参阅问题排查