Opzioni per la configurazione dei pod di Google Kubernetes Engine mediante inserimento Envoy automatico

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

Aggiunta di proxy sidecar ai carichi di lavoro esistenti

Dopo aver installato l'iniettore sidecar nei cluster, i proxy collaterali vengono inseriti automaticamente nei pod appena creati negli spazi dei nomi abilitati. Se hai già dei carichi di lavoro in esecuzione prima dell'abilitazione dell'iniettore sidecar, devi riavviarli per l'inserimento.

Per i pod gestiti da 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 precedenti per eseguire il deployment dei pod, devi eliminare i pod singolarmente. In seguito, vengono ricreati automaticamente con i 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 fingerbox creato in precedenza, dovresti vedere 2/2 pod in esecuzione, uno per l'applicazioneimballato stessa e uno per il proxy sidecar Envoy inserito:

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

Override di inserimento

Per impostazione predefinita, l'abilitazione di uno spazio dei nomi abilita l'inserimento del proxy sidecar per tutti i pod residenti. L'iniezione può anche essere configurata in modo selettivo per diversi ambiti, in base a esigenze specifiche. Ad esempio, devono essere utilizzati gli override per impedire l'inserimento di proxy sidecar per i servizi gRPC senza proxy.

Tieni presente che gli override dell'inserimento si applicano solo quando lo spazio dei nomi è abilitato e hanno effetto con la seguente priorità: Annotazioni pod > NeverInjectSelector > AlwaysInjectSelector > Criterio predefinito

Attivare/disattivare l'inserimento per singoli pod specifici

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

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

Attivare/disattivare l'inserimento per gruppi specifici di pod

L'iniettore sidecar può essere configurato per inserire sempre o mai pod in spazi dei nomi abilitati in base a un array di selettori di etichette Kubernetes. Ad esempio, utilizza i seguenti comandi per configurare l'iniettore sidecar in modo che non inserisca un proxy sidecar se il pod ha l'etichetta "run=client":

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

Affinché questa configurazione venga applicata, i deployment degli iniettori collaterali esistenti devono essere riavviati.

Personalizzazione del comportamento di intercettazione del traffico

Per impostazione predefinita, tutto il traffico in uscita dall'applicazione viene intercettato e reindirizzato al proxy sidecar Envoy. Il proxy Envoy può quindi gestire il traffico secondo le istruzioni ricevute da Traffic Director. In alcuni casi, è consigliabile modificare questo comportamento per ignorare il proxy sidecar.

Utilizza le seguenti annotazioni 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 separato da virgole di intervalli di indirizzi IP in uscita in formato CIDR. Il traffico in uscita destinato a questi intervalli di indirizzi IP non viene reindirizzato al file collaterale Envoy.

Tieni presente che devi elencare 169.254.169.254/32 nell'annotazione pod per assicurarti che le applicazioni possano comunicare con il server di metadati. Se non specifichi l'annotazione del pod cloud.google.com/excludeOutboundCIDRs, l'intercettazione del traffico è configurata in modo da 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 separato da virgole di 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.

È possibile utilizzare il carattere jolly * per reindirizzare tutto il traffico in uscita. Un elenco vuoto disabilita tutto il traffico in uscita. Il valore predefinito dell'annotazione è *.

Escludi dall'intercettazione tramite 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 pod cloud.google.com/excludeOutboundPorts è un elenco separato da virgole di porte in uscita. 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 di Envoy. Equivale a passare l'annotazione cloud.google.com/excludeOutboundPorts con un elenco ("") vuoto.

Includi nell'intercettazione tramite numero di porta in entrata

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

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

L'annotazione pod cloud.google.com/includeInboundPorts è un elenco separato da virgole di porte in entrata per le quali il traffico deve essere reindirizzato al file 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 ("").

Escludi dall'intercettazione tramite 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 pod cloud.google.com/excludeInboundPorts è un elenco separato da virgole di porte in entrata da escludere dal reindirizzamento al file collaterale Envoy. L'annotazione si applica solo quando tutto il traffico in entrata (*) viene reindirizzato. Il valore predefinito è una stringa vuota ("").

