Cluster classici: perché il controller Ingress non viene distribuito in una zona?

Provider e versione dell'infrastruttura:

  • Classic
  • Red Hat OpenShift versione 4

Quando si esegue il comando oc get svc -n openshift-ingress``, una o più zone non dispongono di un controller Ingress pubblico.

  • Non viene distribuito alcun servizio router-default oppure il servizio potrebbe non avere un indirizzo IP esterno assegnato. Ad esempio, in un cluster a zona singola, potresti vedere quanto segue:
    NAME                                         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
    router-default                               LoadBalancer   172.21.47.119   <none>         80:32637/TCP,443:31719/TCP   26m
    router-internal-default                      ClusterIP      172.21.51.30    <none>         80/TCP,443/TCP,1936/TCP      26m
    
  • Se si dispone di un cluster multizona, una delle zone non dispone del servizio Ingress Controller. Ad esempio, in un cluster multizona con nodi di lavoro su dal10, dal12 e dal13, è possibile che venga visualizzato un servizio router-default per dal10 e un servizio router-dal12 per dal12, ma nessun servizio router-dal13 per dal13. Si noti che il servizio controller Ingress nella prima zona in cui sono presenti i nodi di lavoro è sempre denominato router-default, mentre i servizi controller Ingress nelle zone aggiunte successivamente al cluster hanno nomi del tipo router-dal12. Potresti anche notare che una zona non dispone di alcun servizio di controller Ingress, mentre un’altra ne ha due o più.
    NAME                                         TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
    router-default                               LoadBalancer   172.21.47.119   169.XX.XX.XX   80:32637/TCP,443:31719/TCP   26m
    router-dal12                                 LoadBalancer   172.21.47.119   169.XX.XX.XX   80:32637/TCP,443:31719/TCP   26m
    router-internal-default                      ClusterIP      172.21.51.30    <none>         80/TCP,443/TCP,1936/TCP      26m
    

I servizi router potrebbero non essere distribuiti per uno dei seguenti motivi:

  • Se non sono stati distribuiti servizi di controller Ingress o se a tali servizi non è stato assegnato un indirizzo IP esterno: nei cluster standard, la prima volta che si crea un cluster in una zona, nel proprio account dell’infrastruttura IBM Cloud vengono automaticamente configurate una VLAN pubblica e una VLAN privata in quella zona. In quella zona, viene richiesta una sottorete pubblica portatile sulla VLAN pubblica specificata dall'utente e una sottorete privata portatile sulla VLAN privata specificata dall'utente. Per Red Hat OpenShift on IBM Cloud, le VLAN hanno un limite di 40 sottoreti. Se la VLAN del cluster in una zona ha già raggiunto tale limite, il sottodominio di ingresso non viene configurato e nemmeno il controller di ingresso pubblico predefinito. Per visualizzare il numero di sottoreti presenti in una VLAN, dalla console dell'infrastruttura IBM Cloud, selezionare Rete > Gestione IP > VLAN. Fai clic sul Numero VLAN della VLAN che hai usato per creare il tuo cluster. Esamina la sezione Sottoreti per vedere se ci sono 40 o più sottoreti.

  • Se in una zona non è presente alcun servizio di controller Ingress: una volta creati, i servizi di controller Ingress vengono automaticamente distribuiti tra le zone del cluster. Se la rete della prima zona con cui è stato creato il cluster non è pronta al momento della creazione dei servizi del controller Ingress, il servizio del controller Ingress relativo a quella zona potrebbe essere collocato in una zona diversa. In una zona potrebbero essere creati due servizi di controller Ingress, mentre nella zona iniziale non viene creato alcun servizio di controller Ingress.

Risolvi i problemi VLAN per i servizi del controller Ingress che non hanno un indirizzo IP o i problemi del servizio del controller Ingress multizona per le zone senza servizi del controller Ingress.

Risoluzione dei problemi VLAN

Per risolvere i problemi della VLAN per i servizi del controllore Ingress che non hanno un indirizzo IP:

Opzione 1: Se hai bisogno di una nuova VLAN, richiedila contattando l'assistenza di IBM Cloud. Quindi crea un cluster che utilizzi questa nuova VLAN.

Opzione 2: Se disponi di un'altra VLAN disponibile, puoi configurare lo spanning di VLAN nel tuo cluster esistente. Per verificare se lo spanning VLAN è già abilitato, utilizzare il comando ibmcloud ks vlan spanning get --region REGION . Puoi quindi aggiungere nuovi nodi di lavoro al cluster che utilizzano l'altra VLAN con sottoreti disponibili. Creare almeno due nodi di lavoro per ogni zona. Ora gli indirizzi IP sono disponibili, in modo che i controller Ingress possano essere distribuiti automaticamente.

