Kanonischen Dienst definieren
Hinweis:Kanonische Dienste werden automatisch unterstützt. in Cloud Service Mesh-Version 1.6.8 und höher.
Kanonische Dienste sind eine Gruppe von Arbeitslasten, die dieselben Dienste und APIs implementieren. Für unterstützte Arbeitslasttypen Cloud Service Mesh erstellt 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 einem Standort)
von
MESH_EXTERNAL
)
Definition von kanonischen Diensten
Cloud Service Mesh ermittelt die Mitgliedschaft kanonischer Dienste anhand des service.istio.io/canonical-name
-Labels der Kubernetes-Konfigurationsressource, die mit jeder Arbeitslastinstanz verknüpft 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 unter Verwendung von kanonischen Diensten, ohne dass Sie etwas unternehmen 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
Um kanonische Dienste auf Ihren VMs zu erstellen, müssen Sie Ihre VMs einer Service Mesh durch Konfigurieren eines WorkloadEntry-Ressource auf Ihrem Kubernetes API-Server.
Manuelles Hinzufügen von Labels
Wenn Sie ein Label für den kanonischen Dienst manuell anwenden oder überschreiben möchten, wenden Sie das Attribut
Label service.istio.io/canonical-name
für unterstützte Arbeitslastressource
Konfigurationen.
Damit ein externer Dienst als kanonischer Dienst erkannt wird, müssen Sie
muss den entsprechenden ServiceEntry manuell mit einem Label versehen.
Manuelles Hinzufügen von Labels in Kubernetes-Pods
Um mehrere Pods gleichzeitig mithilfe eines
Bereitstellung,
Legen Sie das Label service.istio.io/canonical-name
für 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 zum Kennzeichnen des kanonischen Dienstes eines einzelnen externen Dienstes/Serviceeintrags den
service.istio.io/canonical-name
-Label zu "Labels" Ihres
ServiceEntry-Konfiguration:
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
...