Definizione di un servizio canonico

Nota: i servizi canonici sono supportati automaticamente in Cloud Service Mesh versione 1.6.8 e successive.

Servizi di canonicalizzazione è un gruppo di workload 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 workload 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)

Che 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 Canonical hanno lo stesso spazio dei nomi Kubernetes delle istanze di carico di lavoro associate e non possono estendersi su più 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 alcuna azione da parte tua.

Devi solo intervenire per:

  • Modificare le etichette per una maggiore chiarezza per l'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 l'etichetta precedente ha la precedenza.

Se utilizzi una di queste due etichette per i tuoi carichi di lavoro, non è necessario alcun ulteriore intervento.

Etichettatura automatica nelle macchine virtuali

Per creare i servizi Canonical sulle VM, devi aggiungerle a un mesh di servizi configurando una 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 workload supportate.

Affinché un servizio esterno venga riconosciuto come servizio canonico, devi etichettare manualmente ServiceEntry applicabile.

Etichettatura manuale nei pod Kubernetes

Per eseguire il deployment di molti pod contemporaneamente utilizzando un 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 l'etichetta service.istio.io/canonical-name alla sezione "Etichette" 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:
  ...

Etichettare 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 "labels" 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
  ...

Passaggi successivi