Versione 1.15

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Installazione e upgrade dei gateway

Anthos Service Mesh ti offre la possibilità di eseguire il deployment e la gestione dei gateway come parte del tuo mesh di servizi. Un gateway descrive un bilanciatore del carico a livello perimetrale del mesh che riceve connessioni HTTP/TCP in entrata o in uscita. I gateway sono proxy Envoy che ti forniscono un controllo granulare sul traffico in entrata e in uscita dal mesh. I gateway vengono utilizzati principalmente per gestire il traffico in entrata, ma puoi anche configurarli per gestire altri tipi di traffico. Ad esempio:

  • Gateway in uscita: un gateway in uscita ti consente di configurare un nodo di uscita dedicato per il traffico in uscita dal mesh, in modo da limitare i servizi che possono o devono accedere a reti esterne o per abilitare il controllo sicuro del traffico in uscita per aggiungere sicurezza al tuo mesh.

  • Gateway est-ovest: un proxy per il traffico east-west che consente ai carichi di lavoro di servizio di comunicare oltre i confini dei cluster in una rete mesh multi-primaria su reti diverse. Per impostazione predefinita, questo gateway sarà pubblico su Internet.

Questa pagina descrive le best practice per il deployment e l'upgrade dei proxy gateway, nonché esempi per la configurazione dei propri proxy gateway istio-ingressgateway e istio-egressgateway. Cose come la suddivisione del traffico, i reindirizzamenti e la logica per i nuovi tentativi sono possibili applicando una configurazione Gateway ai proxy gateway. Quindi, invece di aggiungere il routing del traffico a livello di applicazione (L7) alla stessa risorsa API, associ un servizio virtuale al gateway. Ciò ti consente di gestire il traffico del gateway come qualsiasi altro traffico del piano dati nel mesh di servizi.

Puoi eseguire il deployment dei gateway in modi diversi e puoi scegliere di utilizzare più di una topologia all'interno dello stesso cluster. Per scoprire di più su queste topologie, consulta la sezione relativa alle topologie di deployment del gateway nella documentazione di Istio.

Best practice per il deployment dei gateway

Le best practice per il deployment dei gateway dipendono dall'utilizzo del piano dati gestito o del piano dati non gestito.

Best practice per il piano dati gestito

  1. Attivare il piano dati gestito.
  2. Aggiungere un'etichetta di revisione gestita a uno spazio dei nomi.
  3. Esegui il deployment del piano di controllo e dei gateway separatamente.
  4. Come best practice per la sicurezza, abbiamo consigliato di eseguire il deployment dei gateway in uno spazio dei nomi diverso dal piano di controllo.
  5. Usa l'inserimento automatico del sidecar (inserimento automatico) per inserire la configurazione del proxy per i gateway in modo simile a come faresti per i proxy sidecar per i tuoi servizi.

Le seguenti best practice:

  • Assicurati che i gateway gestiti vengano aggiornati automaticamente con gli ultimi miglioramenti e aggiornamenti della sicurezza.
  • Trasferisci la gestione e la manutenzione delle istanze del gateway al piano dati gestito di Anthos Service Mesh.

Best practice per il piano dati non gestito

  1. Esegui il deployment del piano di controllo e dei gateway separatamente.
  2. Come best practice per la sicurezza, abbiamo consigliato di eseguire il deployment dei gateway in uno spazio dei nomi diverso dal piano di controllo.
  3. Usa l'inserimento automatico del sidecar (inserimento automatico) per inserire la configurazione del proxy per i gateway in modo simile a come faresti per i proxy sidecar per i tuoi servizi.

Le seguenti best practice:

  • Consenti agli amministratori dello spazio dei nomi di gestire i gateway senza richiedere privilegi elevati per l'intero cluster.
  • Consenti agli amministratori di utilizzare gli stessi strumenti o meccanismi di deployment che utilizzano per gestire le applicazioni Kubernetes per il deployment e la gestione dei gateway.
  • Offri agli amministratori il controllo completo sul deployment del gateway e semplifica le operazioni. Quando è disponibile un nuovo upgrade o viene modificata una configurazione, gli amministratori aggiornano i pod del gateway semplicemente riavviandoli. Ciò rende l'esperienza dell'utilizzo di un gateway gateway simile all'utilizzo dei proxy sidecar per i servizi.

Esegui il deployment dei gateway