Opzione 3: Se non stai utilizzando tutte le sottoreti della VLAN, puoi riutilizzare le sottoreti della VLAN aggiungendole al tuo cluster.

  1. Controlla che la sottorete che desideri utilizzare sia disponibile. L'account dell'infrastruttura che utilizzi potrebbe essere condiviso tra più account IBM Cloud. In questo caso, anche se esegui il comando ibmcloud oc subnets per vedere le sottoreti con cluster associati, potrai vedere le informazioni solo per i tuoi cluster. Controlla con il proprietario dell'account dell'infrastruttura per assicurarti che le sottoreti siano disponibili e non in uso da parte di un altro account o team.

  2. Utilizza il comando ibmcloud ks cluster subnet add per rendere disponibile per il tuo cluster una sottorete esistente.

  3. Verifica che la sottorete sia stata creata e aggiunta correttamente al tuo cluster. Il CIDR della sottorete viene elencato nella sezione Subnet VLANs.

    ibmcloud ks cluster get --cluster CLUSTER_NAME --show-resources
    

    Nell'output di esempio, è stata aggiunta una seconda sottorete alla VLAN pubblica 2234945:

    Subnet VLANs
    VLAN ID   Subnet CIDR          Public   User-managed
    2234947   10.xxx.xx.xxx/29     false    false
    2234945   169.xx.xxx.xxx/29    true     false
    2234945   169.xx.xxx.xxx/29    true     false
    
  4. Verifica che gli indirizzi IP portabili della sottorete che hai aggiunto vengano utilizzati per il controller Ingress nel tuo cluster. Potrebbero essere necessari alcuni minuti prima che i servizi inizino a utilizzare gli indirizzi IP portabili della nuova sottorete.

    • Assenza del sottodominio Ingress : eseguire il comando ibmcloud ks cluster get --cluster CLUSTER per verificare che il sottodominio Ingress sia stato inserito.
    • Un controller Ingress non viene distribuito in una zona : eseguire il comando oc get svc -n openshift-ingress per verificare che il controller Ingress mancante sia distribuito con un indirizzo IP esterno.

Risoluzione dei problemi di distribuzione del servizio del controller Ingress multizona

Creare un servizio controller di Ingress nella zona in cui non è stato distribuito un servizio controller di Ingress. Se inizialmente è stato creato un servizio controller Ingress duplicato in una zona diversa, non eliminare tale servizio controller Ingress.

  1. Creare un file YAML per un servizio controller Ingress nella zona in cui non è stato distribuito un servizio controller Ingress. Denominare il servizio controller Ingress router-<zone>.

     apiVersion: v1
     kind: Service
     metadata:
       annotations:
         service.kubernetes.io/ibm-load-balancer-cloud-provider-ip-type: public
       finalizers:
       - service.kubernetes.io/load-balancer-cleanup
       labels:
         app: router
         ingresscontroller.operator.openshift.io/owning-ingresscontroller: default
         router: router-default
       name: router-<zone>
       namespace: openshift-ingress
     spec:
       externalTrafficPolicy: Cluster
       selector:
         ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
       sessionAffinity: None
       type: LoadBalancer
    
  2. Crea il servizio del controller Ingress nel tuo cluster.

    oc create -f router-<zone>.yaml
    
  3. Verificare che il servizio del controller Ingress sia stato creato nella zona corretta. Nell'output, ottieni l'indirizzo EXTERNAL IP.

    oc get svc router-<zone> -n openshift-ingress
    

    Output di esempio

    NAME                         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                      AGE
    router-dal12                 LoadBalancer   172.21.57.132    169.XX.XX.XX    80/TCP,443/TCP,1940/TCP      3m
    
  4. Ottieni il sottodominio del tuo controller Ingress predefinito. Nell'output, cerca il sottodominio con il formato <cluster_name>-<random_hash>-0000.<region>.containers.appdomain.cloud.

    ibmcloud ks nlb-dns ls -c CLUSTER_NAME_OR_ID
    
  5. Registra l'indirizzo IP del servizio controller Ingress con il dominio secondario del tuo controller Ingress.

    ibmcloud ks nlb-dns add -c CLUSTER_NAME_OR_ID --ip ROUTER_SVC_IP --nlb-host ROUTER_SUBDOMAIN