Pubblicare le app con Ingress
Rendi pubbliche più app nel tuo cluster Red Hat® OpenShift® on IBM Cloud® creando risorse Ingress gestite dal controller Ingress.
Prerequisiti
Prima di iniziare a utilizzare Ingress, controlla i seguenti prerequisiti.
- La configurazione di Ingress richiede i seguenti ruoli IBM Cloud IAM:
- Ruolo di accesso alla piattaforma di amministrazione per il cluster in IBM Cloud Kubernetes Service.
- Ruolo di accesso al servizio Manager in tutti i progetti IBM Cloud Kubernetes Service (Red Hat OpenShift ).
- Se una zona smette di funzionare, potresti riscontrare interruzioni intermittenti nelle richieste alle app esposte dal controller Ingress in quella zona.
- Per garantire l'alta disponibilità, si consigliano almeno due nodi di lavoro per ogni zona.
- Cluster VPC: Consenti alle richieste di traffico instradate da Ingress di raggiungere le porte dei nodi sui tuoi nodi di lavoro. Per ulteriori informazioni, vedere Comprendere la rete VPC sicura per impostazione predefinita del cluster e Creare e gestire i gruppi di sicurezza VPC.
- Cluster multizona VPC: se hai creato un cluster nella CLI e successivamente hai aggiunto manualmente le zone ai tuoi pool di nodi di lavoro con il comando
ibmcloud oc zone add vpc-gen2, devi aggiornare il programma di bilanciamento del carico del VPC che espone il controller Ingress per includere le sottoreti per tutte le zone del cluster. - Cluster classici: abilita una VRF (Virtual Router Function) per il tuo account dell'infrastruttura IBM Cloud. Per abilitare VRF, consultare Abilitazione VRF.
Per controllare se una VRF è già abilitata, utilizza il comando
ibmcloud account show. Se non puoi o non vuoi abilitare VRF, abilita VLAN spanning. Quando lo spanning della VLAN o VRF sono abilitati, il controller Ingress può instradare i pacchetti alle varie sottoreti nell'account.
Esporre pubblicamente le applicazioni nei cluster con un endpoint del servizio cloud pubblico
Gruppi classici Cloud privato virtuale
Se il cluster è stato creato su un'infrastruttura classica, oppure se è stato creato su un'infrastruttura VPC e al momento della creazione è stato abilitato l'endpoint del servizio cloud pubblico, è possibile utilizzare il controller Ingress pubblico predefinito per rendere accessibili le applicazioni presenti nel cluster e consentire loro di ricevere richieste provenienti dalla rete pubblica.
Prima di cominciare:
- Esamina i prerequisiti Ingress.
- Accedi al tuo cluster Red Hat OpenShift.
Passo 1: distribuisci le applicazioni e crea i servizi dell'applicazione.
Inizia distribuendo le tue applicazioni e creando i servizi Kubernetes per esporle.
-
Distribuisci la tua applicazione al cluster. Assicurati di aggiungere un'etichetta alla tua distribuzione nella sezione dei metadati del tuo file di configurazione, ad esempio
app: code. Questa etichetta è necessaria per identificare tutti i pod in cui viene eseguita la tua app, in modo che tali pod rientrino nel bilanciamento del carico di Ingress. -
Per ogni distribuzione di applicazione che vuoi esporre, crea un servizio
ClusterIPKubernetes. La tua applicazione deve essere esposta da un servizio Kubernetes per essere inclusa nel bilanciamento del carico Ingress.
oc expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Passaggio 2: Configurare la terminazione dell' TLS e con i certificati TLS e i segreti Kubernetes
Il certificato " TLS " deve essere memorizzato come segreto " Kubernetes " in ogni namespace in cui sono presenti le tue app.
-
Per utilizzare il dominio Ingress gestito da IBM, consultare la sezione " Configurazione dei segreti TLS per il sottodominio Ingress fornito da IBM ".
-
Per utilizzare un dominio creato autonomamente, ad esempio un dominio registrato presso un provider esterno, consultare la pagina Configurazione dei dati di access TLS i per i sottodomini personalizzati.
Passo 3: Crea la risorsa Ingress
Le risorse Ingress definiscono le regole di instradamento che il controller Ingress utilizza per instradare il traffico al tuo servizio dell'applicazione.
-
Definisci un file di configurazione della risorsa Ingress che utilizza il dominio fornito da IBM o il tuo dominio personalizzato per instradare il traffico di rete in entrata ai servizi che hai creato in precedenza.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myingressresource spec: tls: - hosts: - <domain> secretName: <secret_name> rules: - host: <domain> http: paths: - path: /<app1_path> pathType: Prefix backend: service: name: test port: number: 80 - path: /<app2_path> backend: service: name: <app2_service> port: number: 80tls- Se desideri utilizzare TLS, includi questa sezione TLS nella tua risorsa. Sostituisci
<domain>con il tuo sottodominio. Non utilizzare*come host né lasciare vuota la proprietà host per evitare errori durante la creazione dell'Ingress. Sostituisci<tls_secret_name>con il segreto che hai creato in precedenza e che contiene il certificato e la chiave TLS per un dominio personalizzato, oppure con il segreto TLS generato automaticamente per un sottodominio fornito da IBM. host- Sostituisci
<domain>con il sottodominio Ingress fornito da IBM o con il tuo dominio personalizzato. Se il tuo cluster ha più progetti in cui sono esposte le applicazioni, è richiesta una risorsa Ingress per ogni progetto. Puoi utilizzare lo stesso dominio secondario in ciascuna risorsa oppure domini secondari differenti in ciascuna risorsa. Ad esempio, se si utilizza un dominio con caratteri jolly, è possibile aggiungere un sottodominio con caratteri jolly all'inizio del dominio, comesubdomain1.custom_domain.netosubdomain1.mycluster-<hash>-0000.us-south.containers.appdomain.cloud. Non utilizzare * come host né lasciare vuota la proprietà host per evitare errori durante la creazione di Ingress. path- Sostituisci "
<app_path>" con il percorso su cui è in ascolto la tua app. Il percorso viene aggiunto al dominio personalizzato o fornito da IBM per creare una rotta univoca alla tua applicazione. Quando immetti questa rotta in un browser web, il traffico di rete viene instradato al controller Ingress. Il controller Ingress individua il servizio associato e invia il traffico di rete a tale servizio. Il servizio inoltra quindi il traffico ai pod in cui è in esecuzione l'app. Molte app non ascoltano su un percorso specifico, ma utilizzano il percorso radice e una porta specifica. In questo caso, imposta il percorso principale come/e non specificare un percorso specifico per la tua app. Per "http://domain/", inserisci/come percorso. Per "http://domain/app1_path", inserisci/app1_pathcome percorso. pathType- Il metodo di corrispondenza dei percorsi URL. I valori supportati sono
ImplementationSpecific,ExactoPrefix. Per maggiori informazioni ed esempi su ciascun tipo di percorso, consultare la documentazione della community Kubernetes. name- Sostituisci
<app1_service>e<app2_service>, e così via, con il nome dei servizi che hai creato per rendere accessibili le tue app. Se le tue applicazioni sono esposte dai servizi in progetti differenti nel cluster, includi solo i servizi dell'applicazione presenti nello stesso progetto. Devi creare una risorsa Ingress per ogni progetto in cui hai delle applicazioni che vuoi esporre. port- La porta su cui è in ascolto il tuo servizio. Utilizza la stessa porta che hai definito quando hai creato il servizio Kubernetes per la tua applicazione.
-
Crea la risorsa Ingress per il tuo cluster. Assicurati che la risorsa venga distribuita nello stesso progetto dei nomi dei servizi dell'applicazione che hai specificato nella risorsa.
oc apply -f myingressresource.yaml -n <project> -
Verifica che la risorsa Ingress sia stata creata correttamente. Se i messaggi riportati negli eventi indicano un errore nella configurazione della risorsa, correggere i valori nel file della risorsa e riapplicare il file alla risorsa.
oc describe ingress myingressresource
La tua risorsa Ingress viene creata nello stesso progetto dei tuoi servizi dell'applicazione e le tue applicazioni vengono registrate con il controller Ingress.
Passo 4: Accedi alla tua applicazione da internet
In un browser web, immetti l'URL del servizio dell'applicazione a cui accedere.
https://<domain>/<app1_path>
Se hai esposto più applicazioni, accedi a queste applicazioni modificando il percorso accodato all'URL.
https://<domain>/<app2_path>
Se utilizzi un dominio jolly, accedi a tali applicazioni con i loro domini secondari.
http://<subdomain1>.<domain>/<app1_path>
http://<subdomain2>.<domain>/<app1_path>
Non riesci a connetterti alla tua applicazione tramite Ingress? Prova a risolvere i problemi di Ingress.
Esposizione pubblica delle applicazioni nei cluster VPC solo con un endpoint del servizio cloud privato
Cloud privato virtuale
Se il cluster è stato creato su un'infrastruttura VPC e, al momento della creazione, è stato abilitato solo l'endpoint del servizio cloud privato, per impostazione predefinita il cluster verrà creato con un solo controller Ingress privato. Per esporre pubblicamente le tue applicazioni, devi prima creare un controller Ingress pubblico. Successivamente, devi registrare il tuo controller Ingress con un dominio secondario e, facoltativamente, importare il tuo proprio certificato TLS.
Passo 1: distribuisci le applicazioni e crea i servizi dell'applicazione.
Inizia distribuendo le tue applicazioni e creando i servizi Kubernetes per esporle.
-
Distribuisci la tua applicazione al cluster. Assicurati di aggiungere un'etichetta alla tua distribuzione nella sezione dei metadati del tuo file di configurazione, ad esempio
app: code. Questa etichetta è necessaria per identificare tutti i pod in cui viene eseguita la tua app, in modo che tali pod rientrino nel bilanciamento del carico di Ingress. -
Per ogni distribuzione di applicazione che vuoi esporre, crea un servizio
ClusterIPKubernetes. La tua applicazione deve essere esposta da un servizio Kubernetes per essere inclusa nel bilanciamento del carico Ingress.
oc expose deploy <app_deployment_name> --name my-app-svc --port <app_port> -n <namespace>
Passaggio 2: Configurare la terminazione dell' TLS e con i certificati TLS e i segreti Kubernetes
Il certificato " TLS " deve essere memorizzato come segreto " Kubernetes " in ogni namespace in cui sono presenti le tue app.
TLS Suggerimenti per i domini personalizzati di Ingress
Per utilizzare un dominio creato autonomamente, ad esempio un dominio registrato presso un provider esterno, consultare la pagina Configurazione dei dati di access TLS i per i sottodomini personalizzati.
TLS Segreti per i domini Ingress gestiti d IBM
Segui i passaggi indicati per configurare i segreti di TLS per il dominio Ingress gestito da IBM.
- Elenca i domini secondari esistenti nel tuo cluster. Nella colonna " Sottodominio " dell'output, copia il sottodominio che presenta il valore più alto di "
000<n>".
In questo esempio di output, il sottodominioibmcloud oc nlb-dns ls --cluster CLUSTER_NAME_OR_IDmycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloudpresenta il valore più alto di000<n>, pari a0002.Subdomain Load Balancer Hostname Health Monitor SSL Cert Status SSL Cert Secret Name mycluster-a1b2cdef345678g9hi012j3kl4567890-0000.us-south.containers.appdomain.cloud ["1234abcd-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0000 mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud ["5678efgh-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0001 mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud ["9012ijkl-us-south.lb.appdomain.cloud"] None created mycluster-a1b2cdef345678g9hi012j3kl4567890-0002 - Nel sottodominio che hai copiato, modifica il valore
000<n>sostituendolo con000<n+1>. Ad esempio, il dominio secondariomycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloudviene modificato inmycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud. Il valoren+1indica il successivo dominio secondario consecutivo creato in questo cluster. Registrerai questo dominio secondario nei passi successivi. Quando si registra il dominio, viene generato automaticamente un codice segreto " TLS " per quel dominio. Il nome del segreto segue un formato troncato del dominio secondario, ad esempiomycluster-a1b2cdef345678g9hi012j3kl4567890-0003.
Passo 3: Crea e configura un controller Ingress pubblico
Dopo aver preparato il dominio e il certificato TLS, devi creare un controller Ingress pubblico e configurare il controller con il tuo dominio.
-
Crea un file di configurazione per un controller Ingress pubblico.
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: public-ingress-controller namespace: openshift-ingress-operator spec: replicas: 2 domain: <domain> endpointPublishingStrategy: loadBalancer: scope: External type: LoadBalancerService -
Crea la risorsa IngressController nel progetto
openshift-ingress-operatordel tuo cluster. Quando si crea IngressController, viene creato automaticamente un controllore pubblico di Ingress e distribuito nel progettoopenshift-ingressin base alle impostazioni di IngressController. Inoltre, viene creato un servizio controller Ingress per esporre il controllore Ingress.oc create -f public-ingress-controller.yaml -n openshift-ingress-operator -
Esegui il comando
oc gete trova il nome host VPC nel campo EXTERNAL IP del serviziorouter-public-ingress-controller. Nei cluster VPC, gli indirizzi IP esterni dei servizi non sono statici, ma sono associati a un nome host assegnato dal VPC.oc get svc router-public-ingress-controller -n openshift-ingressOutput di esempio
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-public-ingress-controller LoadBalancer 172.21.57.132 1234abcd-us-south.lb.appdomain.cloud 80/TCP,443/TCP,1940/TCP 3m -
Registra il nome host VPC del servizio con il dominio che hai scelto in precedenza.
- Dominio personalizzato: collabora con il tuo provider DNS per aggiungere il nome host VPC del servizio
router-public-ingress-controllercome CNAME associato al tuo dominio personalizzato. - Dominio fornito da IBM: crea una voce DNS per il nome host VPC del servizio
router-public-ingress-controller. Quando immetti il seguente comando, il dominio secondario che hai specificato nel filepublic-ingress-controller.yamlviene generato automaticamente e viene registrato con il serviziorouter-public-ingress-controller. Nel progetto in cui si specifica dove viene eseguita l'app viene generato automaticamente un segreto " TLS " per il dominio. Il nome del segreto segue un formato troncato del dominio secondario, ad esempiomycluster-a1b2cdef345678g9hi012j3kl4567890-0003.
ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <VPC_hostname> --secret-namespace <project> ``` - Dominio personalizzato: collabora con il tuo provider DNS per aggiungere il nome host VPC del servizio
Passo 4: crea la risorsa Ingress
Le risorse Ingress definiscono le regole di instradamento che il controller Ingress utilizza per instradare il traffico al tuo servizio dell'applicazione.
-
Definisci un file di configurazione della risorsa Ingress che utilizza il dominio fornito da IBM o il tuo dominio personalizzato per instradare il traffico di rete in entrata ai servizi che hai creato in precedenza.
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: myingressresource spec: tls: - hosts: - <subdomain> secretName: <custom_secret_name> rules: - host: <subdomain> http: paths: - path: /<app1_path> pathType: Prefix backend: service: name: <app1_service> port: number: 80 - path: /<app2_path> backend: service: name: <app2_service> port: number: 80tls-
- Se desideri utilizzare TLS, includi questa sezione TLS nella tua risorsa.
- Sostituisci
<domain>con il tuo sottodominio. Non utilizzare * come host né lasciare vuota la proprietà host per evitare errori durante la creazione di Ingress. - Sostituisci
<tls_secret_name>con il segreto che hai creato in precedenza e che contiene il certificato e la chiave TLS per un dominio personalizzato, oppure con il segreto TLS generato automaticamente per un sottodominio fornito da IBM.
host- Sostituisci
<domain>con il tuo sottodominio. Se il tuo cluster ha più progetti in cui sono esposte le applicazioni, è richiesta una risorsa Ingress per ogni progetto. Puoi utilizzare lo stesso dominio secondario in ciascuna risorsa oppure domini secondari differenti in ciascuna risorsa. Ad esempio, se utilizzi un dominio jolly, puoi aggiungere un dominio secondario jolly all'inizio del dominio, come ad esempiosubdomain1.custom_domain.net. Non utilizzare * come host né lasciare vuota la proprietà host per evitare errori durante la creazione di Ingress. path- Sostituisci
<app_path>con il percorso su cui è in ascolto la tua app. Il percorso viene aggiunto al dominio personalizzato o fornito da IBM per creare una rotta univoca alla tua applicazione. Quando immetti questa rotta in un browser web, il traffico di rete viene instradato al controller Ingress. Il controller Ingress individua il servizio associato e invia il traffico di rete a tale servizio. Il servizio inoltra quindi il traffico ai pod in cui è in esecuzione l'app. Molte app non ascoltano su un percorso specifico, ma utilizzano il percorso radice e una porta specifica. In questo caso, imposta il percorso principale come/e non specificare un percorso specifico per la tua app. Ad esempio, per utilizzarehttp://domain/, inserire/come percorso. Per "http://domain/app1_path", inserisci/app1_pathcome percorso. pathType- Il metodo di corrispondenza dei percorsi URL. I valori supportati sono
ImplementationSpecific,ExactoPrefix. Per maggiori informazioni ed esempi su ciascun tipo di percorso, consultare la documentazione della community Kubernetes. name- Sostituisci
<app1_service>e<app2_service>, e così via, con il nome dei servizi che hai creato per rendere accessibili le tue app. Se le tue applicazioni sono esposte dai servizi in progetti differenti nel cluster, includi solo i servizi dell'applicazione presenti nello stesso progetto. Devi creare una risorsa Ingress per ogni progetto in cui hai delle applicazioni che vuoi esporre. port- La porta su cui è in ascolto il tuo servizio. Utilizza la stessa porta che hai definito quando hai creato il servizio Kubernetes per la tua applicazione.
-
Crea la risorsa Ingress per il tuo cluster. Assicurati che la risorsa venga distribuita nello stesso progetto dei nomi dei servizi dell'applicazione che hai specificato nella risorsa.
oc apply -f myingressresource.yaml -n <project> -
Verifica che la risorsa Ingress sia stata creata correttamente. Se i messaggi riportati negli eventi indicano un errore nella configurazione della risorsa, correggere i valori nel file della risorsa e riapplicare il file alla risorsa.
oc describe ingress myingressresource
La tua risorsa Ingress viene creata nello stesso progetto dei tuoi servizi dell'applicazione e le tue applicazioni vengono registrate con il controller Ingress.
Passo 5: accedi alla tua applicazione da Internet
In un browser web, immetti l'URL del servizio dell'applicazione a cui accedere.
https://<domain>/<app1_path>
Se hai esposto più applicazioni, accedi a queste applicazioni modificando il percorso accodato all'URL.
https://<domain>/<app2_path>
Se utilizzi un dominio jolly, accedi a tali applicazioni con i loro domini secondari.
http://<subdomain1>.<domain>/<app1_path>
http://<subdomain2>.<domain>/<app1_path>
Non riesci a connetterti alla tua applicazione tramite Ingress? Prova a risolvere i problemi di Ingress.
Esposizione pubblica delle applicazioni esterne al tuo cluster
Esponi le applicazioni all'esterno del tuo cluster al pubblico includendole nel programma di bilanciamento del carico Ingress pubblico. Le richieste pubbliche in entrata sul dominio fornito da IBM o sul tuo dominio personalizzato vengono inoltrate automaticamente all'applicazione esterna.
Prima di iniziare, assicurati che l'applicazione esterna che desideri includere nel bilanciamento del carico del cluster sia accessibile tramite un indirizzo IP pubblico.
Per rendere pubbliche le app che si trovano al di fuori del proprio cluster, seguire questi passaggi.
-
Definire un file di configurazione del servizio " Kubernetes " per l'app resa disponibile dal controller Ingress. Questo servizio inoltra le chiamate in entrata a un endpoint esterno che crei nei passi successivi.
apiVersion: v1 kind: Service metadata: name: myexternalservice spec: ports: - protocol: TCP port: <app_port> -
Crea il servizio nel tuo cluster.
oc apply -f myexternalservice.yaml -
Definisci un file di configurazione dell'endpoint esterno. Includi tutti gli indirizzi IP pubblici e le porte che puoi utilizzare per accedere alla tua applicazione esterna. Si noti che il nome dell'endpoint deve corrispondere al nome del servizio creato nel passaggio precedente, ad esempio
myexternalservice.kind: Endpoints apiVersion: v1 metadata: name: myexternalservice subsets: - addresses: - ip: <external_IP1> - ip: <external_IP2> ports: - port: <external_port>name- Sostituisci "
<myexternalendpoint>" con il nome del servizio " Kubernetes " che hai creato in precedenza. ip- Sostituisci
<external_IP>con gli indirizzi IP pubblici per collegarti alla tua app esterna. port- Sostituisci
<external_port>con la porta su cui è in ascolto la tua app esterna.
-
Crea l'endpoint nel tuo cluster.
oc apply -f myexternalendpoint.yaml -
Continua con il secondo passo in Esposizione pubblica delle app nei cluster VPC solo con un endpoint del servizio cloud privato o Esposizione pubblica delle applicazioni nei cluster con un endpoint del servizio cloud pubblico.