Préparer la mise en réseau pour les nœuds hybrides - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Préparer la mise en réseau pour les nœuds hybrides

Cette rubrique fournit une vue d’ensemble de la configuration réseau que vous devez avoir configurée avant de créer votre cluster Amazon EKS et d’y attacher des nœuds hybrides. Ce guide suppose que vous remplissez les conditions préalables requises pour la connectivité réseau hybride à l’aide d’un VPN site à site AWS, de Direct Connect AWS ou de votre propre solution VPN.

Connectivité réseau à nœuds hybrides.

Configuration réseau sur site

Configuration réseau minimale requise

Pour une expérience optimale, nous vous recommandons de disposer d’une connexion réseau fiable d’au moins 100 Mbit/s et d’une latence aller-retour maximale de 200 ms pour la connexion des nœuds hybrides à la région AWS. Il s’agit d’une recommandation générale qui s’applique à la plupart des cas d’utilisation, mais qui ne constitue pas une exigence stricte. Les exigences en matière de bande passante et de latence peuvent varier en fonction du nombre de nœuds hybrides et des caractéristiques de votre charge de travail, telles que la taille de l’image de l’application, l’élasticité de l’application, les configurations de surveillance et de journalisation, ainsi que les dépendances de l’application pour accéder aux données stockées dans d’autres services AWS. Nous vous recommandons d’effectuer des tests avec vos propres applications et environnements avant le déploiement en production afin de vérifier que votre configuration réseau répond aux exigences de vos charges de travail.

CIDR des nœuds et pods sur site

Identifiez les CIDR de nœuds et de pods que vous utiliserez pour vos nœuds hybrides et les charges de travail qui s’exécutent sur ceux-ci. Le CIDR du nœud est attribué à partir de votre réseau local et le CIDR du pod est attribué à partir de votre interface réseau de conteneur (CNI) si vous utilisez un réseau superposé pour votre CNI. Vous transmettez vos CIDR de nœuds sur site et vos CIDR de pods en tant qu’entrées lorsque vous créez votre cluster EKS à l’aide des champs RemoteNodeNetwork et RemotePodNetwork. Les CIDR de vos nœuds sur site doivent être routables sur votre réseau sur site. Consultez la section suivante pour obtenir des informations sur la routabilité CIDR du pod sur site.

Les blocs CIDR des nœuds et pods sur site doivent répondre aux exigences suivantes :

  1. Se situer dans l’une des plages RFC-1918 IPv4 suivantes : 10.0.0.0/8, 172.16.0.0/12, ou 192.168.0.0/16.

  2. Ne pas se chevaucher entre eux, le CIDR VPC pour votre cluster EKS ou votre CIDR de service Kubernetes IPv4.

Routage du réseau de pods sur site

Lorsque vous utilisez des nœuds hybrides EKS, nous vous recommandons généralement de rendre vos CIDR de pods sur site routables sur votre réseau local afin de permettre une communication de cluster complète et toutes les fonctionnalités entre les environnements cloud et sur site.

Réseaux de pods routables

Si vous êtes en mesure de rendre votre réseau de pods routable sur votre réseau local, suivez les instructions ci-dessous.

  1. Configurez le champ RemotePodNetwork pour votre cluster EKS avec votre CIDR de pod sur site, vos tables de routage VPC avec votre CIDR de pod sur site et votre groupe de sécurité de cluster EKS avec votre CIDR de pod sur site.

  2. Il existe plusieurs techniques que vous pouvez utiliser pour rendre votre pod CIDR sur site routable sur votre réseau sur site, notamment le protocole de passerelle frontière (BGP), les routes statiques ou d’autres solutions de routage personnalisées. BGP est la solution recommandée, car elle est plus évolutive et plus facile à gérer que les autres solutions qui nécessitent une configuration personnalisée ou manuelle des routes. AWS prend en charge les capacités BGP de Cilium et Calico pour la publicité des CIDR de pod. Pour plus d’informations, consultez Configurer CNI pour les nœuds hybrides et CIDR de pods distants routables.

  3. Les webhooks peuvent s’exécuter sur des nœuds hybrides, car le plan de contrôle EKS est capable de communiquer avec les adresses IP des pods attribuées aux webhooks.

  4. Les charges de travail exécutées sur les nœuds cloud peuvent communiquer directement avec les charges de travail exécutées sur les nœuds hybrides du même cluster EKS.

  5. D’autres services AWS, tels que les Application Load Balancers AWS et le service géré Amazon pour Prometheus, sont capables de communiquer avec les charges de travail exécutées sur des nœuds hybrides afin d’équilibrer le trafic réseau et de récupérer les métriques des pods.

