Opzioni per la configurazione del pod di Google Kubernetes Engine mediante l'inserimento automatico di Envoy

Questa guida fornisce informazioni su opzioni e attività aggiuntive per l'iniettore sidecar Envoy automatico.

Aggiunta di proxy sidecar ai carichi di lavoro esistenti

Dopo aver installato l'iniettore sidecar nei tuoi cluster, i proxy sidecar vengono iniettati automaticamente nei pod appena creati negli spazi dei nomi abilitati. Se hai già dei carichi di lavoro in esecuzione prima di attivare l'iniettore sidecar, devi riavviarli affinché l'iniezione venga eseguita.

Per i pod gestiti dai controller Deployment, DaemonSet o StatefulSet, puoi eseguire quanto segue:

# Deployment
kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

Se non hai utilizzato nessuno dei controller sopra indicati per eseguire il deployment dei pod, devi eliminare i pod singolarmente. Successivamente, vengono ricreati automaticamente con nuovi proxy sidecar.

kubectl delete pod POD_NAME -n NAMESPACE

Verifica che un contenitore proxy sidecar sia stato iniettato in ogni pod:

kubectl get pods -n NAMESPACE

Ad esempio, con il client busybox creato sopra, dovresti vedere 2/2 pod in esecuzione, uno per l'applicazione busybox stessa e uno per il proxy sidecar Envoy iniettato:

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

Sostituzioni di iniezione

Per impostazione predefinita, l'attivazione di uno spazio dei nomi consente l'inserimento di proxy sidecar per tutti i pod residenti. L'iniezione può essere configurata anche in modo selettivo per ambiti diversi per soddisfare esigenze specifiche. Ad esempio, le sostituzioni devono essere utilizzate per impedire l'iniezione di proxy sidecar per i servizi gRPC senza proxy.

Tieni presente che le sostituzioni di inserimento si applicano solo quando il nome dello spazio è abilitato e entrano in vigore con la seguente priorità: Annotazioni del pod > NeverInjectSelector > AlwaysInjectSelector > Norme predefinite

Attivazione o disattivazione dell'iniezione per singoli pod specifici

Utilizza la seguente annotazione del pod per attivare o disattivare l'iniezione per un pod specifico in uno spazio dei nomi abilitato:

...
metadata:
  annotations:
    td-injection: "true" / "false"

Personalizzazione del comportamento di intercettazione del traffico

Per impostazione predefinita, tutto il traffico in uscita dalla tua applicazione viene intercettato e reindirizzato al proxy sidecar Envoy. Il proxy Envoy può quindi gestire il traffico in base alle istruzioni ricevute da Cloud Service Mesh. In alcuni casi, potresti voler modificare questo comportamento per bypassare il proxy sidecar.

Utilizza le seguenti annotazioni del pod per escludere il traffico dall'intercettazione e dal reindirizzamento.

Esclusione dall'intercettazione in base all'intervallo di indirizzi IP in uscita

Puoi escludere il traffico dall'intercettazione in base all'intervallo di indirizzi IP.

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"

L'annotazione del pod cloud.google.com/excludeOutboundCIDRs è un elenco di intervalli di indirizzi IP in uscita in formato CIDR separati da virgole. Il traffico in uscita destinato a questi intervalli di indirizzi IP non viene reindirizzato al sidecar Envoy.

Tieni presente che devi elencare 169.254.169.254/32 nell'annotazione del pod per assicurarti che le applicazioni possano comunicare con il server dei metadati. Se non specifichi l'annotazione del pod cloud.google.com/excludeOutboundCIDRs, l'intercettazione del traffico è configurata per escludere l'intervallo CIDR in uscita "169.254.169.254/32".

Includi nell'intercettazione in base all'intervallo di indirizzi IP in uscita

Puoi includere il traffico nell'intercettazione in base all'intervallo di indirizzi IP.

...
metadata:
  annotations:
    cloud.google.com/includeOutboundCIDRs: "10.0.0.1/32,169.254.169.254/32"

L'annotazione del pod cloud.google.com/includeOutboundCIDRs è un elenco di intervalli di indirizzi IP in uscita in formato CIDR separati da virgole. Il traffico in uscita destinato a questi intervalli di indirizzi IP viene reindirizzato al sidecar Envoy.

