Clusters VPC : Pourquoi l'équilibreur de charge VPC pour le contrôleur Ingress ne route-t-il que vers une seule zone ?

Cloud privé virtuel

Vous créez un cluster VPC multizone. Toutefois, lorsque vous exécutez ibmcloud is load-balancers pour rechercher l'équilibreur de charge VPC qui expose le contrôleur Ingress, le sous-réseau VPC pour une seule zone de votre cluster est répertorié à la place des sous-réseaux pour toutes les zones de votre cluster. Dans la sortie, recherchez le nom de l'équilibreur de charge VPC qui commence par 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

Lorsque vous créez un cluster Red Hat OpenShift sur une infrastructure VPC dans le CLI, le cluster est initialement créé avec des nœuds de travail dans une seule zone. Pour que le cluster devienne un cluster multizone, vous ajoutez ensuite manuellement des zones à vos pools de noeuds worker avec la commande ibmcloud oc zone add vpc-gen2. Actuellement, lorsque vous ajoutez des zones à votre cluster, le contrôleur Ingress n'est pas mis à jour avec les sous-réseaux VPC pour les nouvelles zones et n'achemine pas les demandes vers les applications dans les nouvelles zones.

Redémarrez le contrôleur Ingress pour qu'un nouvel équilibreur de charge VPC soit créé, qui enregistre le contrôleur Ingress derrière un nom d'hôte et achemine le trafic vers le contrôleur Ingress. Mettez ensuite à jour votre sous-domaine Ingress pour qu'il utilise le nouveau nom de l'équilibreur de charge VPC.

  1. Exécutez la commande suivante pour rechercher l'équilibreur de charge VPC qui expose le contrôleur Ingress. Dans la sortie, recherchez le nom d'équilibreur de charge VPC qui commence par kube-crtmgr-<cluster_ID>.

    ibmcloud is load-balancers
    

    Exemple de sortie

    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. Supprimez le service router-default et attendez qu'il soit automatiquement recréez-le.

    oc delete svc router-default -n openshift-ingress
    

    Après avoir exécuté la commande delete svc pour supprimer le service, vous devrez peut-être supprimer les finaliseurs pour supprimer complètement le service. Exécutez la commande suivante pour supprimer les finaliseurs du service :

    oc get svc -n openshift-ingress router-default -o=json | jq '.metadata.finalizers = null' | kubectl apply -f -
    
  3. Vérifiez que le nouvel équilibreur de charge VPC qui expose le contrôleur Ingress possède Statut de la disposition de active et Statut d'exploitation de online. Vérifiez également que la liste des sous-réseaux comprend désormais des sous-réseaux pour chaque zone de votre cluster.

    ibmcloud is load-balancers
    

    Dans la sortie, recherchez le nom d'équilibreur de charge VPC qui commence par 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. Pour le service router-default, copiez le nom d'hôte attribué par le nouvel équilibreur de charge VPC dans la zone EXTERNAL-IP.

    oc get svc -n openshift-ingress
    

    Exemple de sortie

    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. Obtenez le sous-domaine Ingress correspondant à votre cluster.

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

    Exemple de sortie

    Ingress Subdomain:              mycluster-35366fb2d3d90fd50548180f69e7d12a-0000.us-south.containers.appdomain.cloud
    
  6. Mettez à jour votre enregistrement DNS de sous-domaine Ingress pour qu'il utilise le nom d'hôte du nouvel équilibreur de charge VPC.

    ibmcloud oc nlb-dns replace --cluster <cluster_name_or_ID> --nlb-subdomain <Ingress_subdomain> --lb-host <vpc_lb_hostname>
    
  7. Vérifiez que l'enregistrement DNS du sous-domaine d'entrée est mis à jour pour inclure le nouveau nom d'hôte de l'équilibreur de charge VPC pour votre contrôleur Ingress.

    ibmcloud oc nlb-dns ls -c <cluster_name_or_ID>
    

    Exemple de sortie

    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