View a markdown version of this page

Commencez 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 sur 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.

Commencez 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, voirPasserelle 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 CNI VPC sur les nœuds de cloud : les nœuds de passerelle et les autres nœuds de cloud du cluster doivent utiliser le CNI AWS VPC. La passerelle s'appuie 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 l'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 passerelle doivent autoriser le trafic UDP entrant et sortant sur le port 8472. Du côté du nœud hybride, les règles de pare-feu sur site doivent également autoriser le trafic du port UDP 8472 à destination et en provenance des adresses IP du nœud 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 en utilisant l'une des approches suivantes :

      EKS Pod Identity (recommended)

      Utilisez EKS Pod Identity pour accorder des autorisations uniquement au compte de service du module Gateway.

      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 liant le rôle IAM au compte du 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

      Associez 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 approvisionner des 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 garantir une haute disponibilité. Deux options de configuration de nœuds sont prises en charge pour la passerelle :

  • Mode automatique EKS (recommandé)— Les nœuds sont approvisionné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é avec 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 le graphique Helm. Ils NodePool approvisionnent les instances EC2 avec les étiquettes, les taches et source/destination vérifient la configuration appropriées. Il n'est pas nécessaire de provisionner ou de configurer manuellement les nœuds.

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

  • YOUR_NODE_ROLE— Le nom du rôle Node IAM utilisé par EKS Auto Mode pour approvisionner 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éer un rôle IAM de nœud pour le mode automatique d'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 approvisionné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

Les principaux champs de cette configuration sont les suivants :

  • 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— L'altération garantit hybrid-gateway-node: NoSchedule uniquement les pods de passerelle dotés d'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 du graphique Helm pour cibler les pods de passerelle vers ces nœuds.

  • nodeClassRef— Associe le NodePool NodeClass à la configuration de source/destination vérification.

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, les marques requises et un modèle de lancement personnalisé qui désactive le source/destination contrôle au lancement.

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

Créez un modèle de lancement avec des données utilisateur qui désactive le source/destination contrôle de l'ENI principal lorsque l'instance démarre :

# 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 de démarrage EKS.

Étape 2 : créer le groupe de nœuds gérés

Créez un groupe de nœuds gérés dédiés avec le libellé de la passerelle, la tache 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 :

  • --labelsest défini de hybrid-gateway-node=true telle sorte que le sélecteur de nœuds du graphique Helm cible ces nœuds.

  • --taintsajoute une NoSchedule touche afin que seuls les modules de passerelle ayant un calendrier de tolérance correspondant sur ces nœuds soient limités.

  • --launch-templateattache le modèle de lancement qui désactive source/destination la 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 exemple10.0.0.0/16,). Utilisé pour la configuration VTEP de Cilium afin que les nœuds hybrides acheminent le VPC-bound trafic via la passerelle.

podCIDRs

Comma-separated liste des CIDR de pods 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 identifiants de table de routage VPC à programmer (par exemple,rtb-0abc1234def567890,rtb-0fed9876cba543210). La passerelle crée des routes dans ces tables pointant les CIDR du pod hybride vers l'instance de passerelle active.

Pour obtenir la liste complète des valeurs configurables, voirRé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 fonctionne correctement.

Vérifier l'état du pod

Vérifiez que deux pods 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érifier l'élection du leader

Vérifiez qu'un pod a obtenu le bail électoral du chef :

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

La sortie indique le leader actuel dans la HOLDER colonne :

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

Vérifier le terminal de santé

Vérifiez que le terminal de santé répond sur le module 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 la AWS CLI, 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=='[.replaceable]`POD_CIDR`']"

Chaque CIDR du pod hybride doit avoir un itinéraire NetworkInterfaceId défini vers l'ENI principal de l'instance principale.

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 diagramme de 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 routes des CIDR de votre pod hybride dans les tables de routage VPC afin d'éviter de router le trafic vers des instances qui n'exécutent plus la passerelle. Vous pouvez supprimer des routes à l'aide de la AWS CLI :

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

Étapes suivantes