Kanonischen Dienst definieren

Hinweis: Kanonische Dienste werden in der Cloud Service Mesh-Version 1.6.8 und höher automatisch unterstützt.

Kanonische Dienste sind eine Gruppe von Arbeitslasten, die dieselben Dienste und APIs implementieren. Für unterstützte Arbeitslasttypen erstellt Cloud Service Mesh automatisch kanonische Dienste anhand der im Kubernetes API-Server vorhandenen Informationen. Auf dieser Seite wird beschrieben, mit welchen Labels kanonische Dienste automatisch definiert werden und wie Sie den Umfang Ihrer Dienste manuell anpassen können.

Aktuell werden die folgenden Instanztypen für Arbeitslasten unterstützt:

  • Kubernetes-Pods (auch über Kubernetes-Bereitstellungen, Kube Run Services usw.)
  • VM-Instanzen
  • Mesh-externe Dienste (insbesondere „ServiceEntry“-Ressourcen mit dem Standort MESH_EXTERNAL)

Definition von kanonischen Diensten

Cloud Service Mesh ermittelt die Mitgliedschaft kanonischer Dienste anhand des Labels service.istio.io/canonical-name der Kubernetes-Konfigurationsressource, die mit jeder Arbeitslastinstanz verknüpft ist:

  • Bei Pods befindet sich das Label in der Kubernetes Pod-Ressource.
  • Bei VMs befindet sich das Label in der Istio-Ressource „WorkloadEntry“.
  • Bei externen Diensten befindet sich das Label in der Istio-Ressource „ServiceEntry“.

Kanonische Dienste verwenden denselben Kubernetes-Namespace wie die verknüpften Arbeitslastinstanzen und können sich nicht über mehrere Namespaces erstrecken.

Regeln für automatische Labels

Cloud Service Mesh gruppiert Ihre Pod- und VM-basierten Arbeitslasten ohne Ihr Zutun automatisch in kanonische Dienste.

Sie müssen lediglich Folgendes tun:

  • Label für Nutzer/Leser verständlicher gestalten
  • Das Standardverhalten überschreiben

Automatische Label in Kubernetes-Pods

Kanonische Dienste konzentrieren sich auf die Kubernetes-Label app.kubernetes.io/name und app. Dabei hat das erste Label Vorrang.

Wenn Sie eines dieser beiden Label für Ihre Arbeitslasten verwenden, ist keine weitere Maßnahme erforderlich.

Automatische Label in virtuellen Maschinen

Wenn Sie kanonische Dienste auf Ihren VMs erstellen, müssen Sie Ihre VMs zu einem Service Mesh hinzufügen. Dazu konfigurieren Sie auf Ihrem Kubernetes API-Server eine „WorkloadEntry“-Ressource.

Manuelle Label

Wenn Sie für einen kanonischen Dienst ein Label manuell anwenden oder überschreiben möchten, wenden Sie das Label service.istio.io/canonical-name auf unterstützte Arbeitslastressourcen-Konfigurationen an.

Damit ein externer Dienst als kanonischer Dienst erkannt wird, müssen Sie zum entsprechenden „ServiceEntry“ manuell ein Label hinzufügen.

Manuelle Label in Kubernetes-Pods

Wenn Sie mit einer Bereitstellung mehrere Pods gleichzeitig bereitstellen möchten, geben Sie in der „PodTemplateSpec“ das Label service.istio.io/canonical-name an:

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:
        ...

Wenn Sie dem kanonischen Dienst eines einzelnen Pods ein Label hinzufügen möchten, fügen Sie das Label service.istio.io/canonical-name dem Abschnitt labels Ihrer Pod-Konfiguration hinzu.

apiVersion: v1
kind: Pod
metadata:
  name: my-test-pod
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...

Manuelle Label in virtuellen Maschinen

Wenn Sie dem kanonischen Dienst einer einzelnen VM/eines einzelnen „WorkloadEntry“ ein Label hinzufügen möchten, fügen Sie das Label service.istio.io/canonical-name dem Abschnitt „labels” Ihrer „WorkloadEntry“-Konfiguration hinzu.

apiVersion: networking.istio.io/v1alpha3
kind: WorkloadEntry
metadata:
  name: my-vm-123
  namespace: my-namespace
  labels:
    service.istio.io/canonical-name: my-service
spec:
  ...

Manuelle Label für externe Dienste

Wenn Sie dem kanonischen Dienst eines einzelnen externen Dienstes/„ServiceEntry“ ein Label hinzufügen möchten, fügen Sie das Label service.istio.io/canonical-name dem Abschnitt „labels“ Ihrer „ServiceEntry“-Konfiguration hinzu.

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
  ...

Nächste Schritte