Gestione e esposizione delle app nel service mesh

Dopo che hai installato il componente aggiuntivo Istio nel tuo cluster, puoi distribuire le tue applicazioni nella rete di servizi Istio configurando l'inserimento di collaterali del proxy Envoy ed esponendo le tue applicazioni con un dominio secondario.

Approfondimento sull'app di esempio " BookInfo "

L' BookInfo modello di domanda per Istio e include la configurazione di base della demo e le regole di destinazione predefinite, in modo da poter provare immediatamente le funzionalità di Istio.

In Istio versione 1.4 e successive, BookInfo non viene offerto come componente aggiuntivo gestito e deve essere installato separatamente. Per installare BookInfo, vedi Configurazione dell'applicazione di esempio BookInfo.

I quattro microservizi BookInfo includono:

  • productpage richiama i microservizi details e reviews per popolare la pagina.
  • details contiene informazioni sul libro.
  • ratings contiene informazioni sulla classificazione del libro che accompagnano una recensione.
  • reviews contiene le recensioni del libro e richiama il microservizio ratings. Il microservizio reviews ha più versioni:
    • v1 non richiama il microservizio ratings.
    • v2 richiama il microservizio ratings e visualizza le valutazioni come da 1 a 5 stelle nere.
    • v3 richiama il microservizio ratings e visualizza le valutazioni come da 1 a 5 stelle rosse.

Gli YAML di distribuzione per ciascuno di questi microservizi vengono modificati in modo tale che i proxy collaterale Envoy siano pre-inseriti come contenitori nei pod dei microservizi prima che vengano distribuiti. Per ulteriori informazioni sull'iniezione manuale nel sidecar, consultare la documentazione relativa a " Istio ". L'applicazione BookInfo è inoltre già esposta su un indirizzo IP pubblico mediante un gateway Istio. Sebbene l'applicazione BookInfo possa aiutarti a iniziare, non è pensata per l'utilizzo in produzione.

Configurazione dell'applicazione di esempio BookInfo

  1. Installa BookInfo nel tuo cluster. Scarica l'ultimo pacchetto di Istio per il tuo sistema operativo, che include i file di configurazione per l'applicazione BookInfo.
    curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.29.5 sh -
    
  2. Passa alla directory del pacchetto Istio.
    cd istio-1.29.5
    
  3. Etichetta lo spazio dei nomi default per l'inserimento automatico di collaterali.
    kubectl label namespace default istio-injection=enabled
    
  4. Distribuisci l'applicazione, il gateway e le regole di destinazione BookInfo.
    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
    kubectl apply -f samples/bookinfo/networking/destination-rule-all.yaml
    
  5. Assicurati che i microservizi BookInfo e loro pod corrispondenti siano stati distribuiti.
    kubectl get svc
    kubectl get pods
    
    NAME                      TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)          AGE
    details                   ClusterIP      172.21.19.104    <none>         9080/TCP         2m
    kubernetes                ClusterIP      172.21.0.1       <none>         443/TCP          1d
    productpage               ClusterIP      172.21.168.196   <none>         9080/TCP         2m
    ratings                   ClusterIP      172.21.11.131    <none>         9080/TCP         2m
    reviews                   ClusterIP      172.21.117.164   <none>         9080/TCP         2m
    NAME                                     READY     STATUS      RESTARTS   AGE
    details-v1-6865b9b99d-7v9h8              2/2       Running     0          2m
    productpage-v1-f8c8fb8-tbsz9             2/2       Running     0          2m
    ratings-v1-77f657f55d-png6j              2/2       Running     0          2m
    reviews-v1-6b7f6db5c5-fdmbq              2/2       Running     0          2m
    reviews-v2-7ff5966b99-zflkv              2/2       Running     0          2m
    reviews-v3-5df889bcff-nlmjp              2/2       Running     0          2m
    

Accesso pubblico a BookInfo

Ottieni l'indirizzo pubblico del programma di bilanciamento del carico istio-ingressgateway che espone BookInfo.

Creazione di un gateway URL in cluster Classic

  1. Imposta l'host ingress Istio.
    export INGRESS_IP=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    
  2. Imposta la porta ingress Istio.
    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  3. Crea una variabile di ambiente GATEWAY_URL che utilizza l'host e la porta ingress Istio.
    export GATEWAY_URL=$INGRESS_IP:$INGRESS_PORT
    
  4. Esegui il curl della variabile GATEWAY_URL per controllare che l'applicazione BookInfo sia in esecuzione. Una risposta 200 significa che l'applicazione BookInfo è in esecuzione correttamente con Istio.
    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
    
  5. Prova ad aggiornare la pagina diverse volte. Differenti versioni della sezione delle recensioni ruotano e visualizzano le stelle rosse, nere e nessuna stella.

