Équilibrage de charge réseau

Cette rubrique explique comment configurer un équilibreur de charge L4 reposant sur un équilibreur de charge standard Azure à l'aide de GKE sur Azure.

Lorsque vous créez un service de type LoadBalancer, un contrôleur GKE sur Azure configure un équilibreur de charge Azure.

Avant de commencer

Sélectionner un équilibreur de charge public ou privé

Les équilibreurs de charge de service peuvent être publics (avec des adresses IP d'interface publiques) ou internes (uniquement accessibles via des adresses IP privées).

Par défaut, un nouveau service est public. Pour créer un équilibreur de charge interne, définissez l'annotation service.beta.kubernetes.io/azure-load-balancer-internal sur "true" dans le fichier manifeste.

Choisir un sous-réseau pour les équilibreurs de charge internes

Lors de la création d'un équilibreur de charge interne, GKE sur Azure doit choisir le sous-réseau dans lequel placer l'équilibreur de charge. Ce sous-réseau d'équilibreur de charge de service par défaut est choisi depuis les paramètres de création du cluster comme suit :

  1. S'il est spécifié et non vide, cluster.networking.serviceLoadBalancerSubnetId
  2. Dans le cas contraire, cette valeur est définie sur cluster.controlPlane.subnetId.

Vous pouvez également spécifier le sous-réseau à utiliser pour un équilibreur de charge donné en ajoutant l'annotation service.beta.kubernetes.io/azure-load-balancer-internal-subnet au service. La valeur de cette annotation est le nom du sous-réseau.

Créer un exemple de LoadBalancer

Pour créer un équilibreur de charge, vous devez créer un déploiement et l'exposer avec un service.

  1. Créez votre déploiement. Les conteneurs de ce déploiement écoutent le port 50001. Enregistrez le fichier YAML suivant dans un fichier nommé my-deployment-50001.yaml :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. Créez le déploiement avec kubectl apply :

    kubectl apply -f my-deployment-50001.yaml
    
  3. Vérifiez que trois pods sont en cours d'exécution :

    kubectl get pods --selector=app=products
    
  4. Créez un service de type LoadBalancer pour votre déploiement. Vous pouvez créer un équilibreur de charge standard Azure public ou interne. Choisissez l'une des options suivantes.

    Copiez l'un des fichiers manifestes suivants dans un fichier nommé my-lb-service.yaml.

    Public

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    Interne

    Pour créer un LoadBalancer interne, définissez l'annotation service.beta.kubernetes.io/azure-load-balancer-internal sur "true". Le code YAML suivant inclut cette annotation. yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. Créez le service à l'aide de kubectl apply :

    kubectl apply -f my-lb-service.yaml
    
  6. Affichez l'adresse du service avec kubectl get service.

    kubectl get service my-lb-service
    

    Le résultat inclut une colonne EXTERNAL-IP avec une adresse de l'équilibreur de charge (publique ou privée, selon la façon dont l'équilibreur de charge a été créé).

  7. Si vous avez créé un équilibreur de charge public, vous pouvez vous y connecter avec curl. Remplacez external-ip par l'adresse obtenue dans le résultat de la commande kubectl get service de l'étape précédente.

    curl http://external-ip:60000
    

    Le résultat se présente comme suit :

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

Nettoyer

Pour supprimer le service et le déploiement, utilisez la commande kubectl delete.

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml