View a markdown version of this page

Inizia a usare il gateway EKS Hybrid Nodes - Amazon EKS

Contribuisci a migliorare questa pagina

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Per contribuire a questa guida per l'utente, scegli il GitHub link Modifica questa pagina nel riquadro destro di ogni pagina.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Inizia a usare il gateway EKS Hybrid Nodes

Questa pagina illustra i prerequisiti, la preparazione dell'ambiente, l'installazione, la verifica e la rimozione del gateway Amazon EKS Hybrid Nodes. Per un'introduzione al gateway e alla sua architettura, consultaGateway Amazon EKS Hybrid Nodes.

Prerequisiti

Prima di installare il gateway Hybrid Nodes, verifica che l'ambiente soddisfi i seguenti requisiti:

  • Cluster EKS con supporto Cilium CNI e VTEP: il cluster EKS deve utilizzare la versione EKS di Cilium come CNI sui nodi ibridi e Cilium VTEP deve essere abilitato. Per ulteriori informazioni, consulta Configurare CNI per il gateway Hybrid Nodes.

  • AWS VPC CNI su nodi cloud: i nodi gateway e gli altri nodi cloud del cluster devono utilizzare il AWS VPC CNI. Il gateway si basa sul VPC-native routing per inoltrare il traffico tra il VPC e il tunnel VXLAN.

  • Connettività ibrida: è necessaria una connessione privata tra il VPC e l'ambiente locale. Puoi utilizzare AWS Direct Connect, AWS Site-to-Site VPN o la tua soluzione VPN. Per ulteriori informazioni, consulta Preparazione della rete per i nodi ibridi.

  • Traffico VXLAN consentito: i gruppi di sicurezza collegati alle istanze EC2 del gateway devono consentire il traffico UDP in entrata e in uscita sulla porta 8472. Sul lato del nodo ibrido, le regole del firewall locale devono consentire anche il traffico della porta UDP 8472 da e verso gli indirizzi IP del nodo gateway.

  • Autorizzazioni IAM per la gestione delle tabelle di routing: il gateway richiede le seguenti azioni EC2 per gestire le tabelle di routing VPC:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Puoi concedere queste autorizzazioni utilizzando uno dei seguenti approcci:

      EKS Pod Identity (recommended)

      Utilizzate EKS Pod Identity per concedere le autorizzazioni solo all'account di servizio del gateway pod.

      1. Installa il componente aggiuntivo EKS Pod Identity Agent sul tuo cluster se non è già installato:

        aws eks create-addon \ --cluster-name CLUSTER_NAME \ --addon-name eks-pod-identity-agent
      2. Crea un ruolo IAM con le autorizzazioni EC2 richieste e una policy di fiducia per 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. Crea un'associazione di identità pod che colleghi il ruolo IAM all'account del servizio gateway:

        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

      Allega una policy in linea o gestita con le autorizzazioni richieste al ruolo IAM associato al profilo di istanza dei nodi del gateway:

      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": "*" }] }'

      Tutti i pod sui nodi gateway disporranno di queste autorizzazioni.

  • Modalità automatica EKS (se si utilizza la modalità automatica per i nodi gateway): se si prevede di utilizzare la modalità automatica EKS per il provisioning dei nodi gateway, la modalità automatica deve essere abilitata sul cluster EKS. Per ulteriori informazioni, consulta Abilitare la modalità automatica EKS.

Preparare i nodi gateway

Il gateway richiede almeno due nodi EC2 per un'elevata disponibilità. Esistono due opzioni di configurazione dei nodi supportate per il gateway:

  • Modalità EKS Auto (consigliata)— Il provisioning dei nodi viene eseguito automaticamente utilizzando un comando NodePool eNodeClass. Source/destination check, labels e taints sono tutti configurati in modo dichiarativo.

  • Gruppi di nodi gestiti— Il provisioning dei nodi viene eseguito utilizzando un gruppo di nodi gestito o nodi autogestiti. Le etichette possono essere configurate tramite l'API del gruppo di nodi gestiti e il source/destination controllo può essere disabilitato utilizzando un modello di avvio personalizzato con dati utente.

Modalità EKS Auto (consigliata)

Quando si utilizza la modalità automatica EKS, è necessario creare un NodePool e NodeClass prima di installare il grafico Helm. Fornisce NodePool alle istanze EC2 le etichette e i colori corretti e verifica la configurazione. source/destination Non è necessario effettuare il provisioning o configurare manualmente i nodi.

Applica le seguenti risorse al cluster, sostituendo i valori segnaposto:

  • YOUR_NODE_ROLE— Il nome del ruolo IAM del nodo utilizzato da EKS Auto Mode per il provisioning dei nodi. Questo è il ruolo che hai configurato (o creato da EKS) quando hai abilitato la modalità automatica sul cluster. Per ulteriori informazioni, consulta Create a Node IAM Role for EKS Auto Mode.

  • YOUR_CLUSTER_NAME— Il nome del tuo cluster EKS.

  • SUBNET_ID_1, SUBNET_ID_2 — ID di sottorete in diverse zone di disponibilità in cui verranno forniti i nodi gateway.

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

