Revisioni del piano di controllo di Cloud Service Mesh
Questa pagina si applica alle ISTIOD
implementazioni del piano di controllo in-cluster e gestite.
Questa pagina non si applica all'implementazione del piano di controllo TRAFFIC_DIRECTOR
,
un piano di controllo globale multi-tenant, senza revisioni individuali.
Questa pagina descrive il funzionamento delle revisioni del piano di controllo e il valore del loro utilizzo per gli upgrade (e i rollback) sicuri di Service Mesh.
Concetti fondamentali dell'installazione di mesh di servizi
A livello generale, l'installazione di Cloud Service Mesh prevede due fasi principali:
Innanzitutto, usa lo strumento
asmcli
per installare piano di controllo nel cluster o configurare piano di controllo gestito. Il piano di controllo è costituito da un insieme di servizi di sistema responsabili della gestione della configurazione del mesh.Successivamente, esegui il deployment di un proxy sidecar speciale nell'intero ambiente che intercetta la comunicazione di rete verso e da ciascun carico di lavoro. I proxy di comunicare con il piano di controllo per conoscerne la configurazione, di indirizzare e controllare il traffico (traffico del piano dati) attorno al tuo mesh senza apportare modifiche ai carichi di lavoro.
Per eseguire il deployment dei proxy, utilizzi un processo chiamato iniezione automatica di sidecar (iniezione automatica) per eseguire un proxy come contenitore sidecar aggiuntivo in ciascuno dei tuoi pod di carico di lavoro. Non è necessario modificare i manifest Kubernetes che utilizzi per eseguire il deployment dei carichi di lavoro, ma devi aggiungere un'etichetta ai tuoi spazi dei nomi e riavviare i pod.
Utilizzare le revisioni per eseguire l'upgrade della mesh in sicurezza
La possibilità di controllare il traffico è uno dei principali vantaggi dell'utilizzo di una mesh di servizi. Ad esempio, puoi spostare gradualmente il traffico su una nuova versione di un'applicazione quando la esegui per la prima volta in produzione. Se rilevi problemi durante l'upgrade, puoi riportare il traffico alla versione originale offrendo un metodo semplice e a basso rischio per il rollback. Questa procedura è nota come release canary e riduce notevolmente il rischio associato ai nuovi deployment.
Se utilizzi le revisioni del piano di controllo in un upgrade canary, installi un piano di controllo e una configurazione nuovi e distinti insieme a quello esistente. Il programma di installazione assegna una stringa chiamata revisione per identificare il nuovo piano di controllo. All'inizio, i proxy sidecar continuano a ricevere la configurazione dalla versione precedente del piano di controllo. Associa gradualmente i carichi di lavoro il nuovo piano di controllo, etichettando gli spazi dei nomi o i pod con il nuovo la revisione del piano d'azione. Dopo aver etichettato uno spazio dei nomi o i pod con il nuovo revisione, riavvia i pod del carico di lavoro in modo che i nuovi file collaterali vengano inseriti automaticamente e ricevono la configurazione dal nuovo piano di controllo. Se ci sono problemi, puoi facilmente eseguire il rollback associando i carichi di lavoro dal piano di controllo originale.
Come funziona l'iniezione automatica?
L'iniezione automatica utilizza una funzionalità di Kubernetes chiamata controllo dell'accesso. È registrato un webhook di ammissione con mutazioni per monitorare i pod appena creati. La webhook è configurato con un selettore dello spazio dei nomi in modo che corrisponda solo ai pod il deployment in spazi dei nomi con una particolare etichetta. Quando un pod il webhook consulta un servizio di iniezione fornito dal controllo per ottenere una nuova configurazione mutata per il pod, che contiene i container e i volumi necessari per eseguire il file collaterale.
- Durante l'installazione viene creata una configurazione webhook. Il webhook è registrato con il server API Kubernetes.
- Il server API Kubernetes controlla i deployment dei pod negli spazi dei nomi che
corrisponde al webhook
namespaceSelector
. - Uno spazio dei nomi viene 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 piano di controllo modifica le specifiche del pod per iniettare automaticamente il sidecar.
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 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 ti consente di etichettare gli elementi installati
il piano di controllo con una stringa di revisione. Il programma di installazione etichetta ogni piano di controllo
con la revisione. La chiave nella coppia chiave-valore è istio.io/rev
, ma il valore dell'etichetta di revisione è diverso per il piano di controllo gestito e per i piani di controllo in cluster.
Per i piani di controllo nel cluster, solitamente il servizio e il deployment
istiod
hanno un'etichetta di revisione simile aistio.io/rev=asm-1215-7
, doveasm-1215-7
identifica la versione di Cloud Service Mesh. La revisione viene incorporata nel nome del servizio, ad esempio:istiod-asm-1215-7.istio-system
Per il piano di controllo gestito, l'etichetta di revisione corrisponde a un canale di rilascio:
Etichetta di revisione Canale istio.io/rev=asm-managed
Normale istio.io/rev=asm-managed-rapid
Rapida istio.io/rev=asm-managed-stable
Stabile
Inoltre, hai la possibilità di utilizzare
etichette di inserimento predefinite
(ad es. istio-injection=enabled
).
Per attivare l'iniezione automatica, aggiungi agli spazi dei nomi un'etichetta di revisione corrispondente a quella del piano di controllo. Ad esempio, un piano di controllo
con la revisione istio.io/rev=asm-1215-7
, seleziona i pod negli spazi dei nomi con
l'etichetta istio.io/rev=asm-1215-7
e inserisce i file collaterali.
Processo di upgrade canary
Le etichette di revisione consentono di eseguire upgrade canary e rollback facili del piano di controllo in-cluster. Il controllo gestito utilizza una procedura simile, ma viene eseguito automaticamente l'upgrade del cluster alla versione più recente canale.
I seguenti passaggi descrivono il funzionamento della procedura:
- Inizia con un Cloud Service Mesh o Istio open source esistente
dell'installazione. Non è importante se gli spazi dei nomi utilizzano una revisione
o l'etichetta
istio-injection=enabled
. - Utilizza una stringa di revisione quando installi la nuova versione del piano di controllo. A causa della stringa di revisione, il nuovo control plane viene installato insieme alla versione esistente. La nuova installazione include un nuovo webhook
con un
namespaceSelector
configurato per monitorare gli spazi dei nomi con quella specifica etichetta di revisione. - 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 riavviare i pod. Se utilizzi le revisioni con Cloud Service Mesh,
devi interrompere l'utilizzo dell'etichetta
istio-injection=enabled
. Un piano di controllo con revisione non seleziona i pod negli spazi dei nomi con un attributoistio-injection
anche se c'è un'etichetta di revisione. Il webhook per il nuovo controllo inserisce i file collaterali nei pod. - Testa attentamente i carichi di lavoro associati al piano di controllo aggiornato e continuare a implementare l'upgrade o eseguire il rollback dal piano di controllo.
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 alcun effetto sui pod nei nomespazi di cui è stata eseguita la migrazione al nuovo piano di controllo. Puoi eseguire il rollback degli elementi pod in uno spazio dei nomi al piano di controllo originale rimuovendo la nuova etichetta di revisione, aggiungendo di nuovo l'etichetta originale e riavviando i pod. Quando che l'upgrade è stato completato, puoi rimuovere il precedente aereo.
Per la procedura dettagliata sull'upgrade con le revisioni, consulta la Guida all'upgrade.
Uno sguardo ravvicinato alla configurazione mutante di webhook
Per comprendere meglio il webhook con mutazioni per l'iniezione automatica di sidecar, esamina personalmente la configurazione. Utilizza questo comando:
kubectl -n istio-system get mutatingwebhookconfiguration -l app=sidecar-injector -o yaml
Dovresti vedere una configurazione separata per ogni piano di controllo installato. Un selettore dello spazio dei nomi per un piano di controllo basato su revisione ha il seguente aspetto: questo:
namespaceSelector:
matchExpressions:
- key: istio-injection
operator: DoesNotExist
- key: istio.io/rev
operator: In
values:
- asm-1215-7
Il selettore può variare a seconda della versione di Cloud Service Mesh o Istio che
che stai eseguendo. Questo selettore corrisponde agli spazi dei nomi con un'etichetta di revisione specifica
purché non abbiano anche un'etichetta istio-injection
.
Quando viene eseguito il deployment di un pod in uno spazio dei nomi corrispondente al selettore, il relativo pod la specifica viene inviata al servizio di iniezione per la mutazione. Iniettore servizio da chiamare è specificato come segue:
service:
name: istiod-asm-1215-7
namespace: istio-system
path: /inject
port: 443
Il servizio viene esposto dal piano di controllo sulla porta 443 nel percorso dell'URL inject
.
La sezione rules
specifica che l'webhook deve essere applicato alla creazione del pod:
rules:
- apiGroups:
- ""
apiVersions:
- v1
operations:
- CREATE
resources:
- pods
scope: '*'