Réseaux de pods non routables

Si vous ne parvenez pas à rendre vos réseaux de pods routables sur votre réseau local, suivez les instructions ci-dessous.

  1. Les webhooks ne peuvent pas s’exécuter sur des nœuds hybrides, car ils nécessitent une connectivité entre le plan de contrôle EKS et les adresses IP des pods attribuées aux webhooks. Dans ce cas, nous vous recommandons d’exécuter les webhooks sur les nœuds cloud du même cluster EKS que vos nœuds hybrides. Pour plus d’informations, consultez Configurer les webhooks pour les nœuds hybrides.

  2. Les charges de travail exécutées sur des nœuds cloud ne peuvent pas communiquer directement avec les charges de travail exécutées sur des nœuds hybrides lorsque vous utilisez VPC CNI pour les nœuds cloud et Cilium ou Calico pour les nœuds hybrides.

  3. Utilisez la distribution du trafic de service pour maintenir le trafic local dans la zone d’où il provient. Pour plus d’informations sur la distribution du trafic de service, voir Configuration de la distribution du trafic de service.

  4. Configurez votre CNI pour utiliser le masquage de sortie ou la traduction d’adresses réseau (NAT) pour le trafic des pods lorsqu’il quitte vos hôtes sur site. Cette fonctionnalité est activée par défaut dans Cilium. Calico a besoin que natOutgoing soit défini sur true.

  5. D’autres services AWS, tels que les Application Load Balancers AWS et le service géré Amazon pour Prometheus, ne peuvent pas communiquer avec les charges de travail exécutées sur des nœuds hybrides.

Accès requis pendant l’installation et la mise à niveau des nœuds hybrides

Vous devez avoir accès aux domaines suivants pendant le processus d’installation où vous installez les dépendances des nœuds hybrides sur vos hôtes. Ce processus peut être effectué une seule fois lors de la création des images de votre système d’exploitation ou sur chaque hôte au moment de l’exécution. Cela inclut l’installation initiale et la mise à niveau de la version Kubernetes de vos nœuds hybrides.

Certains paquets sont installés à l’aide du gestionnaire de paquets par défaut du système d’exploitation. Pour AL2023 et RHEL, la commande yum sert à installer containerd, ca-certificates. iptables et amazon-ssm-agent. Pour Ubuntu, apt est utilisé pour installer containerd, ca-certificates, et iptables, et snap sert à installer amazon-ssm-agent.

Composant URL Protocole Port

Artefacts du nœud EKS (S3)

https://hybrid-assets.eks.amazonaws.com

HTTPS

443

Points de terminaison du service EKS

https://eks.region.amazonaws.com

HTTPS

443

Points de terminaison du service ECR

https://api.ecr.region.amazonaws.com

HTTPS

443

Points de terminaison EKS ECR

Voir Affichage des registres d’images conteneurs Amazon pour les modules complémentaires Amazon EKS pour les points terminaux régionaux.

HTTPS

443

Point de terminaison binaire SSM 1

https://amazon-ssm-region.s3.region.amazonaws.com

HTTPS

443

Point de terminaison du service SSM 1

https://ssm.region.amazonaws.com

HTTPS

443

Point de terminaison binaire IAM Anywhere 2

https://rolesanywhere.amazonaws.com

HTTPS

443

Point de terminaison du service IAM Anywhere 2

https://rolesanywhere.region.amazonaws.com

HTTPS

443

Points de terminaison du gestionnaire de paquets du système d’exploitation