Il carattere jolly * può essere utilizzato per reindirizzare tutto il traffico in uscita. Un elenco vuoto disattiva tutto il traffico in uscita. Il valore predefinito dell'annotazione è *.

Escludi dall'intercettazione in base al numero di porta in uscita

Puoi escludere il traffico dall'intercettazione e dal reindirizzamento in base al numero di porta in uscita.

...
metadata:
  annotations:
    cloud.google.com/excludeOutboundPorts: "10001, 10002"

L'annotazione del pod cloud.google.com/excludeOutboundPorts è un elenco di porte in uscita separate da virgole. Il traffico in uscita destinato a queste porte è escluso dall'intercettazione e dal reindirizzamento al sidecar Envoy.

Se non specifichi l'annotazione cloud.google.com/excludeOutboundPorts, il traffico in uscita destinato a qualsiasi porta viene intercettato e reindirizzato al sidecar Envoy. Ciò equivale a passare l'annotazione cloud.google.com/excludeOutboundPorts con un elenco vuoto ("").

Includi nell'intercettazione in base al numero di porta in entrata

Puoi includere il traffico nell'intercettazione in base al numero di porta in entrata.

...
metadata:
  annotations:
    cloud.google.com/includeInboundPorts: "10001, 10002"

L'annotazione del pod cloud.google.com/includeInboundPorts è un elenco separato da virgole di porte in entrata per le quali il traffico deve essere reindirizzato al sidecar Envoy. Il carattere jolly * può essere utilizzato per configurare il reindirizzamento per tutte le porte. Un valore vuoto disattiva tutti i reindirizzamenti in entrata. Il valore predefinito è una stringa vuota ("").

Esclusione dall'intercettazione in base al numero di porta in entrata

Puoi escludere il traffico dall'intercettazione in base al numero di porta in entrata.

...
metadata:
  annotations:
    cloud.google.com/excludeInboundPorts: "10001, 10002"

L'annotazione del pod cloud.google.com/excludeInboundPorts è un elenco di porte in entrata separate da virgole da escludere dal reindirizzamento al sidecar Envoy. L'annotazione si applica solo quando tutto il traffico in entrata (*) viene reindirizzato. Il valore predefinito è una stringa vuota ("").

Attiva i certificati gestiti

Puoi attivare i certificati per i carichi di lavoro gestiti.

...
metadata:
  annotations:
    cloud.google.com/enableManagedCerts: "true"

Quando l'annotazione del pod cloud.google.com/enableManagedCerts è impostata su true, i certificati dei carichi di lavoro gestiti da GKE firmati da Certificate Authority Service vengono inseriti e montati sul contenitore sidecar. Il valore dell'annotazione è false per impostazione predefinita.

Configurazione dei metadati del proxy sidecar

Per supportare altre funzionalità di Cloud Service Mesh, i proxy sidecar possono ereditare metadati specifici dai pod di incapsulamento. Puoi farlo in due modi. Entrambe le opzioni aggiungono i metadati e li condividono con Cloud Service Mesh quando il proxy sidecar si connette a Cloud Service Mesh. Le opzioni sono mutuamente esclusive.

La prima opzione ti consente di specificare singole coppie chiave/valore dei metadati. Ad esempio, includi la seguente annotazione nella specifica del modello di pod per applicare l'etichetta "version": "dev" ai proxy sidecar iniettati.

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "dev"}'

La seconda opzione aggiunge tutte le etichette del pod al proxy sidecar iniettato del pod.

...
metadata:
  annotations:
    cloud.google.com/forwardPodLabels: "true"

Se non specifichi l'annotazione cloud.google.com/forwardPodLabels, le etichette del pod non verranno aggiunte al proxy sidecar. Tieni presente che le annotazioni cloud.google.com/proxyMetadata e cloud.google.com/forwardPodLabels sono mutuamente esclusive. Se imposti entrambi, cloud.google.com/forwardPodLabels ha la priorità e cloud.google.com/proxyMetadata viene ignorato.

Il filtro delle configurazioni consente quindi a Cloud Service Mesh di condividere un sottoinsieme di configurazione solo con i proxy specifici che corrispondono a questa etichetta "version": "dev".

Per applicare questa configurazione, è necessario riavviare i deployment esistenti.

Annotazioni dei pod supportate

