1.30:正式版
1.29:预览版
1.28:不可用
本文档介绍如何将 F5 BIG-IP 负载均衡器集成的配置设置迁移到手动负载均衡模式。在手动负载均衡模式下使用 F5 BIG-IP 可让您灵活地独立升级 F5 代理,而不会影响 F5 负载均衡器或 Kubernetes 服务的功能。如果您迁移到手动配置,则可以直接从 F5 获取更新,以确保最佳性能和安全性。
在以下情况下需要此迁移:
您希望启用 Controlplane V2 等新功能,并且还需要 F5 的访问权限。
您需要使用高于 v1.14 的 BIG-IP CIS Container Ingress Services (CIS) 控制器版本提供的功能。
如果上述情况不适用于您,您可以继续使用 F5 BIG-IP 负载均衡的捆绑配置。
无论如何,我们都将继续官方支持 F5 作为负载均衡器解决方案。
F5 BIG-IP 负载均衡器支持
我们支持将 F5 BIG-IP 与负载均衡器代理搭配使用,负载均衡器代理由以下两个控制器组成:
F5 控制器(pod 前缀:
load-balancer-f5
):将LoadBalancer
类型的 Kubernetes Service 协调为 F5 Common Controller Core Library (CCCL) ConfigMap 格式。F5 BIG-IP CIS Controller v1.14(pod 前缀:
k8s-bigip-ctlr-deployment
):将 ConfigMap 转换为 F5 负载均衡器配置。
这些代理简化了 Kubernetes 集群中 F5 负载均衡器的配置。通过创建 LoadBalancer
类型的 Service,控制器会自动配置 F5 负载均衡器,以将流量定向到集群节点。
但是,捆绑式解决方案存在以下限制:
Service API 的表达能力有限。您无法按自己的意愿配置 BIG-IP 控制器,也无法使用高级 F5 功能。F5 已经以原生方式更好地支持 Service API。
该实现使用旧版 CCCL ConfigMap API 和 1.x CIS。不过,F5 现在提供较新的 AS3 ConfigMap API 和 2.x CIS。
由于与 CIS v2.x 的 F5 升级指南存在兼容性问题,Google Distributed Cloud 软件包中的 CIS 控制器仍保持在 v1.14 版本。因此,为了让您能够灵活地解决安全漏洞并使用最新功能,我们将 F5 代理从捆绑的组件转变为独立安装的组件。如果您迁移,则可以继续使用现有代理,而不会中断,并且您之前创建的服务仍可正常运行。
对于使用 F5 作为负载均衡解决方案的新创建的手动负载均衡集群,您需要自行安装控制器。同样,如果您的集群已从捆绑的 F5 迁移,并且您想要使用较新版本的 CIS 控制器,则需要自行安装控制器。
要求
以下是迁移的要求:
管理员集群和所有用户集群必须为 1.29 或更高版本。
您必须为管理员集群和用户集群节点使用静态 IP 地址。IP 地址类型在
network.ipMode.type
字段中设置,并且不可变。如果此字段设置为 DHCP,您将无法迁移集群。
更新用户集群配置文件
对用户集群配置文件进行以下更改:
将
loadBalancer.kind
更改为"ManualLB"
。对
loadBalancer.vips.controlPlaneVIP
和loadBalancer.vips.ingressVIP
字段保持相同的值。配置用于发送到 Ingress VIP 的 HTTP 流量的
nodePort
。获取当前的 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
配置用于发送到 Ingress VIP 的 HTTPS 流量的
nodePort
:获取当前的 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
替换为管理员集群 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 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 集群。仅针对非 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 update admin \ --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
。
HA 管理员集群
流向控制平面节点的流量
Google Distributed Cloud 会自动处理 HA 管理员集群的控制平面流量的负载均衡。虽然您不需要在负载均衡器中配置映射,但必须在 loadBalancer.vips.controlPlaneVIP
字段中指定 IP 地址。
流向插件节点中的服务的流量
如果您的管理员集群具有 addonsNodePort
值,您应该会看到与插件节点中服务流量的 IP 地址和 nodePort
值的映射:
- (
addonsVIP
:8443) -> (NODE_IP_ADDRESSES:addonsNodePort
)
您应该对管理员集群中的所有节点(控制平面节点和插件节点)具有此映射。
非 HA 管理员集群
控制平面流量
下面显示了到控制平面节点 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
)
您应为管理员集群中的所有节点(包括管理员集群节点和用户集群控制平面节点)创建此映射。
数据平面流量
以下是数据平面流量的 IP 地址和 nodePort
值的映射:
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)