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