Campi chiave di questa configurazione:

  • advancedNetworking.sourceDestCheck: DisabledPrimaryENI— Disattiva il source/destination controllo EC2 sull'ENI primario del nodo in modo che il gateway possa inoltrare il traffico non indirizzato a se stesso.

  • taints— Il problema garantisce hybrid-gateway-node: NoSchedule solo i gateway pod con un programma di tolleranza corrispondente su questi nodi.

  • labels— L'hybrid-gateway-node: "true"etichetta viene utilizzata dal selettore di nodi del grafico di Helm per indirizzare i pod gateway verso questi nodi.

  • nodeClassRef— Collega la NodePool configurazione alla NodeClass con la source/destination verifica.

Gruppi di nodi gestiti

Quando utilizzi gruppi di nodi gestiti, crea un gruppo di nodi dedicato per il gateway con le etichette e i taint richiesti e un modello di avvio personalizzato che disabiliti il source/destination controllo all'avvio.

Fase 1: creazione di un modello di avvio

Crea un modello di lancio con i dati utente che disabiliti il source/destination controllo sull'ENI principale all'avvio dell'istanza:

# 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}}"
Nota

Il ruolo IAM del nodo deve disporre dell'ec2:ModifyNetworkInterfaceAttributeautorizzazione affinché lo script dei dati utente abbia successo. Il formato multipart MIME garantisce che i dati utente vengano eseguiti insieme allo script di bootstrap EKS.

Fase 2: Creare il gruppo di nodi gestito

Crea un gruppo di nodi gestiti dedicato con l'etichetta del gateway, taint e il modello di avvio del passaggio 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"

Questo crea un gruppo di nodi gestiti a 2 nodi in cui:

  • --labelsimposta hybrid-gateway-node=true in modo che il selettore di nodi del grafico di Helm abbia come target questi nodi.

  • --taintsaggiunge una NoSchedule macchia in modo che solo i gateway pod con un programma di tolleranza corrispondente su questi nodi.

  • --launch-templateallega il modello di avvio che source/destination disabilita il controllo all'avvio.

Utilizza sottoreti in diverse zone di disponibilità per un'elevata disponibilità.

Installa con Helm

Modalità automatica di EKS

Esegui il seguente comando per installare il gateway con EKS Auto Mode:

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

Gruppi di nodi gestiti o nodi autogestiti

Per gruppi di nodi gestiti o nodi autogestiti, imposta: 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

Valori Helm obbligatori

I seguenti valori sono obbligatori per tutte le installazioni:

Valore Description

vpcCIDR

Il blocco CIDR del VPC del cluster EKS (ad esempio10.0.0.0/16,). Utilizzato per la configurazione VTEP di Cilium in modo che i nodi ibridi VPC-bound instradino il traffico attraverso il gateway.

podCIDRs

Comma-separated elenco di pod CIDR utilizzati da Cilium sui nodi ibridi (ad esempio,). 10.100.0.0/16,10.101.0.0/16 Il gateway crea voci della tabella di routing VPC e route VXLAN per questi CIDR.

routeTableIDs

Comma-separated elenco degli ID delle tabelle di routing VPC da programmare (ad esempio,rtb-0abc1234def567890,rtb-0fed9876cba543210). Il gateway crea percorsi in queste tabelle indirizzando i pod CIDR ibridi verso l'istanza del gateway attivo.

Per un elenco completo dei valori configurabili, vedere. Riferimento alla configurazione del gateway Amazon EKS Hybrid Nodes

Verifica dell'installazione

Dopo aver installato il gateway, verifica che sia funzionante e integro.

Controlla lo stato del pod

Verifica che due gateway pod siano in funzione:

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

Dovresti vedere un risultato simile a:

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

Controlla l'elezione del leader

Verifica che un pod abbia acquisito il contratto di locazione elettorale per il leader:

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

L'output mostra il leader corrente nella HOLDER colonna:

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

Controlla l'endpoint di integrità

Verifica che l'endpoint di integrità risponda sul leader pod utilizzando il port forwarding:

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

Un gateway sano restituisce una risposta HTTP 200.

Verifica le voci della tabella di routing VPC

Nella console Amazon VPC o utilizzando l'interfaccia a riga di comando, verifica che le tabelle di routing VPC contengano voci per AWS i pod ibridi CIDR che puntano all'ENI dell'istanza gateway leader:

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

Ogni pod ibrido CIDR deve avere un percorso NetworkInterfaceId impostato verso l'ENI primario dell'istanza leader.

Disinstallazione

Per rimuovere il gateway Hybrid Nodes, esegui:

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

La disinstallazione del grafico Helm non rimuove automaticamente le voci della tabella di routing VPC create dal gateway. Dopo la disinstallazione, elimina manualmente le route per i tuoi pod ibridi CIDR dalle tabelle di routing VPC per evitare di indirizzare il traffico verso le istanze che non eseguono più il gateway. Puoi rimuovere i percorsi utilizzando la AWS CLI:

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

Fasi successive