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.

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.

  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 l'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 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

  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 privato

Dopo aver preparato il dominio e il certificato TLS, devi creare un controller Ingress privato e configurare il controller con il tuo dominio.

  1. 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
    
  2. Crea la risorsa IngressController nel progetto openshift-ingress-operator del tuo cluster. Quando si crea IngressController, viene creato automaticamente un controllore privato di Ingress e distribuito nel progetto openshift-ingress in 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
    
  3. Esegui il comando oc get e trova l'indirizzo IP o il nome host VPC nel campo EXTERNAL IP del servizio router-private-ingress-controller.
    oc get svc router-private-ingress-controller -n openshift-ingress
    
    Esempio di output per i cluster classici.
    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      3m
    
    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    1234abcd-us-south.lb.appdomain.cloud    80/TCP,443/TCP,1940/TCP      3m
    
  4. 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-controller come 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 file private-ingress-controller.yaml viene generato automaticamente e viene registrato con il servizio router-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 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>
            backend:
                service:
                    name: <app1_service>
                    port:
                        number: 80
          - path: /<app2_path>
            backend:
                serivce:
                  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 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.
    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_path come percorso.
    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.
  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 dalla tua rete privata

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

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

  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 l'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:
        - <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: 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 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 dell'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'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_path come percorso.
    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.

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.