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 負載平衡器主機名稱。

  1. 執行下列指令,以尋找公開 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
    
  2. 移除 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 -
    
  3. 驗證公開 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
    
  4. 對於 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
    
  5. 取得叢集的 Ingress 子網域。

    ibmcloud oc cluster get -c <cluster_name_or_ID> | grep 'Ingress Subdomain'
    

    輸出範例

    Ingress Subdomain:              mycluster-35366fb2d3d90fd50548180f69e7d12a-0000.us-south.containers.appdomain.cloud
    
  6. 更新 Ingress 子網域 DNS 登錄,以使用新的 VPC 負載平衡器主機名稱。

    ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname>
    
  7. 驗證入口子網域 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