本文档介绍了如何将 F5 BIG-IP 集成负载均衡器的配置设置迁移到手动负载均衡模式。
对 F5 BIG-IP 负载均衡器的支持
过去,您可以通过以下方式将 Google Distributed Cloud 配置为与 F5 BIG-IP 集成:当开发者创建 LoadBalancer
类型的 Service 并为该服务指定虚拟 IP 地址 (VIP) 时,Google Distributed Cloud 会在负载均衡器上自动配置 VIP。
如需启用新功能和高级功能(例如控制平面 V2),我们建议您更新配置。您可以继续使用 F5 BIG-IP 负载平衡器,但需要更改集群配置文件中的设置以使用手动负载均衡。
使用要求
以下是迁移的要求:
管理员集群和所有用户集群必须为 1.29 或更高版本。
您必须为管理员和用户集群节点使用静态 IP 地址。IP 地址类型在
network.ipMode.type
字段中设置,并且不可变。如果此字段设置为 DHCP,您将无法迁移集群。
更新用户集群配置文件
对用户集群配置文件进行以下更改:
将
loadBalancer.kind
更改为"ManualLB"
。保持
loadBalancer.vips.controlPlaneVIP
和loadBalancer.vips.ingressVIP
字段的值相同。配置
nodePort
,用于发送到入站流量 VIP 的 HTTP 流量。获取当前的 HTTP
nodePort
值:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep http2 -A 1
将
USER_CLUSTER_KUBECONFIG
替换为用户集群 kubeconfig 文件的路径。将上一个命令的值添加到
loadBalancer.manualLB.ingressHTTPNodePort
字段,例如:loadBalancer: manualLB: ingressHTTPNodePort: 30243
配置
nodePort
,用于发送到入站流量 VIP 的 HTTPS 流量:获取当前的 HTTPS
nodePort
值:kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ get svc istio-ingress -n gke-system -oyaml | grep https -A 1
将上一个命令的值添加到
loadBalancer.manualLB.ingressHTTPSNodePort
字段,例如:loadBalancer: manualLB: ingressHTTPSNodePort: 30879
为 Kubernetes API 服务器配置
nodePort
:获取 Kubernetes API 服务器的当前
nodePort
值:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep kube-apiserver-port -A 1
请替换以下内容:
将
ADMIN_CLUSTER_KUBECONFIG
替换为admin集群 kubeconfig 文件的路径。USER_CLUSTER_NAME
:用户集群的名称。
将上一个命令的值添加到
loadBalancer.manualLB.controlPlaneNodePort
字段,例如:loadBalancer: manualLB: controlPlaneNodePort: 30968
为 Konnectivity 服务器配置
nodePort
:获取 Konnectivity 服务器的当前
nodePort
值:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n USER_CLUSTER_NAME -oyaml | grep konnectivity-server-port -A 1
将上一个命令的值添加到
loadBalancer.manualLB.konnectivityServerNodePort
字段,例如:loadBalancer: manualLB: konnectivityServerNodePort: 30563
删除整个
loadBalancer.f5BigIP
部分。运行
gkectl diagnose cluster
,并修复该命令发现的任何问题。gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG \ --cluster-name=USER_CLUSTER_NAME
更新用户集群:
运行以下命令以迁移集群:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config USER_CLUSTER_CONFIG
请替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。USER_CLUSTER_CONFIG
:用户集群配置文件的路径。
更新管理员集群配置文件
对管理员集群配置文件进行以下更改:
将
loadBalancer.kind
更改为"ManualLB"
。使
loadBalancer.vips.controlPlaneVIP
字段的值保持不变。请检查
adminMaster.replicas
字段的值。如果值为 3,则表示管理员集群具有高可用性 (HA)。如果值为 1,则管理员集群为非 HA。仅对非高可用性管理员集群执行以下步骤:
获取 Kubernetes API 服务器的
nodePort
值:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get svc kube-apiserver -n kube-system -oyaml | grep nodePort
将
ADMIN_CLUSTER_KUBECONFIG
替换为管理员集群 kubeconfig 文件的路径。将上一个命令的值添加到
loadBalancer.manualLB.controlPlaneNodePort
字段,例如:loadBalancer: manualLB: controlPlaneNodePort: 30968
运行以下命令,查看是否有
nodePort
插件:kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ get deploy monitoring-operator -n kube-system -oyaml | grep admin-ingress-nodeport
如果上述命令输出一个值,请将其添加到
loadBalancer.manualLB.addonsNodePort
字段,例如:loadBalancer: manualLB: addonsNodePort: 31405
删除整个
loadBalancer.f5BigIP
部分。运行
gkectl diagnose cluster
,并修复该命令发现的任何问题。gkectl diagnose cluster \ --kubeconfig=ADMIN_CLUSTER_KUBECONFIG
更新管理员集群:
运行以下命令以更新集群:
gkectl update cluster \ --kubeconfig ADMIN_CLUSTER_KUBECONFIG \ --config ADMIN_CLUSTER_CONFIG
请替换以下内容:
ADMIN_CLUSTER_KUBECONFIG
:管理员集群 kubeconfig 文件的路径。ADMIN_CLUSTER_CONFIG
:管理员集群配置文件的路径。
验证旧版 F5 资源是否仍然存在
将集群更新为使用手动负载均衡后,流向集群的流量不会中断,因为现有的 F5 资源仍然存在,如通过运行以下命令所示:
kubectl --kubeconfig CLUSTER_KUBECONFIG \ api-resources --verbs=list -o name | xargs -n 1 kubectl --kubeconfig CLUSTER_KUBECONFIG get --show-kind --ignore-not-found --selector=onprem.cluster.gke.io/legacy-f5-resource=true -A
将 CLUSTER_KUBECONFIG
替换为管理员集群或用户集群 kubeconfig 文件的路径。
预期输出如下所示:
管理员集群:
Warning: v1 ComponentStatus is deprecated in v1.19+ NAMESPACE NAME TYPE DATA AGE kube-system secret/bigip-login-xt697x Opaque 4 13h NAMESPACE NAME SECRETS AGE kube-system serviceaccount/bigip-ctlr 0 13h kube-system serviceaccount/load-balancer-f5 0 13h NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/k8s-bigip-ctlr-deployment 1/1 1 1 13h kube-system deployment.apps/load-balancer-f5 1/1 1 1 13h NAME ROLE AGE clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding ClusterRole/bigip-ctlr-clusterrole 13h clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding ClusterRole/load-balancer-f5-clusterrole 13h NAME CREATED AT clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole 2024-03-25T04:37:34Z clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole 2024-03-25T04:37:34Z
用户集群:
Warning: v1 ComponentStatus is deprecated in v1.19+ NAMESPACE NAME TYPE DATA AGE kube-system secret/bigip-login-sspwrd Opaque 4 14h NAMESPACE NAME SECRETS AGE kube-system serviceaccount/bigip-ctlr 0 14h kube-system serviceaccount/load-balancer-f5 0 14h NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE kube-system deployment.apps/k8s-bigip-ctlr-deployment 1/1 1 1 14h kube-system deployment.apps/load-balancer-f5 1/1 1 1 14h NAME ROLE AGE clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding ClusterRole/bigip-ctlr-clusterrole 14h clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding ClusterRole/load-balancer-f5-clusterrole 14h NAME CREATED AT clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole 2024-03-25T05:16:40Z clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole 2024-03-25T05:16:41Z
检查负载均衡器
迁移后,您不需要更改负载平衡器中的任何设置,因为您保留了相同的 VIP 和 nodePort
值。下表描述了从 VIP 到节点 IP 地址的映射:nodePort
。
高可用性管理员集群
流向控制平面节点的流量
Google Distributed Cloud 会自动处理高可用性管理员集群的控制平面流量的负载均衡。虽然您无需在负载均衡器中配置映射,但必须在 loadBalancer.vips.controlPlaneVIP
字段中指定 IP 地址。
流向插件节点中服务的流量
如果您的管理员集群具有 addonsNodePort
值,您应该会看到 IP 地址的映射以及流向插件节点中的服务的流量的 nodePort
值:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
您应该为管理员集群中的所有节点(包括控制平面节点和插件节点)添加此映射。
非高可用性管理员集群
控制平面流量
下面显示了到控制平面节点 IP 地址和 nodePort
值的映射:
- (
controlPlaneVIP
:443) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
)
您应该为管理员集群中的所有节点(包括控制平面节点和插件节点)添加此映射。
流向插件节点中服务的流量
如果您的管理员集群具有 addonsNodePort
值,对于在插件节点中运行的服务的 IP 地址和 nodePort
值,您应该具有以下映射:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
您应该为管理员集群中的所有节点(包括控制平面节点和插件节点)添加此映射。
用户集群
控制平面流量
下面显示了控制平面流量的 IP 地址和 nodePort
值的映射:
- (
controlPlaneVIP
:443
) -> (NODE_IP_ADDRESSES:controlPlaneNodePort
) - (
controlPlaneVIP
:8132
) -> (NODE_IP_ADDRESSES:konnectivityServerNodePort
)
您应该为 admin 集群中的所有节点(包括管理员集群和用户集群控制平面节点)添加此映射。
数据平面流量
下面显示了数据平面流量的 IP 地址和 nodePort
值的映射:
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)