Installazione e upgrade dei gateway con le API Istio

Cloud Service Mesh ti offre la possibilità di eseguire il deployment e gestire i gateway nell'ambito di dalla tua rete mesh di servizi. Un gateway descrive un bilanciatore del carico che opera a livello perimetrale della rete mesh e riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono utilizzati principalmente per gestire il traffico in entrata, ma puoi anche configurare gateway gestire altri tipi di traffico.

  • Gateway in uscita: un gateway in uscita consente di configurare un nodo di uscita dedicato per il traffico che esce dal mesh, consentendoti di limitare i servizi che possono o devono accedere a reti esterne o consentire il controllo sicuro del traffico in uscita per aggiungere ad esempio per la tua rete mesh.

  • Gateway in entrata: un gateway in entrata consente di configurare un'entrata dedicata per ricevere le connessioni HTTP/TCP in entrata.

  • Gateway est-ovest: un proxy per est-ovest per consentire ai carichi di lavoro dei servizi di comunicare attraverso i confini del cluster un mesh multi-principale su reti diverse. Per impostazione predefinita, pubblicamente su internet.

In questa pagina vengono descritte le best practice per il deployment e l'upgrade del gateway proxy, nonché esempi di configurazione di istio-ingressgateway e istio-egressgateway proxy gateway.

Puoi eseguire il deployment dei gateway in diversi modi e usare più di una di una topologia all'interno dello stesso cluster. Consulta Topologie di deployment del gateway nella documentazione di Istio, per saperne di più su queste topologie.

Best practice per il deployment dei gateway

Le best practice per il deployment dei gateway dipendono dall'uso o meno della piano dati gestito o piano dati non gestito.

Best practice per il piano dati gestito

  1. Attiva il piano dati gestito.
  2. Aggiungi un'etichetta di revisione gestita a una nello spazio dei nomi.
  3. Esegui il deployment e gestisci il piano di controllo e i gateway separatamente.
  4. Come best practice per la sicurezza, ti consigliamo di eseguire il deployment dei gateway in diverso rispetto a quello del piano di controllo.
  5. Utilizza le funzionalità di iniezione automatica del file collaterale (inserimento automatico) per inserire la configurazione proxy per gateway simili a come inseriresti i proxy collaterali per i tuoi servizi.

Queste best practice:

  • Assicurati che i gateway gestiti siano automaticamente aggiornati con le ultime miglioramenti e aggiornamenti della sicurezza.
  • Riduce la gestione e la manutenzione delle istanze gateway in Cloud Service Mesh un piano dati gestito.

Best practice per il piano dati non gestito

  1. Esegui il deployment e gestisci il piano di controllo e i gateway separatamente.
  2. Come best practice per la sicurezza, ti consigliamo di eseguire il deployment dei gateway in diverso rispetto a quello del piano di controllo.
  3. Utilizza le funzionalità di iniezione automatica del file collaterale (inserimento automatico) per inserire la configurazione proxy per gateway simili a come inseriresti i proxy collaterali per i tuoi servizi.

Queste best practice:

  • Consenti agli amministratori dello spazio dei nomi di gestire i gateway senza dover privilegi elevati per l'intero cluster.
  • Consenti agli amministratori di utilizzare gli stessi strumenti o meccanismi di deployment che usano per gestire le applicazioni Kubernetes, gateway VPN ad alta disponibilità.
  • Concedi agli amministratori il controllo completo sul deployment del gateway per semplificare le operazioni. Quando è disponibile un nuovo upgrade o viene è cambiata, gli amministratori aggiornano i pod del gateway riavviandoli. Questo rende l'esperienza di gestione di un deployment gateway uguale che utilizzano proxy sidecar per i tuoi servizi.

Esegui il deployment del gateway di esempio

Per supportare gli utenti con strumenti di deployment esistenti, Cloud Service Mesh supporta per eseguire il deployment di un gateway Istio: IstioOperator, Helm e Kubernetes YAML. Ogni metodo produce lo stesso o il risultato finale. Anche se puoi scegliere il metodo che conosci meglio, di utilizzare il metodo YAML Kubernetes perché è più facile e puoi archiviare i manifest idratati nel controllo del codice sorgente.

