GKE On-Prem 集群可以在以下三种负载平衡模式之一下运行:集成模式、捆绑模式或手动模式。使用集成式模式时,GKE On-Prem 集群将使用 F5 BIG-IP 负载平衡器。 使用捆绑式模式时,GKE On-Prem 提供和管理负载平衡器。您无需获得负载平衡器许可,并且只需执行最基本的设置步骤。 在手动模式下,GKE On-Prem 将使用您选择的其他负载平衡器。手动负载平衡模式要求您进行比集成模式更多的配置。 本页面介绍在您选择使用手动负载平衡模式时需要执行的步骤。
Citrix 负载均衡器是一种示例负载均衡器,您可以将其用于手动负载均衡模式。
在本主题中,您要预留 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
值。为管理员集群中的插件服务预留一个
nodePort
值。
因此,在前面的示例中,您需要预留 8 个 nodePort
值。
修改 GKE On-Prem 配置文件
将
loadBalancer.kind
设置为ManualLB
。将
network.ipMode
设置为static
将
network.ipBlockFilePath
设置为您的集群的静态 IP YAML 文件的路径。相关说明请参阅配置静态 IP。DHCP 不是手动负载平衡模式的选项。使用您为集群选择的
nodePort
值更新loadBalancer.manualLB
字段。
以下示例显示了更新后的配置文件的一部分:
network: ipMode: type: static ipBlockFilePath: "ipblock1.yaml" loadBalancer: kind: ManualLB manualLB: ingressHTTPNodePort: 30243 ingressHTTPSNodePort: 30879 controlPlaneNodePort: 30562: addonsnodeport: 31405
配置负载平衡器
现在您已更新了配置文件,下面请登录负载平衡器的管理控制台并配置 VIP:
- 管理员集群和用户集群的集群控制平面,TCP 端口 443
- 管理员集群的插件管理器(如果使用),TCP 端口 8443
- 用户集群 Ingress 控制器,TCP 端口 80
- 用户集群 Ingress 控制器,TCP 端口 443
负载平衡示例
Service 有一个 ports
字段,它是 ServicePort 对象的数组。在 NodePort
类型的 Service 中,每个 ServicePort 对象都有一个 protocol
、port
、nodePort
和 targetPort
。例如,下面是对应 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.10
、192.168.0.11
、192.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 不提供对使用手动负载平衡模式配置的负载平衡器的支持。如果您遇到与负载平衡器相关的问题,请与负载平衡器的供应商联系。
后续步骤
问题排查
如需了解详情,请参阅问题排查。