Creazione di un gateway URL nei cluster VPC

  1. Crea una variabile d'ambiente GATEWAY_URL che utilizzi il nome host di ingresso Istio.
    export GATEWAY_URL=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    
  2. Esegui il curl della variabile GATEWAY_URL per controllare che l'applicazione BookInfo sia in esecuzione. Una risposta 200 significa che l'applicazione BookInfo è in esecuzione correttamente con Istio.
    curl -o /dev/null -s -w "%{http_code}\n" http://${GATEWAY_URL}/productpage
    

Visualizzazione della pagina web BookInfo in un browser

Eseguite il seguente comando in base al vostro sistema operativo per visualizzare l'applicazione BookInfo nel browser.

Mac OS oppure Linux

open http://$GATEWAY_URL/productpage

Windows

start http://$GATEWAY_URL/productpage

Prova ad aggiornare la pagina diverse volte. Differenti versioni della sezione delle recensioni ruotano e visualizzano le stelle rosse, nere e nessuna stella.

Esposizione di BookInfo utilizzando un dominio secondario fornito da IBM senza TLS

Quando abiliti il componente aggiuntivo BookInfo nel tuo cluster, viene creato automaticamente il gateway Istio bookinfo-gateway. Il gateway utilizza le regole del servizio virtuale e di destinazione di Istio per configurare un programma di bilanciamento del carico, istio-ingressgateway, che espone pubblicamente l'applicazione BookInfo. Nella seguente procedura, crei un dominio secondario per l'indirizzo IP del programma di bilanciamento del carico istio-ingressgateway nei cluster classici oppure il nome host nei cluster VPC attraverso cui puoi accedere pubblicamente a BookInfo.

  1. Registra l'indirizzo IP nei cluster classici oppure il nome host nei cluster VPC per il programma di bilanciamento del carico istio-ingressgateway creando un dominio secondario DNS.
    • Classic:
        ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --cluster <cluster_name_or_id>
        ```
    * VPC:
    ```sh {: pre}
        ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --cluster <cluster_name_or_id>
        ```
    
  2. Verifica che il dominio secondario sia stato creato e copialo.
    ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
    

Esempio di output per i cluster Classic

Hostname                                                                                IP(s)              Health Monitor   SSL Cert Status           SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["168.1.1.1"]      None             created                   <certificate>

Esempio di output per i cluster VPC

Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   <certificate>

In un browser web, apri la pagina del prodotto BookInfo. Poiché non è configurato alcun TLS, assicurati di utilizzare HTTP.

http://<subdomain>/productpage

Prova ad aggiornare la pagina diverse volte. Le richieste indirizzate a http://<subdomain>/productpage vengono ricevute dal bilanciatore di carico del gateway Istio. Le diverse versioni del microservizio reviews vengono ancora restituite in modo casuale perché il gateway Istio gestisce le regole di instradamento di servizio virtuale e destinazione per i microservizi.

Esposizione di BookInfo utilizzando un dominio secondario fornito da IBM con TLS

Quando abiliti il componente aggiuntivo BookInfo nel tuo cluster, viene creato automaticamente il gateway Istio bookinfo-gateway. Il gateway utilizza le regole del servizio virtuale e di destinazione di Istio per configurare un programma di bilanciamento del carico, istio-ingressgateway, che espone pubblicamente l'applicazione BookInfo. Nella seguente procedura, crei un dominio secondario per l'indirizzo IP del programma di bilanciamento del carico istio-ingressgateway nei cluster classici oppure il nome host nei cluster VPC attraverso cui puoi accedere pubblicamente a BookInfo. Usi inoltre il certificato SSL per abilitare le connessioni HTTPS all'applicazione BookInfo.

  1. Registra l'indirizzo IP nei cluster classici oppure il nome host nei cluster VPC per il programma di bilanciamento del carico istio-ingressgateway creando un dominio secondario DNS.

    • Classic:
        ibmcloud ks nlb-dns create classic --ip $INGRESS_IP --secret-namespace istio-system --cluster <cluster_name_or_id>
        ```
    * VPC:
    ```sh {: pre}
        ibmcloud ks nlb-dns create vpc-gen2 --lb-host $GATEWAY_URL --secret-namespace istio-system --cluster <cluster_name_or_id>
        ```
    
  2. Verifica che il dominio secondario sia stato creato e prendi nota del nome del tuo segreto SSL nel campo SSL Cert Secret Name.

    ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
    

    Esempio di output per i cluster classici.

    Hostname                                                                                IP(s)              Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["168.1.1.1"]      None             created                   <certificate>
    

    Esempio di output per i cluster VPC

    Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   <certificate>
    

