Kanonischen Dienst definieren

w

Hinweis: Kanonische Dienste werden in 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 Dienstressourcen basierend auf vorhandenen Informationen vom Kubernetes API-Server. Auf dieser Seite wird erläutert, welche Labels automatisch kanonische Dienste definieren und wie Sie die Grenzen Ihrer Dienste manuell anpassen können.

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

  • Kubernetes-Pods (einschließlich über Kubernetes-Deployments, Kube Run Services usw.)
  • VM-Instanzen
  • Mesh-externe Dienste (insbesondere ServiceEntry-Ressourcen mit dem Standort MESH_EXTERNAL)

Definition von kanonischen Diensten

Cloud Service Mesh bestimmt die Mitgliedschaft im kanonischen Dienst durch Lesen des Labels service.istio.io/canonical-name auf der Kubernetes-Konfigurationsressource, die jeder Arbeitslastinstanz zugeordnet ist:

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

Kanonische Dienste haben denselben Kubernetes-Namespace wie die zugehörigen Arbeitslastinstanzen und können sich nicht über Namespaces erstrecken.

Regeln für die automatische Kennzeichnung

Cloud Service Mesh gruppiert Ihre Pod- und VM-basierten Arbeitslasten automatisch in kanonische Dienste, ohne dass Sie etwas tun müssen.

Sie müssen lediglich Maßnahmen ergreifen, um

  • Labels für Nutzer/Leser verständlicher zu machen und
  • Das Standardverhalten zu überschreiben.

Automatische Labelerstellung in Kubernetes-Pods

Kanonische Dienste konzentrieren sich auf die Kubernetes-Labels app.kubernetes.io/name und app. Beachten Sie, dass das frühere Label Vorrang hat.

Wenn Sie eines dieser beiden Labels auf Ihren Arbeitslasten verwenden, ist keine weitere Arbeit erforderlich.

Automatisches HInzufügen von Labels in virtuellen Maschinen

Zum Erstellen kanonischer Dienste auf Ihren VMs müssen Sie die VMs einem Service Mesh hinzufügen. Dazu konfigurieren Sie eine WorkloadEntry-Ressource auf Ihrem Kubernetes API-Server.

Manuelles Hinzufügen von Labels

Wenn Sie ein Label des kanonischen Dienstes manuell anwenden oder überschreiben möchten, wenden Sie das Label service.istio.io/canonical-name auf unterstützte Arbeitslast-Ressourcenkonfigurationen an.

Damit ein externer Dienst als kanonischer Dienst erkannt wird, müssen Sie den entsprechenden ServiceEntry manuell mit einem Label versehen.

Manuelles Hinzufügen von Labels in Kubernetes-Pods

Wenn Sie mit einem Deployment mehrere Pods gleichzeitig bereitstellen möchten, legen Sie das Label service.istio.io/canonical-name in der PodTemplateSpec fest:

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

Fügen Sie das Label service.istio.io/canonical-name dem Abschnitt labels Ihrer Pod-Konfiguration hinzu, um dem kanonischen Dienst eines einzelnen Pods mit einem Label zu versehen:

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

Virtuelle Maschinen manuell mit Labels versehen

Fügen Sie das Label service.istio.io/canonical-name dem Abschnitt „labels” Ihrer Arbeitslastkonfiguration hinzu, um den kanonischen Dienst eines einzelnen VM/WorkloadEntry zu kennzeichnen:

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

Externe Dienste manuell mit Labels versehen

Fügen Sie das Label service.istio.io/canonical-name im Abschnitt „labels“ Ihrer ServiceEntry-Konfiguration hinzu, um den kanonischen Dienst eines einzelnen externen Dienstes/ServiceEntrys mit einem Label zu versehen:

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