Informazioni su Ingress

Ingress è un servizio che bilancia i carichi di lavoro del traffico di rete nel tuo cluster inoltrando le richieste pubbliche o private alle tue applicazioni. Puoi utilizzare Ingress per esporre più servizi dell'applicazione ad una rete pubblica o privata utilizzando un dominio pubblico o privato univoco.

Nel tuo cluster, il controller Ingress “ Red Hat OpenShift ” è un bilanciatore di carico di livello 7 che implementa un controller Ingress “ HAProxy ”. Un servizio " LoadBalancer " di livello 4 rende accessibile il controller Ingress, consentendogli di ricevere le richieste esterne in arrivo nel cluster. Il controller Ingress inoltra quindi le richieste ai pod delle applicazioni presenti nel cluster in base alle caratteristiche distintive del protocollo di livello 7, come le intestazioni.

Quali sono i componenti di Ingress?

Nei cluster che eseguono Red Hat OpenShift la versione 4, Ingress è costituito da tre componenti: un operatore Ingress, un controller Ingress e risorse Route.

operatore ingress

L 'operatore Red Hat OpenShift Ingress implementa regole di routing che vengono applicate a tutto il traffico in entrata per le app nel cluster.

I controller Ingress sono gestiti dall'operatore Ingress. Durante la creazione del cluster, il controller Ingress predefinito viene registrato con il sottodominio Ingress predefinito del cluster nel formato <cluster_name>-<globally_unique_account_HASH>-0000.<region>.containers.appdomain.cloud. Quando registri la tua app su questo sottodominio creando una risorsa Route, il controller Ingress garantisce che le richieste indirizzate alla tua app tramite questo sottodominio vengano correttamente inoltrate ai pod della tua app. Per visualizzare il controller Ingress predefinito nel tuo cluster, esegui oc describe ingresscontroller/default -n openshift-ingress-operator.

Se vuoi registrare la tua applicazione con un dominio differente, puoi invece creare un controller Ingress personalizzato che implementa le regole di instradamento per un dominio personalizzato.

Controller Ingress

Viene creato un controller Ingress Red Hat OpenShift basato su HAProxy One per ciascuno IngressController, e un servizio controller Ingress in ciascuna zona in cui sono presenti nodi di lavoro.

L'operatore Ingress configura il controller Ingress con lo stesso dominio specificato nel file IngressController. Il controller Ingress è in ascolto delle richieste di servizio in entrata HTTP, HTTPS o TCP provenienti da quel dominio. Il componente di bilanciamento del carico del controller Ingress inoltra quindi le richieste ai pod relativi a quella specifica applicazione, esclusivamente in base alle regole definite nella risorsa Route e implementate dal controller Ingress.

Se hai un cluster multizona, un controller Ingress ad alta disponibilità viene distribuito al tuo cluster e configurato con un programma di bilanciamento del carico VPC multizona. Sono necessari due nodi di lavoro per ogni zona, affinché le due repliche del controller Ingress possano essere distribuite e aggiornate correttamente.

Se crei manualmente un controller Ingress, il controller Ingress non viene registrato automaticamente con il dominio secondario Ingress o con un'applicazione nel tuo cluster.

Cluster classici: indirizzi IP controller Ingress

Per individuare gli indirizzi IP dei servizi predefiniti del controller Ingress, esegui il comando oc get svc -n openshift-ingress e cerca il campo “EXTERNAL IP ”. Se si dispone di un cluster multizona, tenere presente che il servizio del controller Ingress nella prima zona in cui sono presenti i nodi worker è sempre denominato router-default, mentre i servizi del controller Ingress nelle zone aggiunte successivamente al cluster hanno nomi del tipo router-dal12.

Cluster VPC: nomi host del controller Ingress

Quando si crea un cluster VPC, all’interno della propria VPC vengono creati automaticamente, al di fuori del cluster, un bilanciatore di carico VPC multizona pubblico e uno privato. Il programma di bilanciamento del carico VPC pubblico crea un nome host per registrare il controller Ingress pubblico e il programma di bilanciamento del carico VPC privato crea un nome host per registrare il controller Ingress privato. Nei cluster VPC, ai controller Ingress viene assegnato un nome host poiché gli indirizzi IP esterni non sono statici e potrebbero cambiare nel tempo. Si noti che il nome host di questo controller Ingress è diverso dal sottodominio Ingress predefinito del proprio cluster.

