View a markdown version of this page

Démarrez avec la passerelle EKS Hybrid Nodes - Amazon EKS

Aidez à améliorer cette page

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.

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

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.

Démarrez avec la passerelle EKS Hybrid Nodes

Cette page décrit les prérequis, la préparation de l'environnement, l'installation, la vérification et la suppression de la passerelle Amazon EKS Hybrid Nodes. Pour une présentation de la passerelle et de son architecture, consultezPasserelle Amazon EKS Hybrid Nodes.

Conditions préalables

Avant d'installer la passerelle Hybrid Nodes, vérifiez que votre environnement répond aux exigences suivantes :

  • Cluster EKS avec support Cilium CNI et VTEP  : votre cluster EKS doit utiliser la version EKS de Cilium comme CNI sur les nœuds hybrides, et Cilium VTEP doit être activé. Pour de plus amples informations, veuillez consulter Configurer le CNI pour la passerelle Hybrid Nodes.

  • AWS VPC CNI sur les nœuds cloud  : les nœuds de passerelle et les autres nœuds cloud du cluster doivent utiliser le AWS VPC CNI. La passerelle repose sur le VPC-native routage pour transférer le trafic entre le VPC et le tunnel VXLAN.

  • Connectivité hybride  : une connexion privée entre votre VPC et votre environnement sur site est requise. Vous pouvez utiliser AWS Direct Connect, AWS Site-to-Site un VPN ou votre propre solution VPN. Pour de plus amples informations, veuillez consulter Préparer la mise en réseau pour les nœuds hybrides.

  • Trafic VXLAN autorisé  : les groupes de sécurité attachés aux instances EC2 de la passerelle doivent autoriser le trafic UDP entrant et sortant sur le port 8472. Du côté des nœuds hybrides, les règles de pare-feu sur site doivent également autoriser le trafic du port UDP 8472 à destination et en provenance des adresses IP des nœuds de passerelle.

  • Autorisations IAM pour la gestion des tables de routage  : la passerelle nécessite les actions EC2 suivantes pour gérer les tables de routage VPC :

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Vous pouvez accorder ces autorisations de l'une des manières suivantes :

      EKS Pod Identity (recommended)

      Utilisez EKS Pod Identity pour accorder des autorisations uniquement au compte de service du pod de passerelle.

      1. Installez le module complémentaire EKS Pod Identity Agent sur votre cluster s'il n'est pas déjà installé :

        aws eks create-addon \ --cluster-name CLUSTER_NAME \ --addon-name eks-pod-identity-agent
      2. Créez un rôle IAM avec les autorisations EC2 requises et une politique de confiance pour EKS Pod Identity :

        cat > gateway-trust-policy.json << 'EOF' { "Version": "2012-10-17" , "Statement": [ { "Effect": "Allow", "Principal": { "Service": "pods.eks.amazonaws.com" }, "Action": ["sts:AssumeRole", "sts:TagSession"] } ] } EOF aws iam create-role \ --role-name EKSHybridNodesGatewayRole \ --assume-role-policy-document file://gateway-trust-policy.json aws iam put-role-policy \ --role-name EKSHybridNodesGatewayRole \ --policy-name HybridNodesGatewayRouteTable \ --policy-document '{ "Version": "2012-10-17" , "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeRouteTables", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DescribeInstances" ], "Resource": "*" }] }'
      3. Créez une association d'identité de pod reliant le rôle IAM au compte de service de passerelle :

        aws eks create-pod-identity-association \ --cluster-name CLUSTER_NAME \ --namespace eks-hybrid-nodes-gateway \ --service-account eks-hybrid-nodes-gateway \ --role-arn arn:aws:iam::ACCOUNT_ID:role/EKSHybridNodesGatewayRole
      Node IAM role

      Attachez une politique intégrée ou gérée avec les autorisations requises au rôle IAM associé au profil d'instance des nœuds de passerelle :

      aws iam put-role-policy \ --role-name NODE_ROLE_NAME \ --policy-name HybridNodesGatewayRouteTable \ --policy-document '{ "Version": "2012-10-17" , "Statement": [{ "Effect": "Allow", "Action": [ "ec2:DescribeRouteTables", "ec2:CreateRoute", "ec2:ReplaceRoute", "ec2:DescribeInstances" ], "Resource": "*" }] }'

      Tous les pods des nœuds de passerelle disposeront de ces autorisations.

  • Mode automatique EKS (si vous utilisez le mode automatique pour les nœuds de passerelle)  : si vous prévoyez d'utiliser le mode automatique EKS pour provisionner les nœuds de passerelle, le mode automatique doit être activé sur votre cluster EKS. Pour plus d'informations, voir Activer le mode automatique EKS.

