Clústeres de VPC: ¿Por qué el equilibrador de carga de VPC para el controlador de Ingress solo se dirige a una zona?

Nube privada virtual

Crea un clúster multizona VPC. Sin embargo, cuando ejecuta ibmcloud is load-balancers para encontrar el equilibrador de carga de VPC que expone el controlador de Ingress, se lista la subred de VPC solo para una zona del clúster, en lugar de las subredes para todas las zonas del clúster. En la salida, busque el nombre del equilibrador de carga de la VPC que empiece por 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

Cuando se crea un clúster Red Hat OpenShift en una infraestructura VPC en la CLI, el clúster se crea inicialmente con nodos trabajadores en una sola zona. A continuación, convierta el clúster en multizona mediante la adición manual de zonas a las agrupaciones de nodos trabajadores con el mandato ibmcloud oc zone add vpc-gen2. Actualmente, cuando añade zonas al clúster, el controlador de Ingress no se actualiza con las subredes de VPC para las nuevas zonas y no direcciona solicitudes a apps en las nuevas zonas.

Reinicie el controlador de Ingress para que se cree un nuevo equilibrador de carga de VPC, que registra el controlador de Ingress detrás de un nombre de host y reenvía el tráfico al controlador de Ingress. A continuación, actualice el subdominio de Ingress para que utilice el nuevo nombre de host del equilibrador de carga de VPC.

  1. Ejecute el mandato siguiente para buscar el equilibrador de carga de VPC que expone el controlador de Ingress. En la salida, busque el nombre del equilibrador de carga de VPC que empieza por kube-crtmgr-<cluster_ID>.

    ibmcloud is load-balancers
    

    Salida de ejemplo

    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. Elimine el servicio de router-default y espere a que se vuelva a crear automáticamente.

    oc delete svc router-default -n openshift-ingress
    

    Después de ejecutar el mandato delete svc para suprimir el servicio, es posible que tenga que eliminar los finalizadores para eliminar completamente el servicio. Ejecute el siguiente comando para eliminar los finalizadores en el servicio:

    oc get svc -n openshift-ingress router-default -o=json | jq '.metadata.finalizers = null' | kubectl apply -f -
    
  3. Verifique que el nuevo equilibrador de carga de VPC que expone el controlador de Ingress tenga un Estado de provisión active y un Estado operativo online. Verifique también que ahora la lista de Subredes incluye subredes para cada zona del clúster.

    ibmcloud is load-balancers
    

    En la salida, busque el nombre del equilibrador de carga de VPC que empieza por 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. Para el servicio router-default, copie el nombre de host asignado por el nuevo equilibrador de carga de VPC en el campo EXTERNAL-IP.

    oc get svc -n openshift-ingress
    

    Salida de ejemplo

    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. Obtenga el subdominio de Ingress para el clúster.

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

    Salida de ejemplo

    Ingress Subdomain:              mycluster-35366fb2d3d90fd50548180f69e7d12a-0000.us-south.containers.appdomain.cloud
    
  6. Actualice el registro DNS del subdominio de Ingress para que utilice el nuevo nombre de host del equilibrador de carga de VPC.

    ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname>
    
  7. Verifique que el registro DNS del subdominio de Ingress se haya actualizado para incluir el nuevo nombre de host del equilibrador de carga de VPC del controlador de Ingress.

    ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>
    

    Salida de ejemplo

    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