Les points de terminaison du référentiel de paquets sont spécifiques au système d’exploitation et peuvent varier selon la région géographique.

HTTPS

443

Note

1 L’accès aux points de terminaison SSM AWS n’est nécessaire que si vous utilisez des activations hybrides SSM AWS pour votre fournisseur d’informations d’identification IAM sur site.

2 L’accès aux points de terminaison IAM AWS n’est requis que si vous utilisez Rôles Anywhere IAM AWS pour votre fournisseur d’informations d’identification IAM sur site.

Accès requis pour les opérations de cluster en cours

L’accès réseau suivant pour votre pare-feu local est nécessaire pour le fonctionnement continu du cluster.

Important

En fonction du CNI que vous avez choisi, vous devez configurer des règles d’accès réseau supplémentaires pour les ports CNI. Pour plus d’informations, consultez la documentation Cilium et la documentation Calico.

Type Protocole Direction Port Source Destination Utilisation

HTTPS

TCP

Sortant

443

CIDR des nœuds distants

IP du cluster EKS 1

kubelet vers le serveur API Kubernetes

HTTPS

TCP

Sortant

443

CIDR de pod distant(s)

IP du cluster EKS 1

Pod vers serveur API Kubernetes

HTTPS

TCP

Sortant

443

CIDR des nœuds distants

Point de terminaison du service SSM

Actualisation des informations d’identification des activations hybrides SSM et pulsations SSM toutes les 5 minutes

HTTPS

TCP

Sortant

443

CIDR des nœuds distants

Point de terminaison du service IAM Anywhere

Actualisation des informations d’identification Rôles Anywhere IAM

HTTPS

TCP

Sortant

443

CIDR de pod distant(s)

Point de terminaison régional STS

Pod vers point de terminaison STS, requis uniquement pour IRSA

HTTPS

TCP

Sortant

443

CIDR des nœuds distants

Point de terminaison du service d’authentification Amazon EKS

Nœud vers le point de terminaison d’authentification Amazon EKS, requis uniquement pour l’identité du pod Amazon EKS

HTTPS

TCP

Entrant

10250

IP du cluster EKS 1

CIDR des nœuds distants

Serveur API Kubernetes vers kubelet

HTTPS

TCP

Entrant

Ports Webhook

IP du cluster EKS 1

CIDR de pod distant(s)

Serveur API Kubernetes vers webhooks

HTTPS

TCP, UDP

Entrant, sortant

53

CIDR de pod distant(s)

CIDR de pod distant(s)

Pod vers CoreDNS. Si vous exécutez au moins un réplica de CoreDNS dans le cloud, vous devez autoriser le trafic DNS vers le VPC où CoreDNS est exécuté.

Défini par l'utilisateur

Défini par l'utilisateur

Entrant, sortant

Ports d’applications

CIDR de pod distant(s)

CIDR de pod distant(s)

Pod à pod

Note

1 Les adresses IP du cluster EKS. Consultez la section suivante sur les interfaces réseau Elastic Amazon EKS.

Interfaces réseau Amazon EKS

Amazon EKS associe des interfaces réseau aux sous-réseaux du VPC que vous transmettez lors de la création du cluster afin de permettre la communication entre le plan de contrôle EKS et votre VPC. Les interfaces réseau créées par Amazon EKS sont accessibles après la création du cluster dans la console Amazon EC2 ou via l’interface CLI AWS. Les interfaces réseau d’origine sont supprimées et de nouvelles interfaces réseau sont créées lorsque des modifications sont appliquées à votre cluster EKS, telles que les mises à niveau de version Kubernetes. Vous pouvez restreindre la plage d’adresses IP pour les interfaces réseau Amazon EKS en utilisant des tailles de sous-réseaux limitées pour les sous-réseaux que vous transmettez lors de la création du cluster, ce qui facilite la configuration de votre pare-feu local afin d’autoriser la connectivité entrante/sortante vers cet ensemble connu et limité d’adresses IP. Pour contrôler les sous-réseaux dans lesquels les interfaces réseau sont créées, vous pouvez limiter le nombre de sous-réseaux que vous spécifiez lors de la création d’un cluster ou mettre à jour les sous-réseaux après avoir créé le cluster.