Cloud Service Mesh supporta le seguenti annotazioni dei pod per l'iniezione di sidecar. Sebbene altre annotazioni dell'iniettore sidecar potrebbero funzionare, il seguente elenco rappresenta le annotazioni supportate da Cloud Service Mesh. Per evitare interruzioni o instabilità, non creare una dipendenza da altre annotazioni nel deployment di produzione.

Nome annotazione Valore Descrizione
td-injection Booleano, rappresentato come stringa. Ad esempio: "true" Specifica se un sidecar Envoy deve essere inserito automaticamente nel carico di lavoro.
cloud.google.com/proxyMetadata Mappa JSON di coppie chiave-valore. Ad esempio: "'{"version": "dev"}'" Specifica le coppie chiave/valore in una mappa JSON da aggiungere ai metadati di Envoy.
cloud.google.com/forwardPodLabels "true" o "false" Se impostato su "true", tutte le etichette dei pod vengono aggiunte ai metadati di Envoy e l'annotazione "cloud.google.com/proxyMetadata" viene ignorata. Il valore predefinito è "false".
cloud.google.com/excludeOutboundPorts Elenco di porte in uscita separate da virgole Il traffico in uscita che indica una di queste porte di destinazione è escluso dall'intercettazione/dal reindirizzamento al sidecar Envoy. Questo traffico aggirerà il proxy Envoy e non verrà gestito in base alla configurazione di Cloud Service Mesh. Il valore predefinito è una stringa vuota ("").
cloud.google.com/includeInboundPorts Elenco di porte in entrata separate da virgole Un elenco separato da virgole di porte in entrata per le quali il traffico viene reindirizzato al sidecar Envoy. Utilizza il carattere jolly "*" per configurare il reindirizzamento per tutte le porte. Un valore vuoto disattiva tutto il reindirizzamento in entrata. Il valore predefinito è una stringa vuota ("").
cloud.google.com/excludeInboundPorts Elenco di porte in entrata separate da virgole Un elenco separato da virgole di porte in entrata per le quali il traffico non viene reindirizzato al sidecar Envoy. L'annotazione si applica solo quando tutto il traffico in entrata (*) viene reindirizzato. Il valore predefinito è una stringa vuota ("").
cloud.google.com/excludeOutboundCIDRs Elenco separato da virgole di intervalli IP in uscita in formato CIDR. Il traffico in uscita che indica uno di questi IP di destinazione è escluso dall'intercettazione/dal reindirizzamento al sidecar Envoy. Questo traffico aggirerà il proxy Envoy e non verrà gestito in base alla configurazione di Cloud Service Mesh. Il valore predefinito è "169.254.169.254/32", ovvero l'intervallo necessario per comunicare con il server di metadati. Tieni presente che questo intervallo è obbligatorio, quindi se specifichi l'annotazione "excludeOutboundCIDRs", assicurati di includere anche "169.254.169.254/32" oltre a eventuali altri CIDR. Assicurati che non ci siano spazi nell'elenco separato da virgole.
cloud.google.com/includeOutboundCIDRs Elenco separato da virgole di intervalli IP in uscita in formato CIDR. Il traffico in uscita che indica uno di questi IP di destinazione è incluso nell'intercettazione/nel reindirizzamento al sidecar Envoy. Questo traffico viene indirizzato al proxy Envoy e gestito in base alla configurazione di Cloud Service Mesh. Il valore predefinito è "169.254.169.254/32", ovvero l'intervallo necessario per comunicare con il server di metadati. Tieni presente che questo intervallo è obbligatorio, quindi se specifichi l'annotazione "includeOutboundCIDRs", assicurati di includere anche "169.254.169.254/32" oltre a eventuali altri CIDR. Assicurati che non ci siano spazi nell'elenco separato da virgole.
cloud.google.com/enableManagedCerts Booleano, rappresentato come stringa. Ad esempio: "true" Se impostato su "true", i certificati dei carichi di lavoro gestiti da GKE firmati da Certificate Authority Service vengono inseriti e montati nel contenitore sidecar. Il valore predefinito è "false".

Disinstallazione dell'iniettore sidecar

Disinstalla l'iniettore sidecar con i seguenti comandi:

kubectl delete MutatingWebhookConfiguration td-mutating-webhook
kubectl label namespace default td-injection-