Definizione di un servizio canonico
Nota: i servizi canonici sono supportati automaticamente in Cloud Service Mesh 1.6.8 e versioni successive.
Servizi di canonicalizzazione è un gruppo di carichi di lavoro che implementano gli stessi servizi e le stesse API. Per i tipi di carichi di lavoro supportati, Cloud Service Mesh crea automaticamente risorse di servizio canonico in base alle informazioni esistenti del server dell'API Kubernetes. Questa pagina spiega quali etichette definiscono automaticamente i servizi canonici e come puoi modificare manualmente i confini dei tuoi servizi. I tipi di istanze di carico di lavoro attualmente supportati sono:
- Pod Kubernetes (inclusi tramite deployment Kubernetes, servizi Kube Run e così via)
- Istanze di macchine virtuali
- Servizi esterni al mesh (in particolare, risorse ServiceEntry con una posizione
MESH_EXTERNAL
)
Cosa definisce i servizi canonici
Cloud Service Mesh determina l'appartenenza al servizio canonico leggendo l'service.istio.io/canonical-name
etichetta
nella risorsa di configurazione Kubernetes associata a ogni istanza di carico di lavoro:
- Per i pod, l'etichetta si trova nella risorsa Pod Kubernetes
- Per le VM, l'etichetta nella risorsa WorkloadEntry di Istio
- Per i servizi esterni, l'etichetta si trova nella risorsa ServiceEntry di Istio
I servizi canonici hanno lo stesso Spazio dei nomi Kubernetes come istanze dei carichi di lavoro associate e non possono occupare gli spazi dei nomi.
Regole di etichettatura automatica
Cloud Service Mesh raggruppa automaticamente i carichi di lavoro basati su pod e VM in Servizi canonici senza alcun intervento da parte tua. Devi solo intervenire per:
- Modifica le etichette per migliorare la chiarezza dell'utente/lettore
- Sostituisci il comportamento predefinito.
Etichettatura automatica nei pod Kubernetes
I servizi Canonical si concentrano sulle etichette app.kubernetes.io/name
e
app
di Kubernetes. Tieni presente che la precedente etichetta ha la precedenza.
Se utilizzi una di queste due etichette nei tuoi carichi di lavoro, non devi fare nient'altro
obbligatorio.
Etichettatura automatica nelle macchine virtuali
Per creare servizi canonici sulle tue VM, devi aggiungere le VM a un mesh di servizi configurando Risorsa WorkloadEntry nel server API Kubernetes.
Etichettatura manuale
Per applicare o sostituire manualmente un'etichetta del servizio canonico, applica l'etichetta service.istio.io/canonical-name
alle configurazioni delle risorse di carico di lavoro supportate.
Per far sì che un servizio esterno venga riconosciuto come Servizio canonico, l'utente
deve etichettare manualmente la ServiceEntry applicabile.
Etichettatura manuale nei pod Kubernetes
di eseguire il deployment di più pod contemporaneamente
Deployment,
imposta l'etichetta service.istio.io/canonical-name
su PodTemplateSpec:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
namespace: my-namespace
spec:
replicas: 3
template:
metadata:
labels:
service.istio.io/canonical-name: my-service
spec:
containers:
...
Per etichettare il servizio canonico di un singolo pod, aggiungi l'etichetta service.istio.io/canonical-name
alla sezione labels
della configurazione del pod:
apiVersion: v1
kind: Pod
metadata:
name: my-test-pod
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
Etichettare manualmente le macchine virtuali
Per etichettare il servizio canonico di una singola VM/WorkloadEntry, aggiungi il metodo
Etichetta service.istio.io/canonical-name
in "etichette" del tuo
Configurazione WorkloadEntry:
apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
name: my-vm-123
namespace: my-namespace
labels:
service.istio.io/canonical-name: my-service
spec:
...
Etichetta manualmente i servizi esterni
Per etichettare il servizio canonico di un singolo servizio/ServiceEntry esterno, aggiungi il metodo
Etichetta service.istio.io/canonical-name
in "etichette" del tuo
Configurazione ServiceEntry:
apiVersion: networking.istio.io/v1alpha3
kind: ServiceEntry
metadata:
name: example-com
namespace: my-namespace
labels:
service.istio.io/canonical-name: an-external-service
spec:
location: MESH_EXTERNAL
...