Les interfaces réseau fournies par Amazon EKS ont une description au format Amazon EKS your-cluster-name . Consultez l’exemple ci-dessous pour connaître la commande CLI AWS que vous pouvez utiliser pour trouver les adresses IP des interfaces réseau provisionnées par Amazon EKS. Remplacez par l’ID du VPC que vous avez transmis lors de la création du cluster par VPC_ID.

aws ec2 describe-network-interfaces \ --query 'NetworkInterfaces[?(VpcId == VPC_ID && contains(Description,Amazon EKS))].PrivateIpAddress'

Configuration du VPC et du sous-réseau AWS

Les exigences existantes en matière de VPC et de sous-réseau pour Amazon EKS s’appliquent aux clusters avec des nœuds hybrides. De plus, votre CIDR VPC ne peut pas chevaucher les CIDR de vos nœuds et pods sur site. Vous devez configurer les routes dans votre table de routage VPC pour votre nœud sur site et, éventuellement, les CIDR des pods. Ces routes doivent être configurées pour acheminer le trafic vers la passerelle que vous utilisez pour votre connectivité réseau hybride, qui est généralement une passerelle privée virtuelle (VGW) ou une passerelle de transit (TGW). Si vous utilisez TGW ou VGW pour connecter votre VPC à votre environnement sur site, vous devez créer une connexion TGW ou VGW pour votre VPC. Votre VPC doit prend en charge le nom d'hôte DNS et la résolution DNS.

Les étapes suivantes utilisent l’interface CLI AWS. Vous pouvez également créer ces ressources dans le AWS Management Console ou avec d’autres interfaces telles que CloudFormation AWS, CDK AWS ou Terraform.

Étape 1 : créer un VPC

  1. Exécutez la commande suivante pour créer un VPC. Remplacer VPC_CIDR par une plage CIDR RFC-1918 (privée) IPv4 ou non RFC-1918 (publique) (par exemple 10.0.0.0/16). Remarque : la résolution DNS, qui est une exigence EKS, est activée par défaut pour le VPC.

    aws ec2 create-vpc --cidr-block VPC_CIDR
  2. Activez les noms d’hôte DNS pour votre VPC. Remarque : la résolution DNS est activée par défaut pour le VPC. Remplacez VPC_ID par l’ID du VPC que vous avez créé à l’étape précédente.

    aws ec2 modify-vpc-attribute --vpc-id VPC_ID --enable-dns-hostnames

Étape 2 : créer des sous-réseaux

Créez au moins 2 sous-réseaux. Amazon EKS utilise ces sous-réseaux pour les interfaces réseau du cluster. Pour plus d’informations, consultez la section Exigences et considérations relatives aux sous-réseaux.

  1. Vous pouvez trouver les zones de disponibilité d’une région AWS à l’aide de la commande suivante. Remplacez us-west-2 par votre région.

    aws ec2 describe-availability-zones \ --query 'AvailabilityZones[?(RegionName == us-west-2)].ZoneName'
  2. Créez un sous-réseau. Remplacez VPC_ID par l’ID du VPC. Remplacez SUBNET_CIDR par le bloc CIDR de votre sous-réseau (par exemple 10.0.1.0/24). Remplacez AZ par la zone de disponibilité dans laquelle le sous-réseau sera créé (par exemple us-west-2a). Les sous-réseaux que vous créez doivent se trouver dans au moins deux zones de disponibilité différentes.

    aws ec2 create-subnet \ --vpc-id VPC_ID \ --cidr-block SUBNET_CIDR \ --availability-zone AZ

(Facultatif) Étape 3 : connecter le VPC à la passerelle de transit (TGW) Amazon VPC ou à la passerelle privée virtuelle (VGW) AWS Direct Connect

