Cluster VPC: perché il programma di bilanciamento del carico di VPC per il controller Ingress esegue l'instradamento solo a una zona?

Cloud virtuale privato

Crei un cluster VPC multizona. Tuttavia, quando esegui ibmcloud is load-balancers per trovare il programma di bilanciamento del carico VPC che espone il controllore Ingress, viene elencata la sottorete VPC per una sola zona nel tuo cluster invece delle sottoreti per tutte le zone nel tuo cluster. Nell'output, cercare il nome del bilanciatore di carico VPC che inizia con kube-crtmgr-<cluster_ID>.

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

Quando si crea un cluster Red Hat OpenShift su un'infrastruttura VPC nella CLI, il cluster viene inizialmente creato con nodi worker in una sola zona. Rendi quindi il cluster multizona aggiungendo manualmente le zone ai tuoi pool di nodi di lavoro con il comando ibmcloud oc zone add vpc-gen2. Attualmente, quando aggiungi zone al tuo cluster, il controller Ingress non viene aggiornato con le sottoreti VPC delle nuove zone e non instrada le richieste alle applicazioni nelle nuove zone.

Riavviare il controller Ingress in modo che venga creato un nuovo programma di bilanciamento del carico VPC, che registra il controller Ingress dietro un nome host e inoltra il traffico al controller Ingress. Quindi, aggiorna il tuo dominio secondario Ingress per utilizzare il nuovo nome host del programma di bilanciamento del carico VPC.

  1. Immetti il seguente comando per trovare il programma di bilanciamento del carico VPC che espone il controller Ingress. Nell'output, cercare il nome del bilanciatore di carico VPC che inizia con kube-crtmgr-<cluster_ID>.

    ibmcloud is load-balancers
    

    Output di esempio

    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. Rimuovere il servizio router-default e attendere che venga ricreato automaticamente.

    oc delete svc router-default -n openshift-ingress
    

    Dopo aver eseguito il comando delete svc per eliminare il servizio, potrebbe essere necessario rimuovere i finalizer per rimuovere completamente il servizio. Eseguire il seguente comando per eliminare i finalizzatori del servizio:

    oc get svc -n openshift-ingress router-default -o=json | jq '.metadata.finalizers = null' | kubectl apply -f -
    
  3. Verifica che il nuovo programma di bilanciamento del carico VPC che espone il controller Ingress abbia lo stato di provisioning di active e uno Stato operativo di online. Inoltre, verifica che l'elenco Subnets ora includa le sottoreti per ogni zona del tuo cluster.

    ibmcloud is load-balancers
    

    Nell'output, cercare il nome del bilanciatore di carico VPC che inizia con kube-crtmgr-<cluster_ID>.

    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. Per il servizio router-default, copia il nome host assegnato dal nuovo programma di bilanciamento del carico VPC nel campo EXTERNAL - IP.

    oc get svc -n openshift-ingress
    

    Output di esempio

    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. Ottieni il dominio secondario Ingress per il tuo cluster.

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

    Output di esempio

    Ingress Subdomain:              mycluster-35366fb2d3d90fd50548180f69e7d12a-0000.us-south.containers.appdomain.cloud
    
  6. Aggiorna la registrazione DNS del dominio secondario Ingress per utilizzare il nuovo nome host del programma di bilanciamento del carico VPC.

    ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname>
    
  7. Verifica che la registrazione DNS del dominio secondario di ingresso sia aggiornata per includere il nuovo nome host del programma di bilanciamento del carico VPC per il tuo controller Ingress.

    ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>
    

    Output di esempio

    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