VPC 叢集: 為何 Ingress 控制器的 VPC 負載平衡器僅遞送至一個區域?
虛擬私有雲
您可以建立多區域 VPC 叢集。 不過,當您執行 ibmcloud is load-balancers 以尋找公開 Ingress 控制器的 VPC 負載平衡器時,會列出叢集裡只有一個區域的 VPC 子網路,而不是叢集裡所有區域的子網路。 在輸出中,尋找以 kube-crtmgr-<cluster_ID> 開頭的 VPC 負載平衡器名稱。
ID Name Family Subnets Is public Provision status Operating status Resource group
r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default
當您在 CLI 中於 VPC 基礎架構上建立 Red Hat OpenShift 群集時,群集一開始只會在一個區域中建立工作節點。 然後,您可以使用 ibmcloud oc zone add vpc-gen2 指令手動將區域新增至工作者節點儲存區,以建立叢集多區域。 目前,當您將區域新增至叢集時,Ingress 控制器不會使用新區域的 VPC 子網路更新,且不會將要求遞送至新區域中的應用程式。
重新啟動 Ingress 控制器,以建立新的 VPC 負載平衡器,這會在主機名稱後面登錄 Ingress 控制器,並將資料流量轉遞至 Ingress 控制器。 然後,更新 Ingress 子網域以使用新的 VPC 負載平衡器主機名稱。
-
執行下列指令,以尋找公開 Ingress 控制器的 VPC 負載平衡器。 在輸出中,尋找以
kube-crtmgr-<cluster_ID>開頭的 VPC 負載平衡器名稱。ibmcloud is load-balancers輸出範例
ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-3 true active online default -
移除
router-default服務,並等待它自動重建。oc delete svc router-default -n openshift-ingress執行
delete svc指令以刪除服務之後,您可能需要移除終止程式以完全移除服務。 執行下列指令刪除服務上的 finalizers:oc get svc -n openshift-ingress router-default -o=json | jq '.metadata.finalizers = null' | kubectl apply -f - -
驗證公開 Ingress 控制器的新 VPC 負載平衡器具有
active的 佈建狀態 及online的 作業狀態。 此外,請驗證 子網路 清單現在包括叢集的每個區域的子網路。ibmcloud is load-balancers在輸出中,尋找以
kube-crtmgr-<cluster_ID>開頭的 VPC 負載平衡器名稱。ID Name Family Subnets Is public Provision status Operating status Resource group r006-d044af9b-92bf-4047-8f77-a7b86efcb923 kube-bsaucubd07dhl66e4tgg-1f4f408ce6d2485499bcbdec0fa2d306 Application mysubnet-us-south-1, mysubnet-us-south-2, mysubnet-us-south-3 true active online default -
對於
router-default服務,複製 EXTERNAL-IP 欄位中由新 VPC 負載平衡器指派的主機名稱。oc get svc -n openshift-ingress輸出範例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-default LoadBalancer 172.21.47.119 1234abcd-us-south.lb.appdomain.cloud 80:32637/TCP,443:31719/TCP 2m router-internal-default ClusterIP 172.21.51.30 <none> 80/TCP,443/TCP,1936/TCP 2m -
取得叢集的 Ingress 子網域。
ibmcloud oc cluster get -c <cluster_name_or_ID> | grep 'Ingress Subdomain'輸出範例
Ingress Subdomain: mycluster-35366fb2d3d90fd50548180f69e7d12a-0000.us-south.containers.appdomain.cloud -
更新 Ingress 子網域 DNS 登錄,以使用新的 VPC 負載平衡器主機名稱。
ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname> -
驗證入口子網域 DNS 登錄是否已更新,以包括 Ingress 控制器的新 VPC 負載平衡器主機名稱。
ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>輸出範例
Subdomain Load Balancer Hostname SSL Cert Status SSL Cert Secret Name Secret Namespace mycluster-d84d4d2137685d8446c88eacf59b5038-0000.us-south.containers.appdomain.cloud 1234abcd-us-south.lb.appdomain.cloud created cluster-d84d4d2137685d8446c88eacf59b5038-0000 openshift-ingress