Préparer les nœuds de passerelle

La passerelle nécessite au moins deux nœuds EC2 pour une haute disponibilité. Deux options de configuration de nœud sont prises en charge pour la passerelle :

  • Mode automatique EKS (recommandé)— Les nœuds sont provisionnés automatiquement à l'aide d'un NodePool etNodeClass. Source/destination check, labels et taints sont tous configurés de manière déclarative.

  • Groupes de nœuds gérés— Vous approvisionnez des nœuds à l'aide d'un groupe de nœuds gérés ou de nœuds autogérés. Les étiquettes peuvent être configurées via l'API du groupe de nœuds géré, et la source/destination vérification peut être désactivée à l'aide d'un modèle de lancement personnalisé contenant des données utilisateur.

Mode automatique EKS (recommandé)

Lorsque vous utilisez le mode automatique EKS, vous devez créer un NodePool et NodeClass avant d'installer la carte Helm. Il NodePool fournit aux instances EC2 les étiquettes, les teintes et la configuration de source/destination vérification appropriées. Il n'est pas nécessaire de provisionner ou de configurer les nœuds manuellement.

Appliquez les ressources suivantes à votre cluster, en remplaçant les valeurs d'espace réservé :

  • YOUR_NODE_ROLE— Nom du rôle IAM de nœud utilisé par EKS Auto Mode pour provisionner les nœuds. Il s'agit du rôle que vous avez configuré (ou créé par EKS) lorsque vous avez activé le mode automatique sur le cluster. Pour plus d'informations, voir Création d'un rôle IAM de nœud pour le mode automatique EKS.

  • YOUR_CLUSTER_NAME— Le nom de votre cluster EKS.

  • SUBNET_ID_1, SUBNET_ID_2 — Identifiants de sous-réseau dans différentes zones de disponibilité où les nœuds de passerelle seront provisionnés.

apiVersion: eks.amazonaws.com/v1 kind: NodeClass metadata: name: hybrid-gateway spec: advancedNetworking: sourceDestCheck: DisabledPrimaryENI role: YOUR_NODE_ROLE securityGroupSelectorTerms: - tags: aws:eks:cluster-name: YOUR_CLUSTER_NAME subnetSelectorTerms: - id: SUBNET_ID_1 - id: SUBNET_ID_2 --- apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: hybrid-gateway spec: template: metadata: labels: hybrid-gateway-node: "true" spec: expireAfter: 336h nodeClassRef: group: eks.amazonaws.com kind: NodeClass name: hybrid-gateway requirements: - key: karpenter.sh/capacity-type operator: In values: - on-demand - key: eks.amazonaws.com/instance-category operator: In values: - c - m - r - key: eks.amazonaws.com/instance-generation operator: Gt values: - "4" - key: kubernetes.io/arch operator: In values: - amd64 - key: kubernetes.io/os operator: In values: - linux taints: - key: hybrid-gateway-node effect: NoSchedule terminationGracePeriod: 24h0m0s disruption: budgets: - nodes: 10% consolidateAfter: 30s consolidationPolicy: WhenEmptyOrUnderutilized