Configurazione di bookinfo-gateway per l'utilizzo della terminazione " TLS "

Completare i seguenti passaggi per impostare la terminazione TLS per il sito bookinfo-gateway.

  1. Elimina il bookinfo-gateway esistente, che non è configurato per gestire le connessioni TLS.
    kubectl delete gateway bookinfo-gateway
    
  2. Crea un nuovo file di configurazione bookinfo-gateway che utilizzi la terminazione TLS. Salva il seguente file YAML come bookinfo-gateway.yaml. Sostituire <secret_name> con il nome del segreto SSL precedentemente trovato.
    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: bookinfo-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 443
          name: https
          protocol: HTTPS
        tls:
          mode: SIMPLE
          credentialName: <secret_name>
        hosts:
        - "*"
    
  3. Crea il nuovo bookinfo-gateway nel tuo cluster.
    kubectl apply -f bookinfo-gateway.yaml
    
  4. In un browser web, apri la pagina del prodotto BookInfo. Assicurati di utilizzare HTTPS per il dominio secondario che hai trovato nel passo 2.
    https://<subdomain>/productpage
    
  5. Prova ad aggiornare la pagina diverse volte. Le richieste indirizzate a https://<subdomain>/productpage vengono ricevute dal bilanciatore di carico del gateway Istio. Le diverse versioni del microservizio reviews vengono ancora restituite in modo casuale perché il gateway Istio gestisce le regole di instradamento di servizio virtuale e destinazione per i microservizi.

Informazioni su cosa è accaduto

L'esempio di BookInfo mostra come tre componenti di gestione del traffico di Istio interagiscono per instradare il traffico in entrata verso l'applicazione.

Gateway
Il Gateway " bookinfo-gateway " descrive un bilanciatore di carico, il servizio " istio-ingressgateway " nel namespace " istio-system ", che funge da punto di ingresso per il traffico in entrata proveniente da HTTP / TCP e destinato a BookInfo. Istio configura il programma di bilanciamento del carico per l'ascolto delle richieste in entrata alle applicazioni gestite da Istio sulle porte definite nel file di configurazione del gateway. Per visualizzare il file di configurazione del gateway BookInfo, eseguire il comando seguente.
kubectl get gateway bookinfo-gateway -o yaml
VirtualService
L' bookinfo VirtualService definisce le regole che determinano il modo in cui le richieste vengono instradate all'interno del service mesh, definendo i microservizi come destinations. Nel servizio virtuale bookinfo, l'URI /productpage di una richiesta viene instradato all'host productpage sulla porta 9080. In questo modo, tutte le richieste all'applicazione BookInfo vengono instradate prima al microservizio productpage, che quindi richiama gli altri microservizi di BookInfo. Per visualizzare la regola del servizio virtuale, immetti il seguente comando.
kubectl get virtualservice bookinfo -o yaml
DestinationRule
Dopo che il gateway ha instradato la richiesta in base alla regola del servizio virtuale, le politiche details, productpage, ratings e reviews DestinationRules definiscono le politiche che vengono applicate alla richiesta quando questa raggiunge un microservizio. Ad esempio, quando aggiorni la pagina del prodotto BookInfo, le modifiche che vedi sono il risultato del microservizio productpage che richiama in modo casuale le diverse versioni, v1, v2 e v3, del microservizio reviews. Le versioni sono selezionate in modo casuale poiché la regola di destinazione reviews attribuisce lo stesso peso ai subsets, o alle versioni denominate, del microservizio. Questi sottoinsiemi vengono utilizzati dalle regole del servizio virtuale quando il traffico viene indirizzato a specifiche versioni del servizio. Per visualizzare le regole di destinazione applicate a BookInfo,, eseguire il comando seguente.
kubectl describe destinationrules

Inclusione di applicazioni nella rete di servizi Istio impostando l'inserimento di collaterali

Sei pronto a gestire le tue applicazioni utilizzando Istio? Prima di distribuire la tua applicazione, devi prima decidere come inserire i collaterali del proxy Envoy nei pod dell'applicazione.