Si vous utilisez un TGW ou un VGW, connectez votre VPC au TGW ou au VGW. Pour plus d’informations, consultez la section Pièces jointes Amazon VPC dans les passerelles de transit Amazon VPC ou Associations de passerelles privées virtuelles Direct Connect AWS.

Passerelle de transit

Exécutez la commande suivante pour connecter une passerelle Transit Gateway. Remplacez VPC_ID par l’ID du VPC. Remplacez SUBNET_ID1 et SUBNET_ID2 par les identifiants des sous-réseaux que vous avez créés à l’étape précédente. Remplacez TGW_ID par l’ID de votre TGW.

aws ec2 create-transit-gateway-vpc-attachment \ --vpc-id VPC_ID \ --subnet-ids SUBNET_ID1 SUBNET_ID2 \ --transit-gateway-id TGW_ID

Passerelle privée virtuelle

Exécutez la commande suivante pour connecter une passerelle Transit Gateway. Remplacez VPN_ID par l’ID de votre VGW. Remplacez VPC_ID par l’ID du VPC.

aws ec2 attach-vpn-gateway \ --vpn-gateway-id VPN_ID \ --vpc-id VPC_ID

(Facultatif) Étape 4 : créer une table de routage

Vous pouvez modifier la table de routage principale pour le VPC ou créer une table de routage personnalisée. Les étapes suivantes permettent de créer une table de routage personnalisée avec les routes vers les CIDR des nœuds et des pods sur site. Pour plus d’informations, consultez Tables de routage de sous-réseau. Remplacez VPC_ID par l’ID du VPC.

aws ec2 create-route-table --vpc-id VPC_ID

Étape 5 : créer des routes pour les nœuds et les pods sur site

Créez des routes dans la table de routage pour chacun de vos nœuds distants sur site. Vous pouvez modifier la table de routage principale pour le VPC ou utiliser la table de routage personnalisée que vous avez créée à l’étape précédente.

Les exemples ci-dessous montrent comment créer des routes pour vos CIDR de nœuds et de pods sur site. Dans les exemples, une passerelle de transit (TGW) est utilisée pour connecter le VPC à l’environnement sur site. Si vous disposez de plusieurs CIDR de nœuds et de pods sur site, répétez les étapes pour chaque CIDR.

  • Si vous utilisez une passerelle Internet ou une passerelle privée virtuelle (VGW), remplacez --transit-gateway-id par --gateway-id.

  • Remplacez RT_ID par l’ID de la table de routage que vous avez créée à l’étape précédente.

  • Remplacez REMOTE_NODE_CIDR par la plage CIDR que vous utiliserez pour vos nœuds hybrides.

  • Remplacez REMOTE_POD_CIDR par la plage CIDR que vous utiliserez pour les pods s’exécutant sur des nœuds hybrides. La plage CIDR du pod correspond à la configuration CNI (Container Networking Interface), qui utilise le plus souvent un réseau superposé sur site. Pour de plus amples informations, consultez Configurer CNI pour les nœuds hybrides.

  • Remplacez TGW_ID par l’ID de votre TGW.

Réseau de nœuds distants

aws ec2 create-route \ --route-table-id RT_ID \ --destination-cidr-block REMOTE_NODE_CIDR \ --transit-gateway-id TGW_ID

Réseau de pods distants

aws ec2 create-route \ --route-table-id RT_ID \ --destination-cidr-block REMOTE_POD_CIDR \ --transit-gateway-id TGW_ID

(Facultatif) Étape 6 : associer les sous-réseaux à la table de routage

Si vous avez créé une table de routage personnalisée à l’étape précédente, associez chacun des sous-réseaux que vous avez créés à l’étape précédente à votre table de routage personnalisée. Si vous modifiez la table de routage principale du VPC, les sous-réseaux sont automatiquement associés à la table de routage principale du VPC et vous pouvez ignorer cette étape.

Exécutez la commande suivante pour chacun des sous-réseaux que vous avez créés lors des étapes précédentes. Remplacer RT_ID par la table de routage que vous avez créée à l’étape précédente. Remplacer SUBNET_ID par l’ID d’un sous-réseau.

aws ec2 associate-route-table --route-table-id RT_ID --subnet-id SUBNET_ID

