Créer un équilibreur de charge réseau

Cette page explique comment configurer un équilibreur de charge L4 avec un point de terminaison AWS Elastic Load Balancer (ELB) ou un équilibreur de charge réseau (NLB, Network Load Balancer).

Pour en savoir plus sur les autres types d'équilibreurs de charge compatibles avec les clusters GKE sur AWS, consultez la page Présentation de l'équilibreur de charge.

Avant de commencer

Choisir un type d'équilibreur de charge

GKE AWS crée un équilibreur de charge de service en tant qu'équilibreur de charge Elastic Load Classic (ELB) classique ou équilibreur de charge réseau (NLB). Par défaut, GKE sur AWS crée un ELB classique. Pour créer un NLB, définissez l'annotation service.beta.kubernetes.io/aws-load-balancer-type sur nlb. Pour découvrir les différences entre les types d'équilibreurs de charge, consultez la section Types d'équilibreurs de charge de la documentation AWS.

Choisir un équilibreur de charge interne ou Web

Les équilibreurs de charge peuvent être Web (avec un nom DNS pouvant être résolu publiquement) ou internes (accessible uniquement dans votre VPC).

Par défaut, les nouveaux équilibreurs de charge sont Web. Pour créer un équilibreur de charge interne, définissez l'annotation service.beta.kubernetes.io/aws-load-balancer-internal sur "true" dans le fichier manifeste.

Vous ne pouvez pas appliquer l'annotation aws-load-balancer-internal à un service existant. Pour basculer entre les configurations Web et internes, vous devez supprimer et recréer la ressource LoadBalancer existante.

Choisir vos sous-réseaux

Lors de la création d'équilibreurs de charge, AWS doit savoir dans quels sous-réseaux les placer. Par défaut, ces sous-réseaux sont automatiquement détectés parmi les sous-réseaux du VPC. Cela nécessite que les sous-réseaux possèdent des tags spécifiques. Pour en savoir plus sur la détection automatique et l'ajout de tags aux sous-réseaux, consultez la section Sous-réseaux d'équilibrage de charge.

Vous pouvez également spécifier des sous-réseaux d'équilibreur de charge avec une annotation, en ajoutant l'annotation service.beta.kubernetes.io/aws-load-balancer-subnets au service. La valeur de cette annotation est une liste d'ID de sous-réseaux ou de noms de sous-réseaux séparés par une virgule, par exemple subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef.

Créer un exemple d'équilibreur de charge

Pour créer un service de type LoadBalancer, vous devez créer un déploiement et l'exposer avec un service. Dans l'exemple suivant, vous allez créer un exemple d'équilibreur de charge.

  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.

  5. Choisissez le type d'équilibreur de charge dont vous avez besoin :

    • ELB Web classique
    • NLB Web
    • ELB interne classique
    • NLB interne

    Choisissez l'onglet correspondant à vos besoins et copiez le fichier manifeste dans un fichier nommé my-lb-service.yaml.

    Web classique

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

    NLB Web

    Pour créer un NLB, définissez l'annotation service.beta.kubernetes.io/aws-load-balancer-type sur nlb. Le code YAML suivant inclut cette annotation.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    Interne classique

    Pour créer un LoadBalancer interne, définissez l'annotation service.beta.kubernetes.io/aws-load-balancer-internal sur "true". Le code YAML suivant inclut cette annotation.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    NLB interne

    Pour créer un NLB interne, définissez les annotations suivantes :

    • De service.beta.kubernetes.io/aws-load-balancer-internal à "true"
    • De service.beta.kubernetes.io/aws-load-balancer-type à nlb

    Le code YAML suivant inclut les deux annotations.

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-internal: "true"
        service.beta.kubernetes.io/aws-load-balancer-type: nlb
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    
  6. Créez le service à l'aide de kubectl apply :

    kubectl apply -f my-lb-service.yaml
    
  7. 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éé).

  8. Si vous avez créé un équilibreur de charge Web, vous pouvez vous y connecter avec curl à l'aide de la commande suivante :

    curl http://EXTERNAL_IP:60000
    

    Remplacez EXTERNAL_IP par l'adresse de la colonne EXTERNAL-IP à l'étape précédente.

Le résultat se présente comme suit :

```none
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

Étapes suivantes