Share via


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.

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

  1. 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
    
  2. 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
    
  3. Erstellen Sie folgendes ClusterResourcePlacement in einer Datei namens crp-2.yaml. Beachten Sie, dass wir Cluster in der Region eastus auswählen:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    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
    
  4. 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
    
  5. Ü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

  1. Ü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 lautet true) und keine Konflikte mit anderen Exporten aufweist (IS-CONFLICT lautet false).

    Hinweis

    Es kann eine oder zwei Minuten dauern, bis „ServiceExport“ verteilt wird.

  2. 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
    
  3. Ü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 Wert true 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.

  4. 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 und aks-member-2 in der Region eastus stammen. Sie können die IP-Adressen der Pods überprüfen, indem Sie die folgenden Befehle für die Cluster aus der Region eastus 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