Ogni app pod deve eseguire un sidecar proxy di tipo " Envoy " affinché i microservizi facciano parte del service mesh. Puoi assicurarti che i collaterali vengano inseriti automaticamente o manualmente in ogni pod dell'applicazione. Per ulteriori informazioni sull'iniezione sidecar, consultare la documentazione di Istio.

Abilitazione dell'inserimento automatico di collaterali

Quando l'inserimento automatico di collaterali è abilitato, uno spazio dei nomi ascolta eventuali nuove distribuzioni e modifica automaticamente la specifica del template di pod, cosicché i pod dell'applicazione vengano creati con contenitori di collaterali del proxy Envoy. Abilita l'inserimento automatico di collaterali per uno spazio dei nomi quando pianifichi di distribuire più applicazioni che vuoi integrare con Istio in tale spazio dei nomi. L'inserimento automatico di collaterali non è abilitato per tutti gli spazi dei nomi per impostazione predefinita nel componente aggiuntivo gestito da Istio.

Non abilitare l'inserimento sidecar per gli spazi dei nomi kube-system, ibm-system, o ibm-operators.

Per abilitare l'inserimento automatico di collaterali per uno spazio dei nomi:

  1. Ottieni il nome dello spazio dei nomi in cui vuoi distribuire le applicazioni gestite da Istio.

    kubectl get namespaces
    
  2. Etichetta lo spazio dei nomi come istio-injection=enabled.

    kubectl label namespace <namespace> istio-injection=enabled
    
  3. Distribuisci le applicazioni nello spazio dei nomi etichettato o ridistribuisci le applicazioni che si trovano già nello spazio dei nomi.

    kubectl apply <myapp>.yaml --namespace <namespace>
    
  4. Opzionale: per ridistribuire un'app in quel namespace, eliminare il pod dell'app in modo che venga ridistribuita con il sidecar iniettato.

    kubectl delete pod -l app=<myapp>
    
  5. Se non hai creato un servizio per rendere accessibile la tua app, crea un servizio " Kubernetes ". La tua applicazione deve essere esposta da un servizio Kubernetes per poter essere inclusa come microservizio nella rete di servizi Istio. Assicurati di rispettare i requisiti di " Istio " relativi ai pod e ai servizi.

  6. Definisci un servizio per l'applicazione.

    apiVersion: v1
    kind: Service
    metadata:
      name: myappservice
    spec:
      selector:
        <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs.
      ports:
      - protocol: TCP
        port: 8080 # The port that the service listens on
    
  7. Crea il servizio nel tuo cluster. Assicurati che il servizio venga distribuito nello stesso spazio dei nomi dell'applicazione.

    kubectl apply -f myappservice.yaml -n <namespace>
    

I pod dell'applicazione sono ora integrati nella tua rete di servizi Istio perché hanno il contenitore di collaterali Istio che viene eseguito insieme al tuo contenitore dell'applicazione.

Inserimento manuale di collaterali

Se non si desidera abilitare l'inserimento automatico del sidecar per uno spazio dei nomi, è possibile inserire manualmente il sidecar nel file YAML di distribuzione. Inserire manualmente i sidecar quando le app sono in esecuzione in spazi dei nomi insieme ad altre distribuzioni in cui non si desidera che i sidecar vengano inseriti automaticamente.

Non abilitare l'inserimento sidecar per gli spazi dei nomi kube-system, ibm-system, o ibm-operators.

  1. Scarica il client istioctl.
    curl -L https://istio.io/downloadIstio | sh -
    
  2. Passa alla directory del pacchetto Istio.
    cd istio-1.29.5
    

Per inserire manualmente i collaterali in una distribuzione:

  1. Inserisci il collaterale nel file YAML di distribuzione della tua applicazione.

    istioctl kube-inject -f <myapp>.yaml | kubectl apply -f -
    
  2. Distribuisci la tua applicazione.

    kubectl apply <myapp>.yaml
    
  3. Se non hai creato un servizio per rendere accessibile la tua app, crea un servizio " Kubernetes ". La tua applicazione deve essere esposta da un servizio Kubernetes per poter essere inclusa come microservizio nella rete di servizi Istio. Assicurati di rispettare i requisiti di " Istio " relativi ai pod e ai servizi.

  4. Definisci un servizio per l'applicazione.

    apiVersion: v1
    kind: Service
    metadata:
      name: myappservice
    spec:
      selector:
        <selector_key>: <selector_value> # Enter the label key `selector_key` and value `selector_value` pair that you want to use to target the pods where your app runs.
      ports:
      - protocol: TCP
        port: 8080 # The port that the service listens on.
    
  5. Crea il servizio nel tuo cluster. Assicurati che il servizio venga distribuito nello stesso spazio dei nomi dell'applicazione.

    kubectl apply -f myappservice.yaml -n <namespace>
    