Champs clés de cette configuration :

  • advancedNetworking.sourceDestCheck: DisabledPrimaryENI— Désactive le source/destination contrôle EC2 sur l'ENI principal du nœud afin que la passerelle puisse transférer le trafic qui ne s'adresse pas à elle-même.

  • taints— Cette hybrid-gateway-node: NoSchedule altération garantit uniquement les pods de passerelle avec un calendrier de tolérance correspondant sur ces nœuds.

  • labels— L'hybrid-gateway-node: "true"étiquette est utilisée par le sélecteur de nœuds de la carte Helm pour cibler les pods de passerelle vers ces nœuds.

  • nodeClassRef— Lie le NodePool à la configuration NodeClass avec le source/destination check.

Groupes de nœuds gérés

Lorsque vous utilisez des groupes de nœuds gérés, créez un groupe de nœuds dédié pour la passerelle avec les étiquettes et les couleurs requises et un modèle de lancement personnalisé qui désactive la source/destination vérification au lancement.

Étape 1 : créer un modèle de lancement

Créez un modèle de lancement avec les données utilisateur qui désactive la source/destination vérification de l'ENI principal au démarrage de l'instance :

# Create the launch template with user data to disable source/dest check USERDATA=$(cat <<'SCRIPT' | base64 -w 0 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==BOUNDARY==" --==BOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \ -H "X-aws-ec2-metadata-token-ttl-seconds: 60") MAC=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/mac) ENI_ID=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/interface-id") REGION=$(curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \ http://169.254.169.254/latest/meta-data/placement/region) aws ec2 modify-network-interface-attribute \ --network-interface-id "$ENI_ID" \ --no-source-dest-check \ --region "$REGION" --==BOUNDARY==-- SCRIPT ) aws ec2 create-launch-template \ --launch-template-name YOUR_CLUSTER_NAME-gateway-lt \ --launch-template-data "{\"UserData\":\"${USERDATA}\",\"MetadataOptions\":{\"HttpTokens\":\"required\",\"HttpPutResponseHopLimit\":2}}"
Note

Le rôle IAM du nœud doit être ec2:ModifyNetworkInterfaceAttribute autorisé pour que le script de données utilisateur réussisse. Le format MIME en plusieurs parties garantit que les données utilisateur s'exécutent parallèlement au script d'amorçage EKS.

Étape 2 : Création du groupe de nœuds géré

Créez un groupe de nœuds gérés dédié avec l'étiquette de passerelle, l'étiquette et le modèle de lancement de l'étape 1 :

aws eks create-nodegroup \ --cluster-name YOUR_CLUSTER_NAME \ --nodegroup-name YOUR_CLUSTER_NAME-gateway-nodes \ --subnets SUBNET_ID_1 SUBNET_ID_2 \ --node-role YOUR_NODE_ROLE_ARN \ --instance-types INSTANCE_TYPE \ --ami-type AL2023_x86_64_STANDARD \ --scaling-config desiredSize=2,maxSize=2,minSize=2 \ --labels hybrid-gateway-node=true \ --taints "key=hybrid-gateway-node,effect=NO_SCHEDULE" \ --launch-template "name=YOUR_CLUSTER_NAME-gateway-lt,version=1"

Cela crée un groupe de nœuds gérés à 2 nœuds dans lequel :

  • --labelsdéfinit hybrid-gateway-node=true pour que le sélecteur de nœuds de la carte Helm cible ces nœuds.

  • --taintsajoute un inconvénient à ce NoSchedule que seuls les pods de passerelle avec un calendrier de tolérance correspondant soient utilisés sur ces nœuds.

  • --launch-templatejoint le modèle de lancement qui désactive la source/destination vérification au démarrage.

Utilisez des sous-réseaux dans différentes zones de disponibilité pour une haute disponibilité.

Installer avec Helm

Mode automatique EKS

Exécutez la commande suivante pour installer la passerelle avec le mode automatique EKS :

helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set vpcCIDR=VPC_CIDR \ --set podCIDRs=POD_CIDRS \ --set routeTableIDs=ROUTE_TABLE_IDS

Groupes de nœuds gérés ou nœuds autogérés

Pour les groupes de nœuds gérés ou les nœuds autogérés, définissez autoMode.enabled=false :

