Pubblicazione privata delle app con Ingress
Rendi accessibili in modo privato più applicazioni 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 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 privatamente le app 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 durante la creazione del cluster è stato abilitato l'endpoint del servizio cloud pubblico, per impostazione predefinita il cluster viene creato solo con un controller Ingress pubblico. Per esporre privatamente le tue applicazioni, devi prima creare un controller Ingress privato. 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 l'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 consigli per i domini personalizzati
Per configurare i dati di access TLS i relativi a un dominio creato autonomamente, ad esempio un dominio registrato presso un provider esterno, consulta la pagina Configurazione dei dati di access TLS i per i sottodomini personalizzati. Questi passaggi valgono sia per i cluster classici che per quelli VPC.
TLS Segreti per il dominio gestito da IBM
-
Cluster classici Per utilizzare il dominio Ingress gestito da IBM in un cluster classico, consultare la sezione "Configurazione dei segreti TLS per il sottodominio Ingress fornito da IBM ".
-
Cluster VPC Per utilizzare il dominio Ingress gestito da IBMin un cluster VPC, attieniti alla seguente procedura.
- 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 di "000<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 privato
Dopo aver preparato il dominio e il certificato TLS, devi creare un controller Ingress privato e configurare il controller con il tuo dominio.
- Crea un file di configurazione per un controller Ingress privato.
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: private-ingress-controller namespace: openshift-ingress-operator spec: #defaultCertificate: If you are using a custom domain, specify the domain certificate #name: custom-certs-default replicas: 2 domain: <domain> endpointPublishingStrategy: loadBalancer: scope: Internal type: LoadBalancerService - Crea la risorsa IngressController nel progetto
openshift-ingress-operatordel tuo cluster. Quando si crea IngressController, viene creato automaticamente un controllore privato di Ingress e distribuito nel progettoopenshift-ingressin base alle impostazioni IngressController impostate nel passaggio precedente. Inoltre, viene creato un servizio di controller Ingress per rendere accessibile il controller Ingress tramite un indirizzo IP (cluster classici) o un nome host VPC (cluster VPC).oc create -f private-ingress-controller.yaml -n openshift-ingress-operator - Esegui il comando
oc gete trova l'indirizzo IP o il nome host VPC nel campo EXTERNAL IP del serviziorouter-private-ingress-controller.
Esempio di output per i cluster classici.oc get svc router-private-ingress-controller -n openshift-ingress
Output di esempio per i cluster VPC:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-private-ingress-controller LoadBalancer 172.21.57.132 10.XX.XX.XX 80/TCP,443/TCP,1940/TCP 3mNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE router-private-ingress-controller LoadBalancer 172.21.57.132 1234abcd-us-south.lb.appdomain.cloud 80/TCP,443/TCP,1940/TCP 3m - Registra l'indirizzo IP esterno o il nome host VPC del servizio con il dominio che hai scelto in precedenza.
- Dominio personalizzato: collabora con il tuo provider DNS per aggiungere l'indirizzo IP esterno o il nome host VPC del servizio
router-private-ingress-controllercome record A (cluster classici) o come CNAME (cluster VPC) che viene associato al tuo dominio personalizzato. - Dominio fornito da IBM: crea una voce DNS per il nome host VPC del servizio
router-private-ingress-controller. Quando immetti il seguente comando, il dominio secondario che hai specificato nel fileprivate-ingress-controller.yamlviene generato automaticamente e viene registrato con il serviziorouter-private-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 l'indirizzo IP esterno o 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> backend: service: name: <app1_service> port: number: 80 - path: /<app2_path> backend: serivce: 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.
- Se desideri utilizzare TLS, includi questa sezione TLS nella tua risorsa. Sostituisci
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 esempio
subdomain1.custom_domain.net. - Non utilizzare
*come host né lasciare vuota la proprietà host per evitare errori durante la creazione dell'Ingress.
- Sostituisci
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'applicazione. Molte app non ascoltano su un percorso specifico, ma utilizzano il percorso radice e una porta specifica. In questo caso, imposta il percorso principale su/e non specificare un percorso specifico per la tua app. - Ad esempio, per utilizzare
http://domain/, immettere/come percorso. Per "http://domain/app1_path", inserisci/app1_pathcome percorso.
- Sostituisci
serviceName- 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. È necessario creare una risorsa Ingress per ogni progetto che contenga le app che si desidera rendere accessibili. servicePort- 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 dalla tua rete privata
-
Cluster classici: prima di accedere alla tua applicazione, assicurati di poter accedere a un servizio DNS. Per utilizzare il provider DNS esterno predefinito, è necessario configurare i nodi periferici con accesso pubblico e configurare un Virtual Router Appliance.
-
Dall'interno della tua rete privata, immetti l'URL del servizio dell'applicazione in un browser web.
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 privata delle applicazioni nei cluster VPC solo con un endpoint del servizio cloud privato
Se il tuo cluster è stato creato sull'infrastruttura VPC e hai abilitato solo l'endpoint del servizio cloud privato quando hai creato il cluster, puoi utilizzare il controller Ingress privato predefinito per esporre le applicazioni nel tuo cluster alle richieste dalla rete privata.
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 l'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: - <custom_domain> secretName: <custom_secret_name> rules: - host: <domain> http: paths: - path: /<app1_path> 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 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, come
subdomain1.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 dell'Ingress.
- Sostituisci
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'applicazione. Molte app non ascoltano su un percorso specifico, ma utilizzano il percorso radice e una porta specifica. In questo caso, imposta il percorso principale su/e non specificare un percorso specifico per la tua app. - Ad esempio, per utilizzare
http://domain/, immettere/come percorso. Per "http://domain/app1_path", inserisci/app1_pathcome percorso.
- Sostituisci
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.
Passaggio 4: Accedi alla tua app
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.