I pod dell'applicazione sono ora integrati nella tua rete di servizi Istio perché hanno il contenitore di collaterali Istio che viene eseguito insieme al tuo contenitore dell'applicazione.

Abilitazione o disabilitazione dei bilanciatori di carico pubblici Istio in addon-istio 1.23

Per impostazione predefinita, un programma di bilanciamento del carico Istio pubblico, istio-ingressgateway, è abilitato nel tuo cluster per bilanciare il carico delle richieste in entrata da internet alle tue applicazioni gestite da Istio. È possibile ottenere una maggiore disponibilità abilitando un bilanciatore di carico Istio in ogni zona del cluster.

  1. Modifica la risorsa della mappa di configurazione managed-istio-custom.

    kubectl edit cm managed-istio-custom -n ibm-operators
    
  2. Verifica che tutte le tue zone del cluster si trovino nei campi istio-ingressgateway-zone.

    Esempio per un cluster classico multizona a Dallas:

    istio-ingressgateway-zone-1: "dal10"
    istio-ingressgateway-zone-2: "dal12"
    istio-ingressgateway-zone-3: "dal13"
    
  3. Abilita o disabilita un programma di bilanciamento del carico Istio in ciascuna zona impostando i campi istio-ingressgateway-public-1|2|3-enabled su "true" o "false".

    Se vuoi che le tue applicazioni siano accessibili ai client, assicurati che almeno un programma di bilanciamento del carico sia abilitato o crea programmi di bilanciamento del carico del gateway personalizzati. Se si disattivano tutti i bilanciatori di carico in tutte le zone, l'applicazione non sarà più accessibile dall'esterno.

    Esempio per abilitare un gateway pubblico in ciascuna zona:

    istio-ingressgateway-public-1-enabled: "true"
    istio-ingressgateway-public-2-enabled: "true"
    istio-ingressgateway-public-3-enabled: "true"
    
  4. Salva e chiudi il file di configurazione.

  5. Verifica che i nuovi servizi del programma di bilanciamento del carico istio-ingressgateway vengano creati.

    kubectl get svc -n istio-system
    

Per esporre le applicazioni gestite da Istio utilizzando i servizi del programma di bilanciamento del carico istio-ingressgateway, specifica il selettore istio: ingressgateway nella tua risorsa Gateway. Per ulteriori informazioni, vedi Esposizione delle applicazioni gestite da Istio.

Esposizione del gateway Istio ingress con DNS

Esponi pubblicamente le tue applicazioni gestite da Istio creando una voce DNS per il programma di bilanciamento del carico istio-ingressgateway e configurando il programma di bilanciamento del carico per inoltrare il traffico alla tua applicazione.

Nella seguente procedura, configuri un dominio secondario tramite il quale i tuoi utenti possono accedere alla tua applicazione creando le seguenti risorse:

  • Un gateway denominato my-gateway. Questo gateway funge da punto di ingresso pubblico alle tue applicazioni e utilizza il servizio del programma di bilanciamento del carico istio-ingressgateway esistente per esporre la tua applicazione. Il gateway può, facoltativamente, essere configurato per la terminazione TLS.
  • Un servizio virtuale denominato my-virtual-service. my-gateway utilizza le regole definite in my-virtual-service per instradare il traffico verso la tua app.
  • Un dominio secondario per il programma di bilanciamento del carico istio-ingressgateway. Tutte le richieste utente al dominio secondario sono inoltrate alla tua applicazione in base alle tue regole di instradamento my-virtual-service.

Esposizione del gateway Istio ingress con DNS senza terminazione TLS

  1. Installa il componente aggiuntivo gestito istio in un cluster.
  2. Installa la CLI istioctl.
  3. Configura l'iniezione sidecar per i microservizi dell'app, distribuisci i microservizi dell'app in uno spazio dei nomi e crea servizi " Kubernetes " per i microservizi dell'app, in modo che facciano parte del service mesh " Istio ".

