VPC クラスター: Ingress コントローラー用の VPC ロード・バランサーが 1 つのゾーンにのみルーティングされるのはなぜですか?

仮想プライベートクラウド

マルチゾーンの VPC クラスターを作成しました。 ただし、ibmcloud is load-balancers を実行して Ingress コントローラーを公開する VPC ロード・バランサーを見つけると、クラスター内のすべてのゾーンのサブネットではなく、クラスター内の 1 つのゾーンの 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 クラスターを作成する場合、クラスターは最初、1 つのゾーンのワーカーノードのみで作成されます。 その後、ibmcloud oc zone add vpc-gen2 コマンドを使用してワーカー・プールに手動でゾーンを追加することでユーザーがクラスターをマルチゾーンにします。 現時点では、クラスターにゾーンを追加するときに、Ingress コントローラーは新しいゾーンの VPC サブネットを反映して更新されないので、新しいゾーンのアプリに要求を転送しません。

Ingress コントローラーを再始動して、新しい VPC ロード・バランサーが作成されるようにします。これにより、Ingress コントローラーがホスト名の後ろに登録され、トラフィックが Ingress コントローラーに転送されます。 その後、新規 VPC ロード・バランサーのホスト名を使用するように Ingress サブドメインを更新してください。

  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 コマンドを実行してサービスを削除した後、サービスを完全に削除するためにファイナライザーを削除しなければならない場合があります。 以下のコマンドを実行して、サービスのファイナライザーを削除する:

    oc get svc -n openshift-ingress router-default -o=json | jq '.metadata.finalizers = null' | kubectl apply -f -
    
  3. Ingress コントローラーを公開する新しい VPC ロード・バランサーの プロビジョニング状況 が active であり、稼働状況 が online であることを確認します。 また、**「Subnets」**リストに、クラスターの各ゾーンのサブネットが含まれるようになったことも確認します。

    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. 新規 VPC ロード・バランサーのホスト名を使用するように Ingress サブドメインの DNS 登録を更新します。

    ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname>
    
  7. Ingress サブドメイン 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