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-defaultoppure 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,dal12edal13, è possibile che venga visualizzato un serviziorouter-defaultperdal10e un serviziorouter-dal12perdal12, ma nessun serviziorouter-dal13perdal13. Si noti che il servizio controller Ingress nella prima zona in cui sono presenti i nodi di lavoro è sempre denominatorouter-default, mentre i servizi controller Ingress nelle zone aggiunte successivamente al cluster hanno nomi del tiporouter-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.
-
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 subnetsper 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. -
Utilizza il comando
ibmcloud ks cluster subnet addper rendere disponibile per il tuo cluster una sottorete esistente. -
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-resourcesNell'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 -
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 CLUSTERper 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-ingressper verificare che il controller Ingress mancante sia distribuito con un indirizzo IP esterno.
- Assenza del sottodominio Ingress : eseguire il comando
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.
-
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 -
Crea il servizio del controller Ingress nel tuo cluster.
oc create -f router-<zone>.yaml -
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-ingressOutput 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 -
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 -
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