Per esporre pubblicamente le applicazioni:

  1. Crea un gateway che utilizza il servizio del programma di bilanciamento del carico istio-ingressgateway pubblico per esporre la porta 80 per HTTP. Sostituisci " <namespace> " con lo spazio dei nomi in cui sono distribuiti i microservizi gestiti da Istio. Per ulteriori informazioni sui componenti YAML del gateway, consultare la documentazione di riferimento " Istio ".

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: my-gateway
    spec:
      selector:
        app: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
    
  2. Applica il gateway nello spazio dei nomi in cui vengono distribuiti i tuoi microservizi gestiti da Istio.

    kubectl apply -f my-gateway.yaml -n <namespace>
    
  3. Crea un servizio virtuale che utilizza il gateway my-gateway e definisce le regole di instradamento per i tuoi microservizi dell'applicazione. Se i tuoi microservizi sono in ascolto su una porta diversa da 80, aggiungi quella porta. Per ulteriori informazioni sui componenti YAML dei servizi virtuali, consultare la documentazione di riferimento " Istio ".

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: my-virtual-service
      namespace: <namespace> # The namespace where your Istio-managed microservices are deployed.
    spec:
      gateways:
      - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer.
      hosts:
      - '*'
      http:
      - match:
        - uri:
            exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`.
        route:
        - destination:
            host: <service_name> # Replace `service_name` with the name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices.
            port:
              number: 80 # If your microservice listens on a different port, replace `80` with the port.
    
  4. Applica le regole del servizio virtuale nello spazio dei nomi in cui viene distribuito il tuo microservizio gestito da Istio.

    kubectl apply -f my-virtual-service.yaml -n <namespace>
    
  5. Ottieni l'indirizzo EXTERNAL-IP (cluster classici) o il nome host (cluster VPC) per il programma di bilanciamento del carico pubblico istio-ingressgateway. Se hai abilitato un programma di bilanciamento del carico istio in ciascuna zona del tuo cluster, ottieni l'indirizzo IP o il nome host del servizio del programma di bilanciamento del carico in ciascuna zona.

    kubectl get svc -n istio-system
    
    # Example output for classic clusters
    istio-ingressgateway     LoadBalancer   172.21.XXX.XXX   169.1.1.1       80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP  22m
    
    # Example output for VPC clusters:
    istio-ingressgateway     LoadBalancer   172.21.XXX.XXX   1234abcd-us-south.lb.appdomain.cloud       80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP  22m
    
  6. Registra l'IP o il nome host del programma di bilanciamento del carico creando un dominio secondario DNS. Per ulteriori informazioni sulla registrazione di sottodomini DNS in IBM Cloud Kubernetes Service, vedere Classic: Registrazione di un sottodominio NLB o informazioni sulla registrazione del nome host di un bilanciatore di carico VPC con un sottodominio DNS per un VPC ALB o VPC NLB.

    ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...]
    

    Comando di esempio per i cluster VPC.

    ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname>
    
  7. Verifica che il dominio secondario sia stato creato. Nell'output, copia il nome del segreto SSL nel campo SSL Cert Secret Name.

    ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
    

    Esempio di output per i cluster classici.

    Hostname                                                                                IP(s)              Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["168.1.1.1"]      None             created                   <certificate>
    

    Esempio di output per i cluster VPC.

    Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   <certificate>
    
  8. Verifica che il traffico venga instradato ai tuoi microservizi gestiti da Istio immettendo l'URL del microservizio dell'applicazione.

    http://<host_name>/<service_path>
    

Cerchi un controllo ancora più dettagliato sull'instradamento? Per creare regole che vengano applicate dopo che il bilanciatore di carico ha instradato il traffico verso ciascun microservizio, come ad esempio regole per indirizzare il traffico verso diverse versioni di uno stesso microservizio, è possibile creare e applicare DestinationRules.

È necessario eseguire il debug delle configurazioni in ingresso o in uscita? Assicurarsi che l'opzione istio-global-proxy-accessLogFile nel file managed-istio-custom ConfigMap sia impostata su "/dev/stdout". Envoy i proxy stampano le informazioni di accesso nel loro standard output, che si può visualizzare eseguendo i comandi kubectl logs per i contenitori Envoy. Se noti che il pod ibm-cloud-provider-ip per un gateway è bloccato in pending, vedi questo argomento per la risoluzione dei problemi.

Esposizione del gateway Istio ingress con DNS con terminazione TLS

  1. Installa il componente aggiuntivo gestito istio in un cluster.
  2. Installa la CLI istioctl.
  3. Configura l'iniezione sidecar per i microservizi dell'app, distribuisci i microservizi dell'app in uno spazio dei nomi e crea servizi " Kubernetes " per i microservizi dell'app, in modo che facciano parte del service mesh " Istio ".

Per esporre pubblicamente le applicazioni:

  1. Registra l'IP o il nome host del programma di bilanciamento del carico creando un dominio secondario DNS. Per ulteriori informazioni sulla registrazione dei domini secondari DNS in IBM Cloud Kubernetes Service, vedi Classico: Registrazione di un dominio secondario NLB o Registrazione di un nome host del programma di bilanciamento del carico VPC con un dominio secondario DNS.

    • Cluster classici:
        ibmcloud ks nlb-dns create classic --cluster <cluster_name_or_id> --ip <LB_IP> [--ip <LB_zone2_IP> ...]
        ```
    * Cluster VPC:
    ```sh {: pre}
        ibmcloud ks nlb-dns create vpc-gen2 -c <cluster_name_or_ID> --lb-host <LB_hostname>
        ```
    
  2. Verifica che il dominio secondario sia stato creato. Nell'output, copia il nome del segreto SSL nel campo SSL Cert Secret Name.

    ibmcloud ks nlb-dns ls --cluster <cluster_name_or_id>
    
    # Example output for classic clusters:
    Hostname                                                                                IP(s)              Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["168.1.1.1"]      None             created                   <certificate>
    
    # Example output for VPC clusters:
    Subdomain                                                                               Load Balancer Hostname                        Health Monitor   SSL Cert Status           SSL Cert Secret Name
    mycluster-a1b2cdef345678g9hi012j3kl4567890-0001.us-south.containers.appdomain.cloud     ["1234abcd-us-south.lb.appdomain.cloud"]      None             created                   <certificate>
    
  3. Crea un gateway che utilizza il servizio del programma di bilanciamento del carico istio-ingressgateway pubblico per esporre la porta 80 per HTTP. Sostituisci " <namespace> " con lo spazio dei nomi in cui sono distribuiti i microservizi gestiti da Istio. Per ulteriori informazioni sui componenti YAML del gateway, consultare la documentazione di riferimento " Istio ".

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: my-gateway
      namespace: <namespace>
    spec:
      selector:
        istio: ingressgateway
      servers:
        - port:
            name: https
            protocol: HTTPS
            number: 443
        tls:
          mode: SIMPLE
          serverCertificate: /etc/istio/ingressgateway-certs/tls.crt
          privateKey: /etc/istio/ingressgateway-certs/tls.key
        hosts:
        - "*"
    
  4. Applica il gateway nello spazio dei nomi in cui vengono distribuiti i tuoi microservizi gestiti da Istio.

    kubectl apply -f my-gateway.yaml -n <namespace>
    
  5. Crea un servizio virtuale che utilizza il gateway my-gateway e definisce le regole di instradamento per i tuoi microservizi dell'applicazione. Per ulteriori informazioni sui componenti YAML dei servizi virtuali, consultare la documentazione di riferimento " Istio ".

    apiVersion: networking.istio.io/v1beta1
    kind: VirtualService
    metadata:
      name: my-virtual-service
      namespace: <namespace> # The namespace where your Istio-managed microservices are deployed.
    spec:
      gateways:
      - my-gateway # `my-gateway` is specified so that the gateway can apply these virtual service routing rules to the `istio-ingressgateway` load balancer.
      hosts:
      - '*'
      http:
      - match:
        - uri:
            exact: /<service_path> # Replace `service_path` with the path that your entrypoint microservice listens on. For example, in the BookInfo app, the path is defined as `/productpage`.
        route:
        - destination:
            host: <service_name> # The name of your entrypoint microservice. For example, in the BookInfo app, `productpage` served as the entrypoint microservice that called the other app microservices.
            port:
              number: 443 # If your microservice listens on a different port, replace 443 with the port.
    
  6. Applica le regole del servizio virtuale nello spazio dei nomi in cui viene distribuito il tuo microservizio gestito da Istio.

    kubectl apply -f my-virtual-service.yaml -n <namespace>
    
  7. Ottieni l'indirizzo EXTERNAL-IP (cluster classici) o il nome host (cluster VPC) per il programma di bilanciamento del carico pubblico istio-ingressgateway. Se hai abilitato un programma di bilanciamento del carico istio in ciascuna zona del tuo cluster, ottieni l'indirizzo IP o il nome host del servizio del programma di bilanciamento del carico in ciascuna zona.

    kubectl get svc -n istio-system
    
    # Example output for classic clusters:
    istio-ingressgateway     LoadBalancer   172.21.XXX.XXX   169.1.1.1       80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP  22m
    
    # Example output for VPC clusters:
    istio-ingressgateway     LoadBalancer   172.21.XXX.XXX   1234abcd-us-south.lb.appdomain.cloud       80:31380/TCP,443:31390/TCP,31400:31400/TCP,5011:31323/TCP,8060:32483/TCP,853:32628/TCP,15030:31601/TCP,15031:31915/TCP  22m
    
  8. Verifica che il traffico venga instradato ai tuoi microservizi gestiti da Istio immettendo l'URL del microservizio dell'applicazione.

    https://<host_name>/<service_path>
    