I passaggi seguenti mostrano come eseguire il deployment di un gateway di esempio.

  1. Crea uno spazio dei nomi per il gateway, se non ne hai già uno. Sostituisci GATEWAY_NAMESPACE con il nome del tuo nello spazio dei nomi.

    kubectl create namespace GATEWAY_NAMESPACE
    
  2. Abilita lo spazio dei nomi per l'inserimento. I passaggi dipendono dall'implementazione del piano di controllo.

    Gestito (TD)

    1. Applica l'etichetta di inserimento predefinita allo spazio dei nomi:
    kubectl label namespace GATEWAY_NAMESPACE \
        istio.io/rev- istio-injection=enabled --overwrite
    

    Gestito (Istiod)

    Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:

      kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Se sei un utente esistente con il piano di controllo Managed Istiod: Ti consigliamo di usare l'inserimento predefinito, ma l'inserimento basato sulle revisioni supportati. Segui queste istruzioni:

    1. Esegui questo comando per individuare i canali di rilascio disponibili:

      kubectl -n istio-system get controlplanerevision
      

      L'output è simile al seguente:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      NOTA: se nell'elenco precedente sono presenti due revisioni del piano di controllo, rimuovine una. La presenza di più canali del piano di controllo nel cluster non è supportata.

      Nell'output, il valore sotto la colonna NAME è l'etichetta di revisione che corrisponde al canale di rilascio disponibile per la versione di Cloud Service Mesh.

    2. Applica l'etichetta di revisione allo spazio dei nomi:

      kubectl label namespace GATEWAY_NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    Nel cluster

    Consigliato: esegui questo comando per applicare l'etichetta di inserimento predefinita allo spazio dei nomi:

      kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Consigliamo di utilizzare l'inserimento predefinito, ma l'inserimento basato sulle revisioni è supportato: Segui queste istruzioni:

    1. Usa questo comando per individuare l'etichetta di revisione su istiod:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Applica l'etichetta di revisione allo spazio dei nomi. Nel comando seguente, REVISION_LABEL è il valore della revisione istiod che hai annotato nel passaggio precedente.

      kubectl label namespace GATEWAY_NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      
  3. Copia i file di configurazione per i gateway di esempio dal Repository anthos-service-mesh.

  4. Cambia la directory nella directory samples. Per assicurarti di essere nel nella directory corretta, esegui il comando ls per elencare i contenuti della directory quindi verifica che esista una directory gateways (a cui potrai accedere nel passaggio successivo) e una directory online-boutique.

  5. Eseguire il deployment di un gateway in entrata o in uscita. Questi si trovano nella samples/gateways/ così com'è o modificala in base alle tue esigenze.

    In entrata

    kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
    

    In uscita

    kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-egressgateway
    
  6. Dopo aver creato il deployment, verifica che i nuovi servizi funzionino. correttamente:

    kubectl get pod,service -n GATEWAY_NAMESPACE
    

    Verifica che l'output sia simile al seguente:

    NAME                                      READY   STATUS    RESTARTS   AGE
    pod/istio-ingressgateway-856b7c77-bdb77   1/1     Running   0          3s
    
    NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    service/istio-ingressgateway   LoadBalancer   10.24.5.129    34.82.157.6      80:31904/TCP   3s

Gestisci le risorse gateway come qualsiasi altra applicazione Kubernetes. Gli esempi in il repository anthos-service-mesh-packages è destinato a fornire indicazioni e un Guida rapida. Personalizzali in base alle tue esigenze.

Selettori dei gateway

Applichi un Gateway configurazione ai proxy istio-ingressgateway e istio-egressgateway gestire il traffico in entrata e in uscita per il tuo mesh, consentendoti di specificare quale il traffico che vuoi che entri o escano dalla rete. Le etichette su un gateway dei pod del deployment vengono utilizzati dalle risorse di configurazione del gateway, che il selettore del gateway corrisponda a queste etichette.

Ad esempio, nei deployment precedenti, l'etichetta istio=ingressgateway è impostata sui pod del gateway. Per applicare una configurazione del gateway a questi deployment, devi selezionare la stessa etichetta:

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
...

Per un esempio di configurazione del gateway e di un servizio virtuale, vedi frontend.yaml nell'applicazione di esempio Online Boutique.

Esegui l'upgrade dei gateway

Upgrade in loco

Per la maggior parte dei casi d'uso, devi eseguire l'upgrade dei gateway seguendo le istruzioni in loco pattern di upgrade. Poiché i gateway utilizzano l'inserimento di pod, i nuovi pod gateway vengono automaticamente inserite la configurazione più recente, include la versione.

Se vuoi cambiare la revisione del piano di controllo in uso dal gateway, puoi impostare l'etichetta istio.io/rev sul deployment del gateway, che attivare un riavvio in sequenza.

Piano di controllo gestito

Poiché Google gestisce gli upgrade per il piano di controllo gestito, basta riavviare il deployment del gateway e i nuovi pod automaticamente l'ultima configurazione e la versione più recente.