Il sottodominio Ingress del tuo cluster viene collegato automaticamente al nome host del bilanciatore di carico VPC del tuo controller Ingress pubblico. Si noti che il sottodominio Ingress del proprio cluster, del tipo <cluster_name>.<hash>-0000.<region>.containers.appdomain.cloud, è diverso dal nome host assegnato dal bilanciatore di carico VPC al proprio controller Ingress pubblico, del tipo 01ab23cd-<region>.lb.appdomain.cloud. Il dominio secondario Ingress è l'instradamento pubblico attraverso il quale gli utenti accedono alla tua applicazione da internet e può essere configurato per utilizzare la terminazione TLS. Il nome host assegnato per il tuo controller Ingress pubblico è ciò che il programma di bilanciamento del carico VPC utilizza per inoltrare il traffico al servizio controller Ingress.

È possibile individuare il nome host assegnato al controller Ingress pubblico e quello assegnato al controller Ingress privato eseguendo il comando oc get svc -n openshift-ingress e individuando il campo EXTERNAL IP.

Nella dashboard dell'infrastruttura VPC, il bilanciatore di carico VPC segnala come funzionanti solo i due nodi di lavoro che eseguono i pod di replica del controller Ingress, poiché tali nodi di lavoro sono configurati come listener per il bilanciatore di carico VPC. Sebbene solo i nodi di lavoro degli listener risultino attivi, il pool di nodi di lavoro sottostanti agli listener viene mantenuto aggiornato dall' Red Hat OpenShift on IBM Cloud, in modo che tutti i nodi di lavoro del cluster possano comunque ricevere richieste dal bilanciatore di carico VPC.

Risorsa instradamento

Per rendere accessibile un'app tramite Route, è necessario creare un servizio Kubernetes per l'app e registrare tale servizio presso il controller Ingress definendo una risorsa Route. La risorsa Ingress è una risorsa di tipo " Red Hat OpenShift " che definisce le regole per l'instradamento delle richieste in entrata destinate alle app.

La risorsa Route specifica inoltre il percorso dei servizi della tua app. I percorsi ai tuoi servizi dell'applicazione sono accodati al dominio secondario Ingress dl tuo cluster per formare un URL applicazione univoco come mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud/myapp1.

È necessaria una risorsa Route per ogni progetto in cui sono presenti app che si desidera rendere accessibili.

  • Se le app presenti nel cluster fanno tutte parte dello stesso progetto, è necessario creare una risorsa Route per definire le regole di instradamento relative alle app che si desidera rendere accessibili. Nota che, se vuoi utilizzare dei domini differenti per le applicazioni nello stesso progetto, puoi creare una singola risorsa per ogni dominio.
  • Se le app presenti nel cluster appartengono a progetti diversi, è necessario creare una risorsa Route per ciascun progetto al fine di definire le regole di instradamento dell'app.

Per ulteriori informazioni, vedi Pianificazione della rete per progetti singoli o multipli.

Se desideri personalizzare le regole di routing per la tua app, puoi utilizzare le annotazioni " HAProxy " specifiche per ogni route, che gestiscono il traffico della tua app. Queste annotazioni supportate sono nel formato haproxy.router.openshift.io/<annotation> o router.openshift.io/<annotation>. Si noti che le annotazioni " IBM Cloud Kubernetes Service " (ingress.bluemix.net/<annotation>) e " NGINX " (nginx.ingress.kubernetes.io/<annotation>) non sono supportate per il controller Ingress né per la risorsa Route nella versione 4 di Red Hat OpenShift.

In che modo una richiesta arriva alla mia app in un cluster classico?

Cluster a zona singola

Il seguente diagramma mostra in che modo Ingress indirizza le comunicazioni da Internet a un'applicazione in un cluster a zona singola classico.

Esporre un'app in un cluster a zona singola utilizzando
Esporre un'app in un cluster a zona singola utilizzando

  1. Un utente invia una richiesta alla tua applicazione accedendo all'URL dell'applicazione. Questo URL è il sottodominio Ingress del tuo cluster, seguito dal percorso della risorsa Ingress relativa alla tua app esposta, ad esempio mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp.

  2. Un servizio DNS risolve il sottodominio URL nell'indirizzo IP pubblico portabile del bilanciatore di carico che espone il controller Ingress nel proprio cluster.

  3. In base all'indirizzo IP risolto, il client invia la richiesta al servizio del controller Ingress.

  4. Il controller Ingress verifica le regole di instradamento da esso implementate alla ricerca di una regola di instradamento per il percorso myapp. Se viene individuata una regola corrispondente, la richiesta viene inoltrata tramite proxy, in base alle regole definite nel controller Ingress e nella risorsa Route, al pod in cui è distribuita l'applicazione. L'indirizzo IP di origine del pacchetto viene modificato in modo da corrispondere all'indirizzo IP del nodo worker su cui è in esecuzione il pod del controller Ingress. Se nel cluster sono distribuite più istanze dell'applicazione, il controller Ingress distribuisce il carico delle richieste tra i pod dell'applicazione.

  5. Quando l'app restituisce un pacchetto di risposta, utilizza l'indirizzo IP del nodo worker su cui si trova il controller Ingress che ha inoltrato la richiesta. Il controller Ingress invia quindi il pacchetto di risposta al client.