I certificati per il segreto host DNS NLB scadono ogni 90 giorni. Il segreto nello spazio dei nomi predefinito viene automaticamente rinnovato da IBM Cloud Kubernetes Service 37 giorni prima della scadenza, ma devi copiare manualmente il segreto nello spazio dei nomi istio-system ogni volta che il segreto viene rinnovato. Utilizza gli script per automatizzare questo processo.

Cerchi un controllo ancora più dettagliato sull'instradamento? Per creare regole che vengano applicate dopo che il bilanciatore di carico ha instradato il traffico verso ciascun microservizio, come ad esempio regole per indirizzare il traffico verso diverse versioni di uno stesso microservizio, è possibile creare e applicare DestinationRules.

È necessario eseguire il debug delle configurazioni in ingresso o in uscita? Assicurarsi che l'opzione istio-global-proxy-accessLogFile nel file managed-istio-custom ConfigMap sia impostata su "/dev/stdout". Envoy i proxy stampano le informazioni di accesso nel loro standard output, che si può visualizzare eseguendo i comandi kubectl logs per i contenitori Envoy. Se noti che il pod ibm-cloud-provider-ip per un gateway è bloccato in pending, vedi questo argomento per la risoluzione dei problemi.

Protezione del traffico nel cluster abilitando mTLS

