1.29:預先發布版
1.28:不適用
本文說明如何將 F5 BIG-IP 負載平衡器整合的設定遷移至手動負載平衡模式,適用於 1.29 版的叢集。如果叢集版本為 1.30 以上,建議按照「規劃叢集遷移至建議功能」一文中的操作說明進行。
在手動負載平衡模式下使用 F5 BIG-IP,可彈性地獨立升級 F5 代理程式,不會影響 F5 負載平衡器或 Kubernetes 服務的功能。如果遷移至手動設定,您可以直接從 F5 取得更新,確保最佳效能和安全性。
在下列情況下,您必須進行這項遷移作業:
您想啟用 Controlplane V2 等新功能,也需要存取 F5。
您需要 BIG-IP CIS Container Ingress Services (CIS) 控制器 1.14 以上版本提供的功能。
如果上述情況不適用於您,可以繼續使用 F5 BIG-IP 負載平衡的隨附設定。
無論如何,我們仍會繼續正式支援 F5 做為負載平衡器解決方案。
支援 F5 BIG-IP 負載平衡器
我們支援搭配負載平衡器代理程式使用 F5 BIG-IP,這類代理程式包含下列兩個控制器:
F5 控制器 (Pod 前置字元:
load-balancer-f5
):將LoadBalancer
類型的 Kubernetes 服務調解為 F5 Common Controller Core Library (CCCL) ConfigMap 格式。F5 BIG-IP CIS 控制器 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
。
高可用性管理員叢集
控制層節點的流量
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
)
您應該為管理員叢集中的所有節點 (包括管理員叢集和使用者叢集控制層節點) 建立這個對應關係。
資料層流量
下表顯示資料層流量的 IP 位址和 nodePort
值對應:
- (
ingressVIP
:80
) -> (NODE_IP_ADDRESSES:ingressHTTPNodePort
) - (
ingressVIP
:443
) -> (NODE_IP_ADDRESSES:ingressHTTPSNodePort
)