Configuration du groupe de sécurité du cluster

L’accès suivant pour votre groupe de sécurité de cluster EKS est nécessaire pour le fonctionnement continu du cluster. Amazon EKS crée automatiquement les règles de groupe de sécurité entrantes requises pour les nœuds hybrides lorsque vous créez ou mettez à jour votre cluster avec des réseaux de nœuds distants et de pods configurés. Étant donné que les groupes de sécurité autorisent par défaut tout le trafic sortant, Amazon EKS ne modifie pas automatiquement les règles sortantes du groupe de sécurité du cluster pour les nœuds hybrides. Si vous souhaitez personnaliser le groupe de sécurité du cluster, vous pouvez limiter le trafic aux règles indiquées dans le tableau suivant.

Type Protocole Direction Port Source Destination Utilisation

HTTPS

TCP

Entrant

443

CIDR des nœuds distants

N/A

Kubelet vers le serveur API Kubernetes

HTTPS

TCP

Entrant

443

CIDR de pod distant(s)

N/A

Pods nécessitant un accès au serveur API K8s lorsque le CNI n’utilise pas NAT pour le trafic des pods.

HTTPS

TCP

Sortant

10250

N/A

CIDR des nœuds distants

Serveur API Kubernetes vers Kubelet

HTTPS

TCP

Sortant

Ports Webhook

N/A

CIDR de pod distant(s)

Serveur API Kubernetes vers webhook (si vous exécutez des webhooks sur des nœuds hybrides)

Important

Limites des règles des groupes de sécurité : les groupes de sécurité Amazon EC2 ont un maximum de 60 règles entrantes par défaut. Les règles entrantes du groupe de sécurité peuvent ne pas s’appliquer si le groupe de sécurité de votre cluster approche cette limite. Dans ce cas, il peut être nécessaire d’ajouter manuellement les règles entrantes manquantes.

Responsabilité du nettoyage CIDR : si vous supprimez des réseaux de nœuds distants ou de pods des clusters EKS, EKS ne supprime pas automatiquement les règles de groupe de sécurité correspondantes. Vous êtes responsable de la suppression manuelle des réseaux de nœuds distants ou de pods inutilisés de vos règles de groupe de sécurité.

Pour plus d'informations sur le groupe de sécurité de cluster créé par Amazon EKS, consultez Voir les exigences relatives aux groupes de sécurité Amazon EKS pour les clusters.

(Facultatif) Configuration manuelle du groupe de sécurité

Si vous devez créer des groupes de sécurité supplémentaires ou modifier les règles créées automatiquement, vous pouvez utiliser les commandes suivantes comme référence. Par défaut, la commande ci-dessous crée un groupe de sécurité qui autorise tous les accès sortants. Vous pouvez restreindre l’accès sortant afin qu’il n’inclue que les règles ci-dessus. Si vous envisagez de limiter les règles sortantes, nous vous recommandons de tester minutieusement toutes vos applications et la connectivité des pods avant d’appliquer vos règles modifiées à un cluster de production.

  • Dans la première commande, remplacez SG_NAME par le nom de votre groupe de sécurité.

  • Dans la première commande, remplacez VPC_ID par l’ID du VPC que vous avez créé à l’étape précédente.

  • Dans la deuxième commande, remplacez SG_ID par l’ID du groupe de sécurité que vous avez créé dans la première commande.

  • Dans la deuxième commande, remplacez REMOTE_NODE_CIDR et REMOTE_POD_CIDR par les valeurs correspondant à vos nœuds hybrides et à votre réseau local.

aws ec2 create-security-group \ --group-name SG_NAME \ --description "security group for hybrid nodes" \ --vpc-id VPC_ID
aws ec2 authorize-security-group-ingress \ --group-id SG_ID \ --ip-permissions '[{"IpProtocol": "tcp", "FromPort": 443, "ToPort": 443, "IpRanges": [{"CidrIp": "REMOTE_NODE_CIDR"}, {"CidrIp": "REMOTE_POD_CIDR"}]}]'