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.

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:

Passo 1: distribuisci le applicazioni e crea i servizi dell'applicazione.

Inizia distribuendo le tue applicazioni e creando i servizi Kubernetes per esporle.

  1. 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.

  2. Per ogni distribuzione di applicazione che vuoi esporre, crea un servizio ClusterIP Kubernetes. 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.

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.

  1. 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: 80
    
    tls
    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, come subdomain1.custom_domain.net o subdomain1.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_path come percorso.
    pathType
    Il metodo di corrispondenza dei percorsi URL. I valori supportati sono ImplementationSpecific, Exact o Prefix. 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.
  2. 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>
    
  3. 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.

  1. 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.

  2. Per ogni distribuzione di applicazione che vuoi esporre, crea un servizio ClusterIP Kubernetes. 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.

  1. 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> ".
    ibmcloud oc nlb-dns ls --cluster CLUSTER_NAME_OR_ID
    
    In questo esempio di output, il sottodominio mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud presenta il valore più alto di 000<n>, pari a 0002.
    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
    
  2. Nel sottodominio che hai copiato, modifica il valore 000<n> sostituendolo con 000<n+1>. Ad esempio, il dominio secondario mycluster-a1b2cdef345678g9hi012j3kl4567890-0002.us-south.containers.appdomain.cloud viene modificato in mycluster-a1b2cdef345678g9hi012j3kl4567890-0003.us-south.containers.appdomain.cloud. Il valore n+1 indica 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 esempio mycluster-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.

  1. 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
    
  2. Crea la risorsa IngressController nel progetto openshift-ingress-operator del tuo cluster. Quando si crea IngressController, viene creato automaticamente un controllore pubblico di Ingress e distribuito nel progetto openshift-ingress in 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
    
  3. Esegui il comando oc get e trova il nome host VPC nel campo EXTERNAL IP del servizio router-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-ingress
    

    Output 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
    
  4. 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-controller come 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 file public-ingress-controller.yaml viene generato automaticamente e viene registrato con il servizio router-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 esempio mycluster-a1b2cdef345678g9hi012j3kl4567890-0003.
        ibmcloud oc nlb-dns create vpc-gen2 --cluster <cluster_name_or_ID> --lb-host <VPC_hostname> --secret-namespace <project>
        ```
    
    

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.

  1. 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: 80
    
    tls
    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 esempio subdomain1.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 utilizzare http://domain/, inserire / come percorso. Per " http://domain/app1_path", inserisci /app1_path come percorso.
    pathType
    Il metodo di corrispondenza dei percorsi URL. I valori supportati sono ImplementationSpecific, Exact o Prefix. 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.
  2. 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>
    
  3. 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.

  1. 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>
    
  2. Crea il servizio nel tuo cluster.

    oc apply -f myexternalservice.yaml
    
  3. 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.
  4. Crea l'endpoint nel tuo cluster.

    oc apply -f myexternalendpoint.yaml
    
  5. 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.