Aidez à améliorer cette page
Vous souhaitez contribuer à ce guide de l'utilisateur ? Faites défiler cette page vers le bas et sélectionnez Modifier cette page sur GitHub. Vos contributions aideront à améliorer notre guide de l'utilisateur pour tous.
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Acheminement TCP and UDP trafic avec Network Load Balancers
Le trafic réseau est équilibré en charge au niveau L4
du OSI modèle. Pour équilibrer la charge du trafic des applications surL7
, vous déployez un Kubernetes ingress
, qui fournit un AWS Application Load Balancer. Pour de plus amples informations, veuillez consulter Application d'itinéraire et HTTP trafic avec Application Load Balancers. Pour en savoir plus sur les différences entre les deux types d'équilibrage de charge, consultez les fonctionnalités d'Elastic Load Balancing
Lorsque vous créez un Kubernetes Service
de typeLoadBalancer
, le contrôleur d'équilibrage de charge du fournisseur de AWS cloud crée des équilibreurs de charge AWS classiques par défaut, mais peut également créer des équilibreurs de charge AWS réseau. Ce contrôleur ne recevra que des corrections de bugs critiques à l'avenir. Pour plus d'informations sur l'utilisation de l' AWS équilibreur de charge du fournisseur de AWS cloud, voir le contrôleur d'équilibrage de charge du fournisseur
Nous vous recommandons d'utiliser la version 2.7.2
ou une version ultérieure du AWS Load Balancer Controllerau lieu du contrôleur d'équilibrage de charge du fournisseur de AWS
cloud. Le AWS Load Balancer Controller crée des équilibreurs de charge AWS réseau, mais ne crée pas d'équilibreurs de charge AWS classiques. Le reste de cette rubrique traite de l'utilisation du AWS Load Balancer Controller.
Un AWS Network Load Balancer peut équilibrer la charge du trafic réseau pour Pods déployé sur des cibles EC2 IP et d'instance Amazon ou sur des cibles AWS Fargate IP. Pour plus d'informations, consultez AWS Load Balancer Controller
Prérequis
Avant de pouvoir équilibrer la charge du trafic réseau à l'aide du AWS Load Balancer Controller, vous devez satisfaire aux exigences suivantes.
-
Disposer d'un cluster. Si vous n'avez pas de cluster, consultez Commencez avec Amazon EKS. Si vous devez mettre à jour la version d'un cluster existant, consultez Mettre à jour le cluster existant vers la nouvelle version de Kubernetes.
-
Ayez le AWS Load Balancer Controller déployé sur votre cluster. Pour de plus amples informations, veuillez consulter Acheminez le trafic Internet avec le AWS Load Balancer Controller. Nous recommandons la version
2.7.2
ou ultérieure. -
Au moins un sous-réseau. Si plusieurs sous-réseaux identifiés sont trouvés dans une zone de disponibilité, le contrôleur choisit le sous-réseau dont l'ID vient en premier dans l'ordre lexicographique. Le sous-réseau doit disposer au moins huit adresses IP disponibles.
-
Si vous utilisez le AWS Load Balancer Controller version
2.1.1
ou antérieure, les sous-réseaux doivent être balisés comme suit. Si vous utilisez la version2.1.2
ou une version ultérieure, cette identification est facultative. Vous souhaiterez peut-être baliser un sous-réseau si plusieurs clusters s'exécutent dans le même VPC cluster ou si plusieurs AWS services partagent des sous-réseaux au sein d'un même sous-réseauVPC, et si vous souhaitez mieux contrôler l'emplacement des équilibreurs de charge pour chaque cluster. Si vous spécifiez explicitement un sous-réseau IDs sous forme d'annotation sur un objet de service, alors Kubernetes et le AWS Load Balancer Controller utilisez ces sous-réseaux directement pour créer l'équilibreur de charge. L'identification de sous-réseau n'est pas nécessaire si vous choisissez d'utiliser cette méthode pour approvisionner les équilibreurs de charge, et vous pouvez ignorer les exigences suivantes d'identification de sous-réseau privé et public. Remplacez
par le nom de votre cluster.my-cluster
-
Clé :
kubernetes.io/cluster/
my-cluster
-
Valeur :
shared
ouowned
-
-
Vos sous-réseaux publics et privés doivent répondre aux exigences suivantes, sauf si vous le spécifiez explicitement sous IDs forme d'annotation sur un service ou un objet d'entrée. Si vous configurez des équilibreurs de charge en spécifiant explicitement un sous-réseau IDs sous forme d'annotation sur un service ou un objet d'entrée, alors Kubernetes et le AWS Load Balancer Controller utilisez ces sous-réseaux directement pour créer l'équilibreur de charge et les balises suivantes ne sont pas requises.
-
Sous-réseaux privés : doivent être étiquetés dans le format suivant. C'est pour que Kubernetes et le AWS Load Balancer Controller savent que les sous-réseaux peuvent être utilisés pour les équilibreurs de charge internes. Si vous utilisez
eksctl
un EKS AWS AWS CloudFormation modèle Amazon pour créer le vôtre VPC après le 26 mars 2020, les sous-réseaux sont étiquetés de manière appropriée lors de leur création. Pour plus d'informations sur les EKS AWS AWS CloudFormation VPC modèles Amazon, consultezCréez un Amazon VPC pour votre EKS cluster Amazon.-
Clé :
kubernetes.io/role/internal-elb
-
Valeur :
1
-
-
Sous-réseau publics : doivent être étiquetés dans le format suivant. C'est pour que Kubernetes sait utiliser uniquement ces sous-réseaux pour les équilibreurs de charge externes au lieu de choisir un sous-réseau public dans chaque zone de disponibilité (en fonction de l'ordre lexicographique du sous-réseau). IDs Si vous utilisez
eksctl
un EKS AWS CloudFormation modèle Amazon pour créer le vôtre VPC après le 26 mars 2020, les sous-réseaux sont étiquetés de manière appropriée lors de leur création. Pour plus d'informations sur les EKS AWS CloudFormation VPC modèles Amazon, consultezCréez un Amazon VPC pour votre EKS cluster Amazon.-
Clé :
kubernetes.io/role/elb
-
Valeur :
1
-
Si les balises de rôle de sous-réseau ne sont pas explicitement ajoutées, le Kubernetes Le contrôleur de service examine la table de routage des VPC sous-réseaux de votre cluster pour déterminer s'il s'agit d'un sous-réseau privé ou public. Nous vous recommandons de ne pas vous fier à ce comportement et d'ajouter explicitement les identifications de rôle privées ou publiques. Le AWS Load Balancer Controller n'examine pas les tables de routage et nécessite la présence des balises privées et publiques pour une détection automatique réussie.
-
Considérations
-
La configuration de votre équilibreur de charge est contrôlée par des annotations qui sont ajoutées au manifeste de votre service. Les annotations de service sont différentes lorsque vous utilisez le AWS Load Balancer Controller par rapport à ce qu'ils sont lors de l'utilisation du contrôleur d'équilibrage de charge du fournisseur de AWS cloud. Assurez-vous de consulter les annotations
pour le AWS Load Balancer Controller avant de déployer des services. -
Lorsque vous utilisez le Amazon VPC CNI plugin for Kubernetes, le AWS Load Balancer Controller peut équilibrer la charge entre Amazon EC2 IP ou les cibles d'instance et les cibles IP Fargate. Lorsque vous utilisez des CNIplug-ins compatibles avec Alternate, le contrôleur peut uniquement équilibrer la charge par rapport aux cibles de l'instance. Pour plus d'informations sur les types de cibles de Network Load Balancer, veuillez consulter la section Type de cible dans le guide de l'utilisateur de Network Load Balancer
-
Si vous souhaitez ajouter des balises à l'équilibreur de charge lors de sa création ou après, ajoutez l'annotation suivante dans votre spécification de service. Pour plus d'informations, consultez la section Balises de AWS ressources
dans le AWS Load Balancer Controller . service.beta.kubernetes.io/aws-load-balancer-additional-resource-tags
-
Vous pouvez affecter des adresses IP Elastic au Network Load Balancer en ajoutant l'annotation suivante. Remplacez le
avec l'exemples de valeurs
Allocation IDs
une de vos adresses IP Elastic. Le nombre deAllocation IDs
doit correspondre au nombre de sous-réseaux utilisés pour l'équilibreur de charge. Pour de plus amples informations, veuillez consulter le .AWS Load Balancer Controller. service.beta.kubernetes.io/aws-load-balancer-eip-allocations: eipalloc-
xxxxxxxxxxxxxxxxx
,eipalloc-yyyyyyyyyyyyyyyyy
-
Amazon EKS ajoute une règle entrante au groupe de sécurité du nœud pour le trafic client et une règle pour chaque sous-réseau d'équilibreur de charge dans le cadre des contrôles de santé VPC de chaque Network Load Balancer que vous créez. Le déploiement d'un type de service
LoadBalancer
peut échouer si Amazon EKS tente de créer des règles dépassant le quota du nombre maximum de règles autorisé pour un groupe de sécurité. Pour plus d'informations, consultez la section Groupes de sécurité dans VPC les quotas Amazon dans le guide de VPC l'utilisateur Amazon. Tenez compte des options suivantes pour réduire les possibilités de dépassement du nombre maximum de règles pour un groupe de sécurité :-
Demandez une augmentation dans vos règles par quota de groupe de sécurité. Pour plus d'informations, consultez Demande d'une augmentation de quota dans le Guide de l'utilisateur de Service Quotas.
-
Utilisez des cibles IP plutôt que des cibles d'instance. Avec les cibles IP, vous pouvez partager des règles pour les mêmes ports cibles. Vous pouvez spécifier manuellement les sous-réseaux des équilibreurs de charge avec une annotation. Pour plus d'informations, voir Annotations sur
GitHub. -
Utilisez une entrée (ingress), au lieu d'un service de type
LoadBalancer
, pour envoyer le trafic vers votre service. L' AWS Application Load Balancer nécessite moins de règles que les Network Load Balancer. Vous pouvez le partager ALB entre plusieurs entrées. Pour de plus amples informations, veuillez consulter Application d'itinéraire et HTTP trafic avec Application Load Balancers. Vous ne pouvez pas partager un Network Load Balancer entre plusieurs services. -
Déployez vos clusters dans plusieurs comptes.
-
-
Si vos recettes Pods continuer à courir Windows dans un EKS cluster Amazon, un seul service doté d'un équilibreur de charge peut prendre en charge jusqu'à 1 024 back-end Pods. Chaque Pod possède sa propre adresse IP unique.
-
Nous recommandons de créer uniquement de nouveaux équilibreurs de charge réseau avec le AWS Load Balancer Controller. Toute tentative de remplacement des équilibreurs de charge réseau existants créés à l'aide du contrôleur d'équilibrage de charge du fournisseur de AWS cloud peut entraîner la création de plusieurs équilibreurs de charge réseau susceptibles de provoquer des interruptions de service des applications.
Créer un équilibreur de charge de réseau
Vous pouvez créer un équilibreur de charge de réseau avec des cibles IP ou d'instance.
(Facultatif) Déployer un exemple d'application
Prérequis
-
Au moins un sous-réseau public ou privé dans votre clusterVPC.
-
Ayez le AWS Load Balancer Controller déployé sur votre cluster. Pour de plus amples informations, veuillez consulter Acheminez le trafic Internet avec le AWS Load Balancer Controller. Nous recommandons la version
2.7.2
ou ultérieure.
Pour déployer un exemple d'application
-
Si vous effectuez un déploiement sur Fargate, assurez-vous de disposer d'un sous-réseau privé disponible dans votre profil Fargate VPC et créez un profil Fargate. Si vous ne déployez pas sur Fargate, ignorez cette étape. Vous pouvez créer le profil en exécutant la commande suivante ou dans la AWS Management Console en utilisant les mêmes valeurs pour
name
etnamespace
que dans la commande. Remplacez les
par vos propres valeurs.example values
eksctl create fargateprofile \ --cluster
\my-cluster
\ --regionregion-code
\ --namenlb-sample-app
--namespace nlb-sample-app
-
Déployez un exemple d'application.
-
Créez un espace de nom pour l'application.
kubectl create namespace
nlb-sample-app
-
Enregistrez le contenu suivant dans un fichier nommé
sur votre ordinateur.sample-deployment
.yamlapiVersion: apps/v1 kind: Deployment metadata: name:
nlb-sample-app
namespace:nlb-sample-app
spec: replicas:3
selector: matchLabels: app:nginx
template: metadata: labels: app:nginx
spec: containers: - name:nginx
image:public.ecr.aws/nginx/nginx:1.23
ports: - name:tcp
containerPort:80
-
Appliquez le fichier manifeste à votre cluster.
kubectl apply -f
sample-deployment
.yaml
-
-
Créez un service avec un Network Load Balancer interne qui équilibre la charge vers les cibles IP.
-
Enregistrez le contenu suivant dans un fichier nommé
sur votre ordinateur. Si vous déployez vers des nœuds Fargate, supprimez la lignesample-service
.yamlservice.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
.apiVersion: v1 kind: Service metadata: name:
nlb-sample-service
namespace:nlb-sample-app
annotations: service.beta.kubernetes.io/aws-load-balancer-type: external service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing spec: ports: - port:80
targetPort:80
protocol:TCP
type: LoadBalancer selector: app:nginx
-
Appliquez le fichier manifeste à votre cluster.
kubectl apply -f
sample-service
.yaml
-
-
Vérifiez que le service a été déployé.
kubectl get svc
nlb-sample-service
-nnlb-sample-app
L'exemple qui suit illustre un résultat.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
sample-service
LoadBalancer10.100.240.137
k8s-nlbsampl
-nlbsampl
-xxxxxxxxxx
-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.com80
:32400
/TCP
16hNote
Les valeurs pour
et10.100.240.137
-xxxxxxxxxx
xxxxxxxxxxxxxxxx
seront différents de ceux de l'exemple de sortie (ils seront uniques à votre équilibreur de charge) etus-west-2
peut être différent pour vous, en fonction de l'endroit dans Région AWS lequel se trouve votre cluster. -
Ouvrez l'Amazon EC2 AWS Management Console
. Sélectionnez Target Groups (Groupes cibles) (sous Load Balancing [Équilibrage de charge]) dans le panneau de navigation de gauche. Dans la colonne Name (Nom), sélectionnez le nom du groupe cible où la valeur de la colonne Load balancer (Équilibreur de charge) correspond à une partie du nom dans la colonne EXTERNAL-IP
de la sortie à l'étape précédente. Par exemple, vous sélectionneriez le groupe cible nommék8s-default-samplese-
si votre sortie était la même que celle de l'étape précédente. Le Type de cible estxxxxxxxxxx
IP
, car cela a été spécifié dans l'exemple de manifeste de service. -
Sélectionnez votre Target group (Groupe cible), puis cliquez sur l'onglet Targets (Cibles). Sous Cibles enregistrées, vous devez voir trois adresses IP des trois réplicas déployés à une étape précédente. Attendez que le statut de toutes les cibles soit sain avant de continuer. L'affichage du statut
healthy
pour toutes les cibles peut prendre plusieurs minutes. Les cibles peuvent avoir l'étatunhealthy
avant qu'il soit remplacé parhealthy
. -
Envoyer le trafic vers le service en remplaçant
etxxxxxxxxxx-xxxxxxxxxxxxxxxx
par les valeurs renvoyées dans la sortie de l'étape précédente pourus-west-2
EXTERNAL-IP
. Si vous avez effectué le déploiement sur un sous-réseau privé, vous devrez consulter la page depuis un appareil de votre choixVPC, tel qu'un hôte Bastion. Pour plus d’informations, consultez .Linux Bastion Hosts activé. AWScurl k8s-default-samplese-
xxxxxxxxxx-xxxxxxxxxxxxxxxx
.elb.region-code
.amazonaws.comL'exemple qui suit illustre un résultat.
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> [...]
-
Lorsque vous avez terminé avec le déploiement, le service et l'espace de noms de l'exemple, supprimez-les.
kubectl delete namespace
nlb-sample-app