Abilita certificati gestiti

Puoi abilitare i certificati dei 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 di GKE firmati da Certificate Authority Service vengono inseriti e montati sul container collaterale. Il valore predefinito dell'annotazione è false.

Configurazione dei metadati del proxy sidecar

Per supportare ulteriori funzionalità di Traffic Director, i proxy collaterali possono ereditare metadati specifici dai pod incapsulanti. Ci sono due modi per farlo. Entrambe le opzioni aggiungono metadati e li condividono con Traffic Director quando il proxy sidecar si connette a Traffic Director. Le opzioni si escludono a vicenda.

La prima opzione 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 collaterali inseriti.

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

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

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

Se non specifichi l'annotazione cloud.google.com/forwardPodLabels, le etichette dei pod non verranno aggiunte al proxy sidecar. Tieni presente che le annotazioni cloud.google.com/proxyMetadata e cloud.google.com/forwardPodLabels si escludono a vicenda. Se imposti entrambi, cloud.google.com/forwardPodLabels ha la priorità e cloud.google.com/proxyMetadata viene ignorato.

Il filtro della configurazione consente a Traffic Director 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 pod supportate

Traffic Director supporta le seguenti annotazioni pod per l'inserimento di file collaterali. Anche se potrebbero funzionare anche altre annotazioni iniettore sidecar, il seguente elenco rappresenta quelle supportate da Traffic Director. Per evitare interruzioni o instabilità, non creare una dipendenza da altre annotazioni nel deployment di produzione.

Nome annotazione Valore Descrizione
sidecar.istio.io/inject Valore booleano, rappresentato come una stringa. Ad esempio: "true" Specifica se un sidecar Envoy deve essere inserito automaticamente nel carico di lavoro.
cloud.google.com/proxyMetadata Mappa JSON delle coppie chiave-valore. Ad esempio: "'{"version": "dev"}'" Specifica le coppie chiave/valore in una mappa JSON da aggiungere ai metadati Envoy.
cloud.google.com/forwardPodLabels "true" o "false" Se impostato su "true", tutte le etichette dei pod vengono aggiunte ai metadati 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/reindirizzamento al sidecar Envoy. Questo traffico ignorerà il proxy Envoy e non verrà gestito in base alla configurazione di Traffic Director. 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 Envoy. Utilizza il carattere jolly "*" per configurare il reindirizzamento per tutte le porte. Un valore vuoto disabilita tutti i reindirizzamenti in entrata. Il valore predefinito è 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 non viene reindirizzato al file collaterale 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 qualsiasi di questi IP di destinazione è escluso dall'intercettazione/reindirizzamento al file collaterale Envoy. Questo traffico ignorerà il proxy Envoy e non verrà gestito in base alla configurazione di Traffic Director. 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, pertanto se specifichi l'annotazione "excludeOutboundCIDRs", assicurati di includere anche "169.254.169.254/32" oltre a qualsiasi altro CIDR. Assicurati che l'elenco separato da virgole non contenga spazi.
cloud.google.com/includeOutboundCIDRs Elenco separato da virgole di intervalli IP in uscita in formato CIDR. Il traffico in uscita che indica uno qualsiasi di questi IP di destinazione è incluso nell'intercettazione/reindirizzamento al file collaterale Envoy. Questo traffico viene indirizzato al proxy Envoy e viene gestito in base alla configurazione di Traffic Director. 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, pertanto se specifichi l'annotazione "includeOutboundCIDRs", assicurati di includere anche "169.254.169.254/32" oltre a qualsiasi altro CIDR. Assicurati che l'elenco separato da virgole non contenga spazi.
cloud.google.com/enableManagedCerts Valore booleano, rappresentato come una stringa. Ad esempio: "true" Se impostato su "true", i certificati dei carichi di lavoro gestiti di GKE firmati da Certificate Authority Service vengono inseriti e montati nel container sidecar. Il valore predefinito è "false".

Disinstallazione dell'iniettore sidecar

Disinstalla l'iniettore sidecar con i seguenti comandi:

kubectl delete -f specs/
kubectl label namespace default istio-injection-