Inserire proxy sidecar con Cloud Service Mesh
Questo documento illustra come configurare l'iniezione di proxy sidecar con Cloud Service Mesh per migliorare la sicurezza, l'affidabilità e l'osservabilità della rete. Queste funzioni vengono rimosse dal contenitore principale dell'applicazione e implementate in un proxy out-of-process comune (il sidecar), pubblicato come contenitore separato nello stesso pod. In questo modo, potrai usufruire delle funzionalità di Cloud Service Mesh senza dover riprogettare le tue applicazioni di produzione per partecipare a un mesh di servizi.
L'iniezione automatica del proxy sidecar (iniezione automatica) si verifica quando Cloud Service Mesh rileva un'etichetta dello spazio dei nomi configurata per il pod del carico di lavoro. Il proxy intercetta tutto il traffico in entrata e in uscita verso i carichi di lavoro e comunica con Cloud Service Mesh.
Attivazione dell'iniezione automatica di sidecar
Il modo consigliato per iniettare i proxy sidecar è utilizzare l'iniettore sidecar automatico basato su webhook, anche se puoi aggiornare manualmente la configurazione Kubernetes dei pod.
Per attivare l'iniezione automatica, etichetta gli spazi dei nomi con le
etichette di inserimento predefinite
se è configurato il tag predefinito o con la
etichetta di revisione per lo spazio dei nomi.
L'etichetta aggiunta dipende anche dal fatto che tu abbia eseguito il deployment di Cloud Service Mesh gestito (con l'API Fleet o con asmcli
) o abbia installato il control plane in-cluster. L'etichetta viene utilizzata dall'webhook di inserimento dei sidecar per associare i sidecar iniettati a una determinata revisione del control plane.
Per attivare l'iniezione automatica:
All'interno del cluster
Utilizza il seguente comando per individuare l'etichetta di revisione su
istiod
:kubectl -n istio-system get pods -l app=istiod --show-labels
L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-11910-9-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586 istiod-asm-11910-9-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-11910-9,istio=istiod,pod-template-hash=5788d57586
Nell'output, nella colonna
LABELS
, prendi nota del valore dell'etichetta di revisioneistiod
, che segue il prefissoistio.io/rev=
. In questo esempio, il valore èasm-11910-9
.Applica l'etichetta di revisione agli spazi dei nomi e rimuovi l'etichetta istio-injection (se esistente). Nel seguente comando,
NAMESPACE
è il nome dello spazio dei nomi in cui vuoi attivare l'iniezione automatica eREVISION
è l'etichetta di revisione che hai annotato nel passaggio precedente.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Puoi ignorare il messaggio
"istio-injection not found"
nell'output. Ciò significa che in precedenza lo spazio dei nomi non aveva l'etichettaistio-injection
, che dovresti aspettarti nelle nuove installazioni di Cloud Service Mesh o nei nuovi deployment. Poiché il comportamento di inserimento automatico non è definito quando uno spazio dei nomi ha sia l'etichettaistio-injection
sia l'etichetta di revisione, tutti i comandikubectl label
nella documentazione di Cloud Service Mesh assicurano esplicitamente che ne sia impostato solo uno.Riavviare i pod interessati seguendo i passaggi descritti nella sezione successiva.
Mesh di servizi gestito
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
Nell'output, seleziona il valore nella colonna
NAME
corrispondente all'etichettaREVISION
del canale di rilascio disponibile per la versione di Cloud Service Mesh. Applica questa etichetta ai tuoi spazi dei nomi erimuovi l'etichettaistio-injection
(se esistente). Nel comando seguente, sostituisciREVISION
con l'etichetta della revisione che hai annotato sopra eNAMESPACE
con il nome dello spazio dei nomi in cui vuoi attivare l'iniezione automatica:kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
Puoi ignorare il messaggio
"istio-injection not found"
nell'output. Ciò significa che in precedenza lo spazio dei nomi non aveva l'etichettaistio-injection
, che dovresti aspettarti nelle nuove installazioni di Cloud Service Mesh o nei nuovi deployment. Poiché il comportamento di inserimento automatico non è definito quando uno spazio dei nomi ha sia l'etichettaistio-injection
sia l'etichetta di revisione, tutti i comandikubectl label
nella documentazione di Cloud Service Mesh assicurano esplicitamente che ne sia impostato solo uno.Riavviare i pod interessati seguendo i passaggi descritti nella sezione successiva.
Se hai implementato anche il piano dati gestito da Google facoltativo, annotata lo spazio dei nomi
demo
come segue:kubectl annotate --overwrite namespace YOUR_NAMESPACE \ mesh.cloud.google.com/proxy='{"managed":"true"}'
Riavvia i pod per aggiornare i proxy sidecar
Con l'inserimento automatico dei sidecar, puoi aggiornare i sidecar per i pod esistenti con un riavvio del pod:
La modalità di riavvio dei pod dipende dal fatto che siano stati creati nell'ambito di un deployment.
Se hai utilizzato un deployment, riavvialo, il che riavvia tutti i pod con i sidecar:
kubectl rollout restart deployment -n YOUR_NAMESPACE
Se non hai utilizzato un deployment, elimina i pod, che verranno rielaborati automaticamente con i sidecar:
kubectl delete pod -n YOUR_NAMESPACE --all
Verifica che in tutti i pod nello spazio dei nomi siano stati iniettati i sidecar:
kubectl get pod -n YOUR_NAMESPACE
Nell'esempio di output del comando precedente riportato di seguito, tieni presente che la colonna
READY
indica che esistono due contenitori per ogni carico di lavoro: il contenitore principale e il contenitore per il proxy sidecar.NAME READY STATUS RESTARTS AGE YOUR_WORKLOAD 2/2 Running 0 20s ...
Passaggi successivi
Scopri di più su:
- Revisioni del piano di controllo di Cloud Service Mesh
- Deployment dei carichi di lavoro
- Personalizzazione dell'iniezione