Partager via


Configurer l’équilibrage de charge multi-cluster de couche 4 sur les clusters membres Azure Kubernetes Fleet Manager (préversion)

Pour les applications déployées sur plusieurs clusters, les administrateurs veulent souvent router le trafic entrant vers ceux-ci entre les clusters.

Vous pouvez suivre ce document pour configurer l’équilibrage de charge de couche 4 pour ces applications multiclusters.

Important

Les fonctionnalités d’évaluation d’Azure Kubernetes Fleet Manager sont disponibles en libre-service et font l’objet d’un abonnement. Les préversions sont fournies « en l’état » et « en fonction des disponibilités », et sont exclues des contrats de niveau de service et de la garantie limitée. Les préversions d’Azure Kubernetes Fleet Manager sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Telles quelles, ces fonctionnalités ne sont pas destinées à une utilisation en production.

Prérequis

Si vous n’avez pas d’abonnement Azure, créez un compte gratuit Azure avant de commencer.

Déployer une charge de travail sur des clusters membres de la ressource Fleet

Remarque

  • Les étapes décrites dans ce guide pratique font référence à un exemple d’application à des fins de démonstration uniquement. Vous pouvez remplacer cette charge de travail par l’un de vos propres objets de déploiement et de service existants.

  • Ces étapes déploient l’exemple de charge de travail du cluster Fleet sur des clusters membres à l’aide de la propagation de la configuration Kubernetes. Vous pouvez également choisir de déployer ces configurations Kubernetes sur chaque cluster membre séparément.

  1. Créez un espace de noms sur le cluster de flotte :

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    La sortie ressemble à l’exemple suivant :

    namespace/kuard-demo created
    
  2. Appliquez les objets Deployment, Service et ServiceExport :

    KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
    

    La spécification ServiceExport du fichier ci-dessus vous permet d’exporter un service à partir de clusters membres vers la ressource Fleet. Une fois l’exportation réussie, le service et tous ses points de terminaison sont synchronisés avec le cluster Fleet, et ils peuvent ensuite être utilisés pour configurer l’équilibrage de charge multicluster entre ces points de terminaison. La sortie doit ressembler à celle-ci :

    deployment.apps/kuard created
    service/kuard created
    serviceexport.networking.fleet.azure.com/kuard created
    
  3. Créez les éléments suivants ClusterResourcePlacement dans un fichier appelé crp-2.yaml. Notez que nous sélectionnons des clusters dans la région eastus :

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

    KUBECONFIG=fleet kubectl apply -f crp-2.yaml
    

    En cas de réussite, la sortie est similaire à l’exemple suivant :

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. Vérifiez l'état de ClusterResourcePlacement :

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    En cas de réussite, la sortie est similaire à l’exemple suivant :

    NAME            GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
    kuard-demo      1     True        1              True      1            20s
    

Créer MultiClusterService pour équilibrer la charge entre les points de terminaison de service dans plusieurs clusters membres

  1. Vérifiez si le service a été exporté avec succès pour les clusters membres de la région eastus :

    KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
    

    La sortie ressemble à l’exemple suivant :

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           25s
    
    KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
    

    La sortie ressemble à l’exemple suivant :

    NAME    IS-VALID   IS-CONFLICTED   AGE
    kuard   True       False           55s
    

    Vous devez voir que le service est valide pour l’exportation (le champ IS-VALID est true) et n’a aucun conflit avec d’autres exportations (IS-CONFLICT est false).

    Remarque

    La propagation de ServiceExport peut prendre une ou deux minutes.

  2. Créez un MultiClusterService sur un membre pour équilibrer la charge entre les points de terminaison de service dans ces clusters :

    KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
    

    Remarque

    Pour exposer le service via l’adresse IP interne au lieu d’une adresse IP publique, ajoutez l’annotation au MultiClusterService :

    apiVersion: networking.fleet.azure.com/v1alpha1
    kind: MultiClusterService
    metadata:
      name: kuard
      namespace: kuard-demo
      annotations:
         service.beta.kubernetes.io/azure-load-balancer-internal: "true"
      ...
    

    La sortie ressemble à l’exemple suivant :

    multiclusterservice.networking.fleet.azure.com/kuard created
    
  3. Vérifiez que MultiClusterService est valide en exécutant la commande suivante :

    KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
    

    La sortie doit être semblable à l’exemple suivant :

    NAME    SERVICE-IMPORT   EXTERNAL-IP     IS-VALID   AGE
    kuard   kuard            <a.b.c.d>       True       40s
    

    Le champ IS-VALID doit être true dans la sortie. Consultez l’adresse IP de l’équilibreur de charge externe (EXTERNAL-IP) dans la sortie. L’importation peut prendre un certain temps avant qu’elle ne soit entièrement traitée et que l’adresse IP soit disponible.

  4. Exécutez la commande suivante plusieurs fois en utilisant l’adresse IP de l’équilibreur de charge externe :

    curl <a.b.c.d>:8080 | grep addrs 
    

    Notez que les adresses IP des pods qui servent la demande changent et que ces pods proviennent de clusters membres aks-member-1 et aks-member-2 de la région eastus. Vous pouvez vérifier les adresses IP de pod en exécutant les commandes suivantes sur les clusters à partir de la région eastus :

    KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
    
    KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide