Revisioni del control plane di Cloud Service Mesh
Questa pagina si applica alle implementazioni del ISTIOD
control plane in-cluster e gestito.
Questa pagina non si applica all'implementazione del control plane TRAFFIC_DIRECTOR
, che è un control plane globale multi-tenant, senza revisioni individuali.
Questa pagina descrive il funzionamento delle revisioni del piano di controllo e il valore del loro utilizzo per upgrade (e rollback) sicuri di mesh di servizi.
Nozioni di base sull'installazione di Service Mesh
A livello generale, l'installazione di Cloud Service Mesh è costituita da due fasi principali:
Per prima cosa, utilizza lo strumento
asmcli
per installare un piano di controllo in-cluster o configurare il piano di controllo gestito. Il control plane è costituito da un insieme di servizi di sistema responsabili della gestione della configurazione del mesh.Successivamente, implementi un proxy sidecar speciale in tutto l'ambiente che intercetta la comunicazione di rete da e verso ogni workload. I proxy comunicano con il piano di controllo per ottenere la configurazione, il che ti consente di indirizzare e controllare il traffico (traffico del piano dati) nella mesh senza apportare modifiche ai tuoi workload.
Per eseguire il deployment dei proxy, utilizzi un processo chiamato inserimento automatico di sidecar (inserimento automatico) per eseguire un proxy come container sidecar aggiuntivo in ciascuno dei pod del workload. Non devi modificare i manifest Kubernetes che utilizzi per eseguire il deployment dei tuoi workload, ma devi aggiungere un'etichetta ai tuoi spazi dei nomi e riavviare i pod.
Utilizzare le revisioni per eseguire l'upgrade della mesh in modo sicuro
La possibilità di controllare il traffico è uno dei principali vantaggi dell'utilizzo di un mesh di servizi. Ad esempio, puoi spostare gradualmente il traffico verso una nuova versione di un'applicazione quando la implementi per la prima volta in produzione. Se rilevi problemi durante l'upgrade, puoi reindirizzare il traffico alla versione originale, fornendo un mezzo di rollback semplice e a basso rischio. Questa procedura è nota come release canary e riduce notevolmente il rischio associato ai nuovi deployment.
Se utilizzi le revisioni del control plane in un upgrade canary, installi un nuovo control plane e una nuova configurazione separati insieme al control plane esistente. Il programma di installazione assegna una stringa denominata revisione per identificare il nuovo piano di controllo. All'inizio, i proxy sidecar continuano a ricevere la configurazione dalla versione precedente del control plane. Associa gradualmente i workload al nuovo piano di controllo etichettando i relativi spazi dei nomi o pod con la nuova revisione del piano di controllo. Dopo aver etichettato uno spazio dei nomi o i pod con la nuova revisione, riavvia i pod del carico di lavoro in modo che i nuovi sidecar vengano inseriti automaticamente e ricevano la configurazione dal nuovo control plane. In caso di problemi, puoi eseguire facilmente il rollback associando i workload al control plane originale.
Come funziona l'iniezione automatica?
L'iniezione automatica utilizza una funzionalità di Kubernetes chiamata controllo di ammissione. Un webhook di ammissione mutante è registrato per monitorare i pod appena creati. Il webhook è configurato con un selettore dello spazio dei nomi in modo che corrisponda solo ai pod che vengono sottoposti a deployment negli spazi dei nomi con un'etichetta specifica. Quando un pod corrisponde, il webhook consulta un servizio di inserimento fornito dal control plane per ottenere una nuova configurazione modificata per il pod, che contiene i container e i volumi necessari per eseguire il sidecar.
- Durante l'installazione viene creata una configurazione webhook. Il webhook è registrato con il server dell'API Kubernetes.
- Il server API Kubernetes monitora i deployment dei pod negli spazi dei nomi che corrispondono al webhook
namespaceSelector
. - Uno spazio dei nomi è etichettato in modo che corrisponda a
namespaceSelector
. - I pod di cui è stato eseguito il deployment nello spazio dei nomi attivano il webhook.
- Il servizio
inject
fornito dal control plane modifica le specifiche del pod per inserire automaticamente il container collaterale.
Che cos'è una revisione?
L'etichetta utilizzata per l'iniezione automatica è come qualsiasi altra etichetta Kubernetes definita dall'utente. Un'etichetta è essenzialmente una coppia chiave-valore che può essere utilizzata per supportare il concetto di etichettatura. Le etichette sono ampiamente utilizzate per il tagging e per le revisioni. Ad esempio, tag Git, tag Docker e revisioni Knative.
L'attuale procedura di installazione di Cloud Service Mesh consente di etichettare il control plane installato con una stringa di revisione. Il programma di installazione etichetta ogni oggetto del control plane
con la revisione. La chiave nella coppia chiave-valore è istio.io/rev
, ma
il valore dell'etichetta di revisione è diverso per il control plane gestito e per i
control plane nel cluster.
Per i piani di controllo in-cluster, il servizio e il deployment
istiod
in genere hanno un'etichetta di revisione simile aistio.io/rev=asm-1253-11
, doveasm-1253-11
identifica la versione di Cloud Service Mesh. La revisione diventa parte del nome del servizio, ad esempio:istiod-asm-1253-11.istio-system
Per il control plane gestito, l'etichetta di revisione corrisponde a un canale di rilascio:
Etichetta revisione Canale istio.io/rev=asm-managed
Normale istio.io/rev=asm-managed-rapid
Rapido istio.io/rev=asm-managed-stable
Stabile
Inoltre, puoi utilizzare
etichette di inserimento predefinite
(ad esempio, istio-injection=enabled
).
Per abilitare l'iniezione automatica, aggiungi un'etichetta di revisione agli spazi dei nomi che corrisponda all'etichetta di revisione sul control plane. Ad esempio, un piano di controllo
con revisione istio.io/rev=asm-1253-11
seleziona i pod negli spazi dei nomi con
l'etichetta istio.io/rev=asm-1253-11
e inserisce i sidecar.
Il processo di upgrade canary
Le etichette di revisione consentono di eseguire upgrade canary e rollback semplici del control plane in-cluster. Il controllo gestito utilizza un processo simile, ma il cluster viene aggiornato automaticamente all'ultima versione all'interno di questo canale.
I passaggi seguenti descrivono come funziona la procedura:
- Inizia con un'installazione esistente di Cloud Service Mesh o Istio open source. Non importa se gli spazi dei nomi utilizzano un'etichetta di revisione
o l'etichetta
istio-injection=enabled
. - Utilizza una stringa di revisione quando installi la nuova versione del
control plane. A causa della stringa di revisione, il nuovo control plane viene installato
insieme alla versione esistente. La nuova installazione include una nuova configurazione webhook con un
namespaceSelector
configurato per monitorare gli spazi dei nomi con quell'etichetta di revisione specifica. - Esegui la migrazione dei proxy sidecar al nuovo piano di controllo rimuovendo la vecchia etichetta dallo spazio dei nomi, aggiungendo la nuova etichetta di revisione e riavviando i pod. Se utilizzi le revisioni con Cloud Service Mesh, devi interrompere l'utilizzo dell'etichetta
istio-injection=enabled
. Un control plane con una revisione non seleziona i pod negli spazi dei nomi con un'etichettaistio-injection
, anche se è presente un'etichetta di revisione. Il webhook per il nuovo piano di controllo inserisce i sidecar nei pod. - Testa attentamente i workload associati al control plane di cui è stato eseguito l'upgrade e continua a implementare l'upgrade o esegui il rollback al control plane originale.
Dopo aver associato i pod al nuovo piano di controllo, il piano di controllo e l'webhook esistenti sono ancora installati. Il vecchio webhook non ha effetto sui pod negli spazi dei nomi di cui è stata eseguita la migrazione al nuovo control plane. Puoi eseguire il rollback dei pod in uno spazio dei nomi al control plane originale rimuovendo la nuova etichetta di revisione, aggiungendo di nuovo l'etichetta originale e riavviando i pod. Quando hai la certezza che l'upgrade sia completato, puoi rimuovere il vecchio control plane.
Per la procedura dettagliata per l'upgrade utilizzando le revisioni, consulta la Guida all'upgrade.
Un'occhiata più da vicino a una configurazione webhook di mutating
Per comprendere meglio il webhook di mutazione per l'inserimento automatico di sidecar, esamina tu stesso la configurazione. Utilizza questo comando:
kubectl -n istio-system get mutatingwebhookconfiguration -l app=sidecar-injector -o yaml
Dovresti visualizzare una configurazione separata per ogni piano di controllo che hai installato. Un selettore dello spazio dei nomi per un control plane basato sulla revisione ha il seguente aspetto:
namespaceSelector:
matchExpressions:
- key: istio-injection
operator: DoesNotExist
- key: istio.io/rev
operator: In
values:
- asm-1253-11
Il selettore può variare a seconda della versione di Cloud Service Mesh o Istio in esecuzione. Questo selettore corrisponde agli spazi dei nomi con un'etichetta di revisione specifica,
a condizione che non abbiano anche un'etichetta istio-injection
.
Quando un pod viene distribuito in uno spazio dei nomi corrispondente al selettore, la relativa specifica viene inviata al servizio di inserimento per la mutazione. Il servizio injector da chiamare è specificato come segue:
service:
name: istiod-asm-1253-11
namespace: istio-system
path: /inject
port: 443
Il servizio è esposto dal control plane sulla porta 443 nel percorso URL inject
.
La sezione rules
specifica che il webhook deve essere applicato alla creazione del pod:
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
scope: '*'