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
- Créez un cluster et configurez
kubectl
pour vous y connecter. - Ajoutez des tags aux sous-réseaux de votre équilibreur de charge de service. Cette étape est nécessaire pour la détection automatique de sous-réseau.
- Déterminez si vous avez besoin d'un ELB classique ou réseau.
- Déterminez si vous avez besoin d'un équilibreur de charge Web ou interne.
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.
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"
Créez le déploiement avec
kubectl apply
:kubectl apply -f my-deployment-50001.yaml
Vérifiez que trois pods sont en cours d'exécution :
kubectl get pods --selector=app=products
Créez un service de type
LoadBalancer
pour votre déploiement.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
surnlb
. 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
Créez le service à l'aide de
kubectl apply
:kubectl apply -f my-lb-service.yaml
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éé).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
Consultez la documentation GKE sur Google Cloud concernant l'exposition d'applications à l'aide de services.
Consultez la liste complète des annotations compatibles.