Definizione di un servizio canonico

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

I servizi canonici sono un gruppo di workload che implementano gli stessi servizi e le stesse API. Per i tipi di workload supportati, Cloud Service Mesh crea automaticamente risorse di servizi canonici in base alle informazioni esistenti dal server API Kubernetes. Questa pagina spiega quali etichette definiscono automaticamente i servizi canonici e come puoi modificare manualmente i limiti dei tuoi servizi.

I tipi di istanze di workload supportati sono:

  • Pod Kubernetes (inclusi tramite deployment Kubernetes, servizi Kube Run e così via)
  • Servizi esterni alla mesh (in particolare, risorse ServiceEntry con una località MESH_EXTERNAL)

Cosa definisce i servizi canonici

Cloud Service Mesh determina l'appartenenza ai servizi canonici leggendo l' service.istio.io/canonical-name etichetta sulla risorsa di configurazione Kubernetes associata a ogni istanza di workload:

  • Per i pod, l'etichetta si trova nella risorsa pod Kubernetes
  • Per i servizi esterni, l'etichetta si trova nella risorsa ServiceEntry di Istio

I servizi canonici hanno lo stesso spazio dei nomi Kubernetes delle istanze di workload associate e non possono estendersi su più spazi dei nomi.

Regole di etichettatura automatica

Cloud Service Mesh raggruppa automaticamente i workload in servizi canonici senza che tu debba fare nulla. Devi intervenire solo per:

  • Modificare le etichette per la chiarezza dell'utente o del lettore
  • Eseguire 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 la prima etichetta ha la precedenza. Se utilizzi una di queste due etichette sui tuoi workload, non è necessario alcun altro intervento.

Etichettatura manuale

Per applicare o sostituire manualmente un'etichetta di 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 la 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 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 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