Cluster multizona

Il seguente diagramma mostra in che modo Ingress indirizza le comunicazioni da Internet a un'applicazione in un cluster multizona classico.

Esporre un'app in un cluster multizona utilizzando
Esporre un'app in un cluster multizona utilizzando

  1. Un utente invia una richiesta alla tua applicazione accedendo all'URL dell'applicazione. Questo URL è il sottodominio Ingress del tuo cluster, seguito dal percorso della risorsa Ingress relativa alla tua app esposta, ad esempio mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp.

  2. Un servizio del sistema DNS risolve il sottodominio di instradamento nell'indirizzo IP pubblico flottante di un servizio di controller Ingress che è stato segnalato come funzionante dall'MZLB. L'MZLB verifica costantemente gli indirizzi IP pubblici portabili dei servizi che espongono il controller Ingress in ciascuna zona del cluster. Le richieste vengono gestite dai servizi del controller Ingress presenti in varie zone secondo un ciclo round-robin.

  3. Il client invia la richiesta all'indirizzo IP del servizio che espone il controller Ingress.

  4. Il controller Ingress verifica le regole di instradamento da esso implementate per il percorso myapp. Se viene individuata una regola corrispondente, la richiesta viene inoltrata tramite proxy, in base alle regole definite nel file IngressController e nella risorsa Route, al pod in cui è distribuita l'applicazione. L'indirizzo IP di origine del pacchetto viene modificato in modo da corrispondere all'indirizzo IP del nodo worker su cui è in esecuzione il pod del controller Ingress. Se nel cluster sono distribuite più istanze dell'applicazione, il servizio del controller Ingress inoltra le richieste tra i pod dell'applicazione in tutte le zone.

  5. Quando l'app restituisce un pacchetto di risposta, utilizza l'indirizzo IP del nodo worker su cui è in esecuzione il servizio del controller Ingress che ha inoltrato la richiesta. Il controller Ingress invia quindi il pacchetto di risposta al client.

In che modo una richiesta arriva alla mia app in un cluster VPC?

Cluster VPC con un endpoint di servizio nel cloud pubblico

Quando si crea un cluster VPC multizona con l'endpoint del servizio cloud pubblico abilitato, viene creato per impostazione predefinita un controller Ingress pubblico. Il seguente diagramma mostra in che modo Ingress indirizza le comunicazioni da Internet a un'applicazione in un cluster multizona VPC.

Esporre pubblicamente un'app in un cluster VPC multizona utilizzando
pubblicamente un'app in un cluster VPC multizona utilizzando

  1. Un utente invia una richiesta alla tua applicazione accedendo all'URL dell'applicazione. Questo URL è il sottodominio Ingress del cluster dell'app esposta, a cui è stato aggiunto il percorso della risorsa Ingress, ad esempio mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp.

  2. Un servizio DNS risolve il sottodominio "route" nel nome host del bilanciatore di carico VPC assegnato al controller Ingress. Nei cluster VPC, gli indirizzi IP esterni sono fluttuanti e vengono gestiti tramite un nome host assegnato dal VPC.

  3. Il programma di bilanciamento del carico VPC risolve il nome host VPC in un indirizzo IP disponibile in una zona per il controller Ingress che è stato segnalato come integro. Il bilanciatore di carico VPC verifica costantemente gli indirizzi IP esterni del controller Ingress in ciascuna zona del cluster.

  4. In base all'indirizzo IP identificato, il bilanciatore di carico VPC invia la richiesta a un controller Ingress.

  5. Il controller Ingress verifica le regole di instradamento da esso implementate per il percorso myapp. Se viene individuata una regola corrispondente, la richiesta viene inoltrata tramite proxy, in base alle regole definite nel file IngressController e nella risorsa Route, al pod in cui è distribuita l'applicazione. L'indirizzo IP di origine del pacchetto viene modificato in modo da corrispondere all'indirizzo IP del nodo worker su cui è in esecuzione il pod del controller Ingress. Se nel cluster sono distribuite più istanze dell'applicazione, il controller Ingress bilancia il carico delle richieste tra i pod dell'applicazione in tutte le zone.

  6. Quando l'app restituisce un pacchetto di risposta, utilizza l'indirizzo IP del nodo worker su cui è in esecuzione il servizio del controller Ingress che ha inoltrato la richiesta. Il programma di bilanciamento del carico VPC invia quindi il pacchetto di risposta al client.