helm install eks-hybrid-nodes-gateway \ oci://public.ecr.aws/eks/eks-hybrid-nodes-gateway \ --version 1.0.0 \ --namespace eks-hybrid-nodes-gateway \ --create-namespace \ --set autoMode.enabled=false \ --set vpcCIDR=VPC_CIDR \ --set podCIDRs=POD_CIDRS \ --set routeTableIDs=ROUTE_TABLE_IDS

Valeurs Helm requises

Les valeurs suivantes sont requises pour toutes les installations :

Value Description

vpcCIDR

Le bloc CIDR de votre VPC de cluster EKS (par exemple,10.0.0.0/16). Utilisé pour la configuration Cilium VTEP afin que les nœuds hybrides acheminent le VPC-bound trafic via la passerelle.

podCIDRs

Comma-separated liste des CIDR de pod utilisés par Cilium sur les nœuds hybrides (par exemple,). 10.100.0.0/16,10.101.0.0/16 La passerelle crée des entrées de table de routage VPC et des routes VXLAN pour ces CIDR.

routeTableIDs

Comma-separated liste des ID de table de routage VPC à programmer (par exemple,rtb-0abc1234def567890,rtb-0fed9876cba543210). La passerelle crée des itinéraires dans ces tableaux pointant les CIDR du pod hybride vers l'instance de passerelle active.

Pour une liste complète des valeurs configurables, consultezRéférence de configuration de la passerelle Amazon EKS Hybrid Nodes.

Vérifier l'installation

Après avoir installé la passerelle, vérifiez qu'elle fonctionne et qu'elle est saine.

Vérifier l'état du pod

Vérifiez que deux modules de passerelle sont en cours d'exécution :

kubectl get pods -n eks-hybrid-nodes-gateway

Vous devriez voir une sortie similaire à :

NAME READY STATUS RESTARTS AGE eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 1/1 Running 0 2m eks-hybrid-nodes-gateway-5d4f6a7b8c-def34 1/1 Running 0 2m

Vérifiez l'élection du chef

Vérifiez qu'un groupe a acquis le contrat de location pour l'élection du leader :

kubectl get lease -n eks-hybrid-nodes-gateway

La sortie indique le leader actuel de la HOLDER colonne :

NAME HOLDER AGE hybrid-gateway-leader eks-hybrid-nodes-gateway-5d4f6a7b8c-abc12 2m

Vérifier l'état de santé

Vérifiez que le terminal d'intégrité répond sur le pod leader à l'aide de la redirection de port :

kubectl port-forward -n eks-hybrid-nodes-gateway LEADER_POD_NAME 8088:8088 & curl -s http://localhost:8088/healthz

Une passerelle saine renvoie une réponse HTTP 200.

Vérifier les entrées de la table de routage VPC

Dans la console Amazon VPC ou à l'aide de l' AWS interface de ligne de commande, vérifiez que vos tables de routage VPC contiennent des entrées pour les CIDR du pod hybride pointant vers l'ENI de l'instance de passerelle principale :

aws ec2 describe-route-tables \ --route-table-ids ROUTE_TABLE_ID \ --query "RouteTables[].Routes[?DestinationCidrBlock=='POD_CIDR']"

Chaque CIDR de pod hybride doit avoir une route avec l'NetworkInterfaceIdensemble vers l'ENI principal de l'instance leader.

Désinstallation

Pour supprimer la passerelle Hybrid Nodes, exécutez :

helm uninstall eks-hybrid-nodes-gateway --namespace eks-hybrid-nodes-gateway
Note

La désinstallation du graphique Helm ne supprime pas automatiquement les entrées de la table de routage VPC créées par la passerelle. Après la désinstallation, supprimez manuellement les itinéraires des CIDR de votre pod hybride des tables de routage VPC afin d'éviter d'acheminer le trafic vers des instances qui n'exécutent plus la passerelle. Vous pouvez supprimer des itinéraires à l'aide de l' AWS interface de ligne de commande :

aws ec2 delete-route \ --route-table-id ROUTE_TABLE_ID \ --destination-cidr-block POD_CIDR

Étapes suivantes