Créer un équilibreur de charge

Cette rubrique explique comment configurer un équilibreur de charge AWS Elastic Load Balancer (ELB) avec Anthos clusters on AWS (GKE sur AWS).

Lorsque vous créez un service de type LoadBalancer, un contrôleur Anthos clusters on AWS configure un équilibreur de charge (ELB, Elastic Load Balancer) classique ou réseau sur AWS

Vous pouvez également suivre le guide de démarrage rapide pour créer un ELB classique orienté vers l'extérieur depuis la console Google Cloud ou créer un équilibreur de charge d'application AWS (ALB).

Avant de commencer

Avant de commencer à utiliser Anthos clusters on AWS, assurez-vous d'avoir effectué les tâches suivantes :

  • Installez un service de gestion.
  • Créez un cluster d'utilisateur.
  • À partir de votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur.
  • Installez l'outil de ligne de commande curl ou un outil similaire.

Sélectionner un équilibreur de charge externe ou interne

Anthos clusters on AWS crée un équilibreur de charge externe (dans votre sous-réseau public) ou interne (dans votre sous-réseau privé) en fonction d'une annotation de la ressource LoadBalancer.

Si vous sélectionnez un équilibreur de charge externe, celui-ci est accessible par les adresses IP autorisées dans les groupes de sécurité du pool de nœuds et dans les listes de contrôle d'accès (LCA) au réseau du sous-réseau.

Choisir un type d'équilibreur de charge

Choisissez entre créer un équilibreur de charge classique (ELB classique) ou un équilibreur de charge réseau (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.

Créer un équilibreur de charge

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 :

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-deployment-50001.yaml
    
  3. Vérifiez que trois pods sont en cours d'exécution :

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get pods --selector=app=products
    
  4. Créez un service de type LoadBalancer pour votre déploiement. Vous pouvez créer un ELB classique ou réseau sur votre sous-réseau public ou privé. Choisissez l'une des options suivantes :

    • Un ELB classique sur le sous-réseau public
    • Un NLB sur le sous-réseau public
    • Un ELB classique sur le sous-réseau privé
    • Un NLB sur le sous-réseau privé

    Copiez ensuite le fichier manifeste suivant dans un fichier nommé my-lb-service.yaml.

    Public 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 public

    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
    

    Classique privé

    Pour créer une ressource LoadBalancer privée, 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 privé

    Pour créer un NLB privé, 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
    
  5. Créez le service à l'aide de kubectl apply :

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f my-lb-service.yaml
    
  6. Affichez le nom d'hôte du service avec kubectl get service.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get service my-lb-service \
      --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
    

    Le résultat ressemble au suivant : elb-id.elb.aws-region.amazonaws.com.

  7. Si vous avez créé un équilibreur de charge externe et que vous avez accès au sous-réseau VPC public, vous pouvez vous connecter à l'équilibreur de charge à l'aide de curl. Remplacez external-ip par l'adresse IP obtenue dans le résultat de la commande kubectl get service de l'étape précédente.

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

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-lb-service.yaml

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f my-deployment-50001.yaml

Dépannage

Si vous ne pouvez pas accéder à un point de terminaison d'équilibreur de charge, essayez d'ajouter des tags à vos sous-réseaux.

Étape suivante