Cluster VPC con solo un endpoint del servizio cloud privato

Quando si crea un cluster VPC multizona utilizzando esclusivamente l'endpoint del servizio cloud privato, viene creato per impostazione predefinita un controller Ingress privato. Solo i client connessi alla tua rete VPC privata possono accedere alle applicazioni esposte da un controller Ingress privato. Il seguente diagramma mostra in che modo Ingress indirizza le comunicazioni dalle reti private a un'applicazione in un cluster multizona VPC.

Esporre privatamente un'app in un cluster VPC multizona utilizzando
privatamente un'app in un cluster VPC multizona utilizzando

  1. Un client connesso alla tua rete VPC privata invia una richiesta alla tua applicazione utilizzando l'URL dell'applicazione. Questo URL è il sottodominio Ingress del cluster dell'app esposta, a cui è stato aggiunto il percorso della risorsa Ingress, ad esempio mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp. Ad esempio, potresti utilizzare la VPN Virtual Private Cloud, IBM Cloud Transit Gateway o IBM Cloud Direct Link per consentire le richieste da una rete in loco, da un altro VPC o dall'infrastruttura classica IBM Cloud alle applicazioni che vengono eseguite nel tuo cluster.

  2. Un servizio DNS risolve il sottodominio "route" nell'hostname del bilanciatore di carico VPC assegnato ai servizi del controller Ingress. Nei cluster VPC, gli indirizzi IP privati dei servizi del controller Ingress sono fluttuanti e vengono gestiti tramite un nome host assegnato dalla VPC. Tieni presente che sebbene il record DNS per il dominio secondario di instradamento sia registrato nel sistema DNS pubblico, i server di risoluzione DNS sono raggiungibili dal VPC.

  3. Il bilanciatore di carico privato della VPC risolve il nome host della VPC in un indirizzo IP privato disponibile di un servizio di controller Ingress che è stato segnalato come funzionante. Il bilanciatore di carico VPC verifica costantemente gli indirizzi IP dei servizi che espongono il controller Ingress in ciascuna zona del cluster.

  4. In base all'indirizzo IP identificato, il bilanciatore di carico VPC invia la richiesta a un servizio di controller Ingress.

  5. Il controller Ingress verifica le regole di instradamento da esso implementate per il percorso myapp. Se viene individuata una regola corrispondente, la richiesta viene inoltrata tramite proxy, in base alle regole definite nel file IngressController e nella risorsa Route, al pod in cui è distribuita l'applicazione. L'indirizzo IP di origine del pacchetto viene modificato in modo da corrispondere all'indirizzo IP del nodo worker su cui è in esecuzione il pod del controller Ingress. Se nel cluster sono distribuite più istanze dell'applicazione, il controller Ingress bilancia il carico delle richieste tra i pod dell'applicazione in tutte le zone.

  6. Quando l'app restituisce un pacchetto di risposta, utilizza l'indirizzo IP del nodo worker su cui si trova il controller Ingress che ha inoltrato la richiesta del client. Il controller Ingress invia quindi il pacchetto di risposta al client tramite il bilanciatore di carico VPC.

Come posso personalizzare il routing?

Se desideri personalizzare le regole di routing per la tua app, puoi utilizzare le annotazioni " HAProxy " specifiche per ogni route, che gestiscono il traffico della tua app.

Queste annotazioni supportate sono nel formato haproxy.router.openshift.io/<annotation> o router.openshift.io/<annotation>.

IBM Cloud Kubernetes Service Le annotazioni (ingress.bluemix.net/<annotation>) e le annotazioni NGINX (nginx.ingress.kubernetes.io/<annotation>) non sono supportate per il controller Ingress né per la risorsa Route nella versione 4 di Red Hat OpenShift.

Per iniziare, vedi Personalizzazione di Ingress.

Come posso abilitare i certificati " TLS "?

Per bilanciare il carico delle connessioni in entrata HTTPS verso il tuo sottodominio, puoi configurare il controller Ingress in modo che decifri il traffico di rete e inoltri la richiesta decifrata alle applicazioni esposte nel tuo cluster.

Quando si configura il controller Ingress pubblico, si sceglie il dominio tramite il quale è possibile accedere alle proprie app. Se si utilizza il dominio fornito da IBM, ad esempio mycluster-<hash>-0000.us-south.containers.appdomain.cloud/myapp, è possibile utilizzare il certificato predefinito TLS creato per il sottodominio Ingress. Se si imposta un record CNAME per mappare un dominio personalizzato al dominio fornito da IBM, è possibile fornire il proprio certificato TLS per il dominio personalizzato.

Per ulteriori informazioni sui certificati TLS, vedere Gestione dei certificati e dei segreti TLS.