Opzioni per la configurazione dei 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 collaterali ai carichi di lavoro esistenti

Dopo aver installato l'injector dei file collaterali nei cluster, i proxy collaterali vengono inseriti automaticamente nei pod appena creati negli spazi dei nomi abilitati. Se carichi di lavoro già in esecuzione prima di abilitare l'injector sidecar, devi riavviale per consentire l'iniezione.

Per i pod gestiti da controller Deployment, DaemonSet o StatefulSet, esegui questo comando:

# 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 riportati 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 container proxy sidecar sia stato inserito in ciascuno dei tuoi pod:

kubectl get pods -n NAMESPACE

Ad esempio, con il client trafficato creato in precedenza, dovresti vedere 2/2 pod una per l'applicazione trafficata e una per l' Envoy inserito proxy sidecar:

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 abilita l'inserimento di proxy sidecar per tutti dei pod residenti. L'inserimento può anche essere configurato in modo selettivo per ambiti diversi per soddisfare esigenze specifiche. Ad esempio, è necessario utilizzare gli override per impedire iniezione di proxy sidecar per servizi gRPC senza proxy.

Tieni presente che gli override dell'inserimento si applicano solo quando lo spazio dei nomi è abilitato e entreranno in vigore con la seguente priorità: Annotazioni sui pod > NeverInjectSelector > AlwaysInjectSelector > Predefinita Norme

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

Escludi 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 virgola. 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 è separata da virgole degli intervalli di indirizzi IP in uscita in formato CIDR. 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 tramite la porta in uscita numero.

...
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 è separata da virgole elenco di porte in entrata verso le quali il traffico deve essere reindirizzato a Envoy di terze parti. 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

È possibile 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 è separata da virgole elenco di porte in entrata 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 ("").

Abilita certificati gestiti

Puoi attivare i certificati dei carichi di lavoro gestiti.

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

Quando l'annotazione pod cloud.google.com/enableManagedCerts è impostata su true, Certificati dei carichi di lavoro gestiti di GKE firmati da Certificate Authority Service vengono inserite e montate sul container collaterale. Il valore dell'annotazione è predefinito su false.

Configurazione dei metadati del proxy sidecar

Per supportare funzionalità aggiuntive di Cloud Service Mesh, i proxy sidecar possono ereditare e metadati specifici dai propri pod incapsulati. Ci sono due modi per ottenere questo. 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. Per Ad esempio, includi la seguente annotazione nella specifica del modello di pod applicare l'etichetta "version": "dev" ai proxy sidecar inseriti.

...
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, il pod le etichette non verranno aggiunte al proxy sidecar. Tieni presente che le annotazioni cloud.google.com/proxyMetadata e cloud.google.com/forwardPodLabels sono mutuamente esclusive. Se li 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 sui pod supportate

Cloud Service Mesh supporta le seguenti annotazioni dei pod per l'iniezione di sidecar. Anche se potrebbero funzionare anche altre annotazioni degli iniettori collaterali, le annotazioni supportate da Cloud Service Mesh. A 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 "vero" 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 separato da virgole di porte in uscita 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 (ad es. "").
cloud.google.com/includeInboundPorts Elenco separato da virgole di porte in entrata Un elenco separato da virgole di porte in entrata per le quali il traffico viene reindirizzato al file collaterale di Envoy. Utilizza il carattere jolly "*" per e configurare il reindirizzamento per tutte le porte. Un valore vuoto disattiva tutto il reindirizzamento in entrata. Per impostazione predefinita, il valore è una stringa vuota ("").
cloud.google.com/excludeInboundPorts Elenco separato da virgole di porte in entrata Un elenco separato da virgole di porte in entrata per le quali il traffico viene non vengono reindirizzati al file collaterale di 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 indirizzi 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 se specifichi l'annotazione "excludedOutboundCIDRs", assicurati di inserire anche includi "169.254.169.254/32" oltre a qualsiasi altro CIDR. Assicurati che non siano presenti spazi nell'elenco separato da virgole.
cloud.google.com/includeOutboundCIDRs Elenco separato da virgole di intervalli IP in uscita in formato CIDR. Traffico in uscita che indica che uno di questi IP di destinazione è incluso nell'intercettazione/reindirizzamento al file collaterale di 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 se specifichi l'annotazione "includeOutboundCIDRs", assicurati di inserire anche includi "169.254.169.254/32" oltre a qualsiasi altro CIDR. Assicurati che non siano presenti spazi nell'elenco separato da virgole.
cloud.google.com/enableManagedCerts Valore booleano, rappresentato come una stringa. Ad esempio: "true" Se impostato su "true", i certificati del carico di lavoro gestito da GKE firmati dal servizio Certificate Authority vengono inseriti e montati nel contenitore sidecar. Il valore predefinito è "false".

Disinstallazione dell'iniettore collaterale

Disinstalla l'iniettore sidecar con i seguenti comandi:

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