kubectl rollout restart deployment istio-ingressgateway \
  -n GATEWAY_NAMESPACE

Piano di controllo in-cluster

Per applicare lo stesso pattern ai gateway quando hai il controllo nel cluster devi modificare la revisione del piano di controllo utilizzata dal gateway. Imposta l'etichetta istio.io/rev sul deployment del gateway che attiverà una il riavvio in sequenza. I passaggi richiesti variano a seconda che sia necessario aggiornare o meno il l'etichetta di revisione sullo spazio dei nomi e/o sul pod del gateway.

  • Se hai etichettato lo spazio dei nomi per l'inserimento, imposta l'etichetta istio.io/rev su lo spazio dei nomi al nuovo valore di revisione:

      kubectl label namespace GATEWAY_NAMESPACE \
        istio-injection- istio.io/rev=REVISION \
        --overwrite
    
  • Se hai abilitato l'inserimento solo per il pod gateway, imposta istio.io/rev sul deployment al nuovo valore di revisione come la seguente File YAML Kubernetes:

    cat <<EOF > gateway-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: istio-ingressgateway
      namespace: GATEWAY_NAMESPACE
    spec:
      selector:
        matchLabels:
          istio: ingressgateway
      template:
        metadata:
          annotations:
            # This is required to tell Cloud Service Mesh to inject the gateway with the
            # required configuration.
            inject.istio.io/templates: gateway
          labels:
            istio: ingressgateway
            istio.io/rev: REVISION
        spec:
          containers:
          - name: istio-proxy
            image: auto # The image will automatically update each time the pod starts.
    EOF
    
    kubectl apply -f gateway-deployment.yaml
    

Upgrade canary (avanzati)

Se utilizzi il piano di controllo nel cluster e vuoi rallentare controllare l'implementazione di una nuova revisione del piano di controllo, puoi seguire pattern di upgrade. Puoi eseguire più versioni di un deployment assicurarti che tutto funzioni come previsto con un sottoinsieme del tuo traffico. Ad esempio: se vuoi implementare una nuova revisione, canary, crea una copia del gateway Deployment con l'etichetta istio.io/rev=REVISION impostata su nuova revisione e un nuovo nome, ad esempio istio-ingressgateway-canary:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istio-ingressgateway-canary
  namespace: GATEWAY_NAMESPACE
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  template:
    metadata:
      annotations:
        inject.istio.io/templates: gateway
      labels:
        istio: ingressgateway
        istio.io/rev: REVISION # Set to the control plane revision you want to deploy
    spec:
      containers:
      - name: istio-proxy
        image: auto

Una volta creato il deployment, avrai due versioni Gateway, entrambi selezionati dallo stesso servizio:

kubectl get endpoints -o "custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name"

NAME                   PODS
istio-ingressgateway   istio-ingressgateway-788854c955-8gv96,istio-ingressgateway-canary-b78944cbd-mq2qf

Se ritieni che le tue applicazioni funzionino come previsto, esegui questo per passare alla nuova versione eliminando il deployment con il precedente Set di etichette istio.io/rev:

kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE

Se hai riscontrato un problema durante il test dell'applicazione con la nuova versione del gateway, esegui questo comando per tornare alla versione precedente Eliminando il deployment con il nuovo set di etichette istio.io/rev:

kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE

Configurazione avanzata

Configura la versione TLS minima del gateway

Per Cloud Service Mesh, la versione TLS minima predefinita per i server gateway è 1.2. Puoi configurare la versione TLS minima utilizzando il campo minProtocolVersion. Per ulteriori informazioni, vedi ServerTLSSettings.

Funzionalità non supportate

Se hai TRAFFIC_DIRECTOR l'implementazione del piano di controllo, i seguenti campi o valori in Gateway non sono supportati:

  • ServerTLSSettings.TLSmode con valore AUTO_PASSTHROUGH
  • ServerTLSSettings.verifyCertificateSpki
  • ServerTLSSettings.verifyCertificateHash

Risolvi i problemi relativi ai gateway

Impossibile aggiornare l'immagine del gateway da auto

Quando esegui il deployment o l'upgrade di un gateway, Cloud Service Mesh inserisce auto come nel campo image. Dopo la chiamata al webhook mutante, Cloud Service Mesh sostituisce automaticamente questo segnaposto con il valore Immagine proxy Cloud Service Mesh. Se la chiamata al webhook mutante non va a buon fine, auto rimane invariato e il container non è stato trovato. In genere si tratta di una situazione a causa di un'etichetta dello spazio dei nomi errata. Assicurati di aver configurato il corretto e quindi eseguire di nuovo il deployment o l'upgrade del gateway.