Definizione di un servizio canonico
Nota: i servizi canonici sono supportati automaticamente in Anthos Service Mesh versione 1.6.8 e successive.
I servizi canonici sono un gruppo di carichi di lavoro che implementano gli stessi servizi e le stesse API. Per i tipi di carichi di lavoro supportati, Anthos Service Mesh crea automaticamente risorse del servizio canonico in base alle informazioni esistenti del server API Kubernetes. In questa pagina vengono spiegate le etichette che definiscono automaticamente i servizi canonici e come puoi modificare manualmente i confini dei tuoi servizi.
I tipi di istanza dei carichi di lavoro attualmente supportati sono:
- Pod Kubernetes (ad esempio tramite deployment Kubernetes, servizi Kube Run e così via)
- Istanze di macchine virtuali
- Servizi mesh esterni (in particolare, risorse ServiceEntry con una località
di
MESH_EXTERNAL
)
Cosa definisce i servizi canonici
Anthos Service Mesh determina l'appartenenza al servizio canonico leggendo l'service.istio.io/canonical-name
etichetta sulla risorsa di configurazione Kubernetes associata a ogni istanza del carico di lavoro:
- Per i pod, l'etichetta si trova nella risorsa Pod Kubernetes
- Per le VM, l'etichetta nella risorsa WorkloadEntry Istio
- Per i servizi esterni, l'etichetta si trova nella risorsa ServiceEntry Istio
I servizi canonici hanno lo stesso spazio dei nomi Kubernetes delle istanze del carico di lavoro associate e non possono includere spazi dei nomi.
Regole di etichettatura automatica
Anthos Service Mesh raggruppa automaticamente i carichi di lavoro basati su pod e VM in servizi canonici senza alcuna azione da parte tua.
Devi solo:
- Modificare le etichette per una maggiore chiarezza da parte degli utenti/dei lettori
- Esegui l'override del comportamento predefinito.
Etichettatura automatica nei pod Kubernetes
I servizi canonici si concentrano sulle etichette app.kubernetes.io/name
e app
di Kubernetes. Tieni presente che l'etichetta precedente ha la precedenza.
Se utilizzi una di queste due etichette sui tuoi carichi di lavoro, non sono necessari ulteriori interventi.
Etichettatura automatica nelle macchine virtuali
Per creare servizi canonici sulle tue VM, devi aggiungere le VM a un mesh di servizi configurando una risorsa WorkloadEntry nel server API Kubernetes.
Etichettatura manuale
Per applicare manualmente o eseguire l'override di un'etichetta di servizio canonico, applica l'etichetta service.istio.io/canonical-name
alle configurazioni delle risorse dei carichi di lavoro supportate.
Affinché un servizio esterno venga riconosciuto come servizio canonico, devi etichettare manualmente il ServiceEntry applicabile.
Etichettatura manuale nei pod Kubernetes
Per eseguire il deployment di più pod contemporaneamente utilizzando un
Deployment,
imposta l'etichetta service.istio.io/canonical-name
in 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:
...
Etichetta manualmente le macchine virtuali
Per etichettare il servizio canonico di una singola VM/WorkloadEntry, aggiungi l'etichetta service.istio.io/canonical-name
alla sezione "labels" della configurazione di 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 esterno/ServiceEntry, aggiungi l'etichetta service.istio.io/canonical-name
alla sezione "etichette" della configurazione di 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
...