Abilita la crittografia per i carichi di lavoro in uno spazio dei nomi per ottenere il TLS reciproco (mTLS) all'interno del cluster. Il traffico instradato da Envoy tra i pod nel cluster viene crittografato con TLS. La gestione del certificato per mTLS viene gestita da Istio. Per ulteriori informazioni, consultare il sito Istio TLS documentazione reciproca.

  1. Crea un file della politica di autenticazione denominato default.yaml. Questa politica ha un ambito delimitato agli spazi dei nomi e configura i carichi di lavoro nella rete di servizi per accettare solo le richieste crittografate con TLS. Tieni presente che non è inclusa alcuna specifica targets perché la politica si applica a tutti i servizi nella rete all'interno di questo spazio dei nomi.
    apiVersion: "security.istio.io/v1beta1"
    kind: "PeerAuthentication"
    metadata:
      name: "default"
    spec:
      mtls:
        mode: STRICT
    
  2. Applica la politica di autenticazione a uno spazio dei nomi.
    kubectl apply -f default.yaml -n NAMESPACE
    
  3. Crea un file della regola di destinazione denominato destination-mtls.yaml. Questa politica configura i carichi di lavoro della rete di servizi in uno spazio dei nomi per inviare il traffico utilizzando TLS. Nota che il carattere jolly host: *.local si applica a questa regola di destinazione per tutti i servizi nella rete.
    apiVersion: "networking.istio.io/v1beta1"
    kind: "DestinationRule"
    metadata:
      name: "destination-mtls"
    spec:
      host: "*.local"
      trafficPolicy:
        tls:
          mode: ISTIO_MUTUAL
    
  4. Applica la regola di destinazione.
    kubectl apply -f destination-mtls.yaml -n NAMESPACE
    
  5. Se si desidera configurare " mTLS " per i carichi di lavoro del service mesh presenti in altri spazi dei nomi, ripetere questi passaggi in ciascuno di essi.

Le regole di destinazione sono utilizzate anche per motivi diversi dall'autenticazione, come ad esempio l'instradamento del traffico a versioni differenti di un servizio. Qualsiasi regola di destinazione che crei per un servizio deve contenere anche lo stesso blocco TLS impostato su mode: ISTIO_MUTUAL. Questo blocco impedisce alla regola di sovrascrivere le impostazioni mTLS a livello di rete che hai configurato in questa sezione.