Einrichten eines Layer 4-Lastenausgleichs für mehrere Cluster über Azure Kubernetes Fleet Manager-Mitgliedscluster hinweg (Vorschau)
Bei Anwendungen, die in mehreren Clustern bereitgestellt werden, möchten Administratoren und Administratorinnen eingehenden Datenverkehr häufig über Cluster hinweg weiterleiten.
Anhand der Informationen in diesem Dokument können Sie den Lastenausgleich auf Ebene 4 für solche Multiclusteranwendungen einrichten.
Wichtig
Previewfunktionen von Azure Kubernetes Fleet Manager sind auf Self-Service-Basis per Aktivierung verfügbar. Vorschauversionen werden „wie besehen“ und „wie verfügbar“ bereitgestellt und sind von den Vereinbarungen zum Service Level und der eingeschränkten Garantie ausgeschlossen. Vorschauversionen von Azure Kubernetes Fleet Manager sind auf Best-Effort-Basis teilweise durch den Kundensupport abgedeckt. Daher sind diese Funktionen nicht für die Verwendung in der Produktion vorgesehen.
Voraussetzungen
Wenn Sie kein Azure-Abonnement haben, erstellen Sie ein kostenloses Azure-Konto, bevor Sie beginnen.
Lesen Sie die konzeptionelle Übersicht über dieses Feature, der Erläuterungen der Objekte
ServiceExport
undMultiClusterService
enthält, auf die in diesem Dokument verwiesen wird.Sie müssen über eine Fleet-Ressource mit einem Hubcluster und Mitgliedsclustern verfügen. Wenn Sie diese Ressource nicht haben, folgen Sie den Schritten unter Schnellstart: Erstellen einer Fleet-Ressource und Einbinden von Mitgliedsclustern.
Die AKS-Zielcluster (Azure Kubernetes Service), in denen die Workloads bereitgestellt werden, müssen sich entweder im selben virtuellen Netzwerk oder in virtuellen Netzwerken mit Peering befinden.
- Diese Zielcluster müssen der Fleet-Ressource als Mitgliedscluster hinzugefügt werden.
- Diese Zielcluster sollten Azure CNI-Netzwerke (Container Networking Interface) verwenden.
Sie müssen Zugriff auf die Kubernetes-API des Hubclusters erhalten, indem Sie die Schritte unter Zugreifen auf die Kubernetes-API des Fleet-Hubclusters ausführen.
Legen Sie die folgenden Umgebungsvariablen fest, und rufen Sie die kubeconfigs für die Flotte und alle Mitgliedscluster ab:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 export MEMBER_CLUSTER_2=aks-member-2 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1 az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
Verwenden Sie die Bash-Umgebung in Azure Cloud Shell. Weitere Informationen finden Sie unter Schnellstart für Bash in Azure Cloud Shell.
Wenn Sie CLI-Referenzbefehle lieber lokal ausführen, installieren Sie die Azure CLI. Wenn Sie Windows oder macOS ausführen, sollten Sie die Azure CLI in einem Docker-Container ausführen. Weitere Informationen finden Sie unter Ausführen der Azure CLI in einem Docker-Container.
Wenn Sie eine lokale Installation verwenden, melden Sie sich mithilfe des Befehls az login bei der Azure CLI an. Führen Sie die in Ihrem Terminal angezeigten Schritte aus, um den Authentifizierungsprozess abzuschließen. Informationen zu anderen Anmeldeoptionen finden Sie unter Anmelden mit der Azure CLI.
Installieren Sie die Azure CLI-Erweiterung beim ersten Einsatz, wenn Sie dazu aufgefordert werden. Weitere Informationen zu Erweiterungen finden Sie unter Verwenden von Erweiterungen mit der Azure CLI.
Führen Sie az version aus, um die installierte Version und die abhängigen Bibliotheken zu ermitteln. Führen Sie az upgrade aus, um das Upgrade auf die aktuelle Version durchzuführen.
Bereitstellen einer Workload für Mitgliedscluster der Fleet-Ressource
Hinweis
Die Anweisungen in dieser Schrittanleitung beziehen sich lediglich auf eine Beispielanwendung für Demonstrationszwecke. Sie können diese Workload durch ein beliebiges Ihrer vorhandenen Objekte „Deployment“ und „Service“ ersetzen.
Anhand dieser Schritte wird die Beispielworkload vom Fleet-Cluster mithilfe der Kubernetes-Konfigurationsweitergabe auf die Mitgliedscluster verteilt. Alternativ können Sie diese Kubernetes-Konfigurationen auch für jeden Mitgliedscluster einzeln einrichten.
Erstellen Sie einen Namespaces für den Flottencluster:
KUBECONFIG=fleet kubectl create namespace kuard-demo
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
namespace/kuard-demo created
Wenden Sie die Objekte „Deployment“, „Service“ und „ServiceExport“ an:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
Die
ServiceExport
-Spezifikation in der Datei oben ermöglicht es Ihnen, einen Dienst aus Mitgliedsclustern in die Fleet-Ressource zu exportieren. Nach dem erfolgreichen Export werden der Dienst und alle seine Endpunkte mit dem Fleet-Cluster synchronisiert und können dann zum Einrichten eines Lastenausgleichs für mehrere Cluster über diese Endpunkte verwendet werden. Die Ausgabe sieht etwa folgendermaßen aus:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
Erstellen Sie folgendes
ClusterResourcePlacement
in einer Datei namenscrp-2.yaml
. Beachten Sie, dass wir Cluster in der Regioneastus
auswählen:apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus
Wenden Sie das
ClusterResourcePlacement
an:KUBECONFIG=fleet kubectl apply -f crp-2.yaml
Bei erfolgreichem Abschluss des Vorgangs ähnelt die Ausgabe dem folgenden Beispiel:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
Überprüfen Sie den Status von
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl get clusterresourceplacements
Bei erfolgreichem Abschluss des Vorgangs ähnelt die Ausgabe dem folgenden Beispiel:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
Erstellen von „MultiClusterService“ für den Lastausgleich zwischen den Dienstendpunkten in mehreren Mitgliedsclustern
Überprüfen Sie die Mitgliedscluster in der Region
eastus
, um festzustellen, ob der Dienst erfolgreich exportiert wurde:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
Sie sollten sehen, dass der Dienst für den Export gültig ist (Feld
IS-VALID
lautettrue
) und keine Konflikte mit anderen Exporten aufweist (IS-CONFLICT
lautetfalse
).Hinweis
Es kann eine oder zwei Minuten dauern, bis „ServiceExport“ verteilt wird.
Erstellen Sie
MultiClusterService
auf einem Mitglied, um den Lastenausgleich über die Dienstendpunkte dieser Cluster hinweg zu laden:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
Hinweis
Um den Dienst über die interne IP statt über die öffentliche IP bereitzustellen, fügen Sie die Anmerkung zum MultiClusterService hinzu:
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" ...
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
multiclusterservice.networking.fleet.azure.com/kuard created
Überprüfen Sie die Gültigkeit von „MultiClusterService“, indem Sie den folgenden Befehl ausführen:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
Die Ausgabe sollte in etwa wie im folgenden Beispiel aussehen:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
Das Feld
IS-VALID
sollte in der Ausgabe den Werttrue
aufweisen. Überprüfen Sie die IP-Adresse des externen Lastenausgleichs (EXTERNAL-IP
) in der Ausgabe. Es kann eine Weile dauern, bis der Import vollständig verarbeitet wurde und die IP-Adresse verfügbar ist.Führen Sie den folgenden Befehl mehrmals aus, und verwenden Sie dabei die IP-Adresse des externen Lastenausgleichs:
curl <a.b.c.d>:8080 | grep addrs
Beachten Sie, dass sich die IP-Adressen der Pods, die die Anforderung verarbeiten, ändern und dass diese Pods aus den Mitgliedsclustern
aks-member-1
undaks-member-2
in der Regioneastus
stammen. Sie können die IP-Adressen der Pods überprüfen, indem Sie die folgenden Befehle für die Cluster aus der Regioneastus
ausführen:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide
Azure Kubernetes Service