Per supportare gli utenti con strumenti di deployment esistenti, Anthos Service Mesh supporta gli stessi metodi di deployment di un gateway di Istio: IstioOperator, Helm e Kubernetes YAML. Ogni metodo produce lo stesso risultato. Anche se puoi scegliere il metodo più familiare, ti consigliamo di utilizzare il metodo YAML Kubernetes, in quanto è più facile da modificare e puoi archiviare i manifest idratati nel controllo del codice sorgente.

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

    kubectl create namespace GATEWAY_NAMESPACE
    
  2. Per abilitare l'inserimento automatico, etichetta gli spazi dei nomi con le etichette di iniezione predefinite se è configurato il tag predefinito o con l'etichetta di revisione allo spazio dei nomi. L'etichetta che aggiungi dipende anche dal fatto che tu abbia eseguito o meno il deployment di Anthos Service Mesh gestito o che tu abbia installato il piano di controllo nel cluster. L'etichetta viene utilizzata dal webhook iniettore sidecar per associare le sidecar iniettate a una determinata revisione del piano di controllo.

    Seleziona la scheda di seguito in base al tipo di installazione (gestita o in-cluster).

    Gestita

    Utilizza il seguente comando per individuare i canali di rilascio disponibili:

    kubectl -n istio-system get controlplanerevision
    

    L'output è simile al seguente:

    NAME                AGE
    asm-managed         6d7h
    asm-managed-rapid   6d7h
    

    Nell'output, il valore nella colonna NAME è l'etichetta di revisione corrispondente al canale di rilascio disponibile per la versione di Anthos Service Mesh.

    In-cluster

    Per i piani di controllo nel cluster, in genere il servizio istiod e il deployment hanno un'etichetta di revisione simile a istio.io/rev=asm-1154-2, dove asm-1154-2 identifica la versione di Anthos Service Mesh. La revisione diventa parte del nome del servizio istiod, ad esempio: istiod-asm-1154-2.istio-system

    Utilizza il seguente comando per individuare l'etichetta di revisione su istiod per il piano di controllo nel cluster:

    kubectl get deploy -n istio-system -l app=istiod \
      -o=jsonpath='{.items[*].metadata.labels.istio\.io\/rev}''{"\n"}'
    
  3. Abilita lo spazio dei nomi per l'iniezione. Sostituisci e REVISION con il valore dell'etichetta di revisione.

    kubectl label namespace GATEWAY_NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
    
  4. Se hai installato Anthos Service Mesh utilizzando asmcli, passa alla directory specificata in --output_dir, quindi cd alla directory samples.

    Se non hai eseguito l'installazione utilizzando asmcli, copia i file di configurazione per i gateway dal repository anthos-service-mesh.

  5. Puoi eseguire il deployment della configurazione del gateway di esempio che si trova nella directory samples/gateways/ così com'è, oppure modificarla in base alle tue esigenze.

    Ingress

    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

Selettori del gateway

Applichi una configurazione Gateway ai proxy istio-ingressgateway e istio-egressgateway per gestire il traffico in entrata e in uscita del tuo mesh, in modo da poter specificare il traffico che vuoi inserire o uscire dal mesh. Le etichette sui pod di un deployment gateway vengono utilizzate dalle risorse di configurazione del gateway, quindi è importante che il selettore del gateway corrisponda a queste etichette.

Ad esempio, nei deployment riportati sopra, l'etichetta istio=ingressgateway è impostata sui pod del gateway. Per applicare una configurazione di 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 di Gateway e Virtual Service, consulta frontend.yaml nell'applicazione di esempio Online Boutique.

Upgrade dei gateway

Upgrade in loco

Nella maggior parte dei casi d'uso, è necessario eseguire l'upgrade dei gateway seguendo il pattern di upgrade in loco. Poiché i gateway utilizzano l'iniezione di pod, i nuovi pod gateway che vengono creati verranno inseriti automaticamente con la configurazione più recente, che include la versione.

Se vuoi modificare la revisione del piano di controllo in uso da parte del gateway, puoi impostare l'etichetta istio.io/rev nel deployment del gateway, che attiverà anche il riavvio in sequenza.

Piano di controllo gestito

Poiché Google gestisce gli upgrade del piano di controllo per il piano di controllo gestito, puoi semplicemente riavviare il deployment del gateway e i nuovi pod verranno inseriti automaticamente con la configurazione e la versione più recenti.

kubectl rollout restart deployment istio-ingressgateway \
  -n GATEWAY_NAMESPACE

Piano di controllo in-cluster

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

  • Se hai etichettato lo spazio dei nomi per l'iniezione, imposta l'etichetta istio.io/rev nello spazio dei nomi sul 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 del gateway, imposta l'etichetta istio.io/rev nel deployment sul nuovo valore di revisione, come nel 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 Anthos 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 controllare più lentamente l'implementazione di una nuova revisione del piano, puoi seguire il pattern di upgrade canary. Puoi eseguire più versioni di un deployment del gateway e 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 deployment del gateway con l'etichetta istio.io/rev=REVISION impostata sulla nuova revisione e su 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 questo deployment, avrai due versioni del gateway, entrambe selezionate 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 comando per passare alla nuova versione eliminando il deployment con il vecchio 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 la nuova etichetta istio.io/rev impostata:

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

Risolvere i problemi relativi ai gateway

Impossibile aggiornare l'immagine del gateway da auto

Quando esegui il deployment o l'upgrade di un gateway, Anthos Service Mesh inserisce auto come segnaposto nel campo image. Dopo la chiamata al webhook mutante, Anthos Service Mesh sostituisce automaticamente questo segnaposto con l'effettiva immagine proxy di Anthos Service Mesh. Se la chiamata alla modifica del webhook non riesce, il segnaposto auto rimane e il container non viene trovato. Questo in genere è causato da un'etichetta dello spazio dei nomi errata. Assicurati di aver configurato lo spazio dei nomi corretto, quindi esegui nuovamente il deployment o esegui l'upgrade del gateway.