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 su che si trova 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, verificate 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 nel cluster devono utilizzare il VPC CNI. AWS 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 una soluzione VPN personalizzata. 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 inoltre consentire 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 route VPC:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Puoi concedere queste autorizzazioni utilizzando uno dei seguenti approcci:

      EKS Pod Identity (recommended)

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

      1. Installa l'add-on 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 politica 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 del gateway avranno queste autorizzazioni.

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

Preparare i nodi del gateway

Il gateway richiede almeno due nodi EC2 per l'alta disponibilità. Sono supportate due opzioni di configurazione dei nodi per il gateway:

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

  • Gruppi di nodi gestiti— Il provisioning dei nodi viene effettuato utilizzando un gruppo di nodi gestiti 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à automatica EKS (consigliata)

Quando si utilizza la modalità EKS Auto, è necessario creare una NodePool e NodeClass prima di installare il diagramma Helm. Fornisce NodePool alle istanze EC2 le etichette, le macchie e la configurazione di controllo corrette. source/destination Non è necessario effettuare il provisioning o configurare manualmente i nodi.

Applica le seguenti risorse al tuo 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 Creazione di un ruolo IAM per 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 verrà effettuato il provisioning dei 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 in questa configurazione:

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

  • taints— La hybrid-gateway-node: NoSchedule contaminazione garantisce solo 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 Helm per indirizzare i gateway pod a questi nodi.

  • nodeClassRef— Collega il NodePool a NodeClass con la configurazione di controllo. source/destination

Gruppi di nodi gestiti

Quando si utilizzano gruppi di nodi gestiti, è necessario creare un gruppo di nodi dedicato per il gateway con le etichette e i caratteri 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 avvio con dati utente che disabiliti il source/destination controllo sull'ENI primario 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 di dati utente abbia esito positivo. Il formato multipart MIME garantisce che i dati utente vengano eseguiti insieme allo script bootstrap EKS.

Fase 2: Creare il gruppo di nodi gestiti

Crea un gruppo di nodi gestiti dedicato con l'etichetta del gateway, il 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 Helm abbia come target questi nodi.

  • --taintsaggiunge una NoSchedule macchia, quindi 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.

Usa le sottoreti in diverse zone di disponibilità per una disponibilità elevata.

Installa con Helm

Modalità automatica di EKS

Esegui il comando seguente 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 i gruppi di nodi gestiti o i 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 richiesti

I seguenti valori sono obbligatori per tutte le installazioni:

Valore Description

vpcCIDR

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

podCIDRs

Comma-separated elenco dei POD CIDR utilizzati da Cilium sui nodi ibridi (ad esempio,). 10.100.0.0/16,10.101.0.0/16 Il gateway crea voci nella 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 che indirizzano i CIDR dei pod ibridi all'istanza del gateway attiva.

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, verificate che sia funzionante e integro.

Controlla lo stato del pod

Verifica che due gateway pod siano in esecuzione:

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 gruppo abbia acquisito il contratto di locazione per l'elezione del leader:

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

L'output mostra il leader attuale 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à stia rispondendo sul pod leader 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 integro restituisce una risposta HTTP 200.

Verifica le voci della tabella di routing di VPC

Nella console Amazon VPC o utilizzando la AWS CLI, verifica che le tabelle di routing VPC contengano voci per i CIDR del pod ibrido che puntano all'ENI dell'istanza del gateway leader:

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

Ogni pod CIDR ibrido deve avere un percorso NetworkInterfaceId impostato sull'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 i percorsi per i CIDR del tuo pod ibrido dalle tabelle di routing del VPC per evitare di indirizzare il traffico verso le istanze che non eseguono più il gateway. Puoi rimuovere i percorsi utilizzando la CLI: AWS

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

Fasi successive