View a markdown version of this page

Comece a usar o gateway do EKS Hybrid Nodes - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Comece a usar o gateway do EKS Hybrid Nodes

Esta página orienta você pelos pré-requisitos, pela preparação do ambiente, pela instalação, pela verificação e pela remoção do gateway do Amazon EKS Hybrid Nodes. Para obter uma introdução ao gateway e à sua arquitetura, consulte Gateway do Amazon EKS Hybrid Nodes.

Pré-requisitos

Antes de realizar a instalação do gateway do Hybrid Nodes, verifique se o ambiente preenche os seguintes requisitos:

  • Cluster EKS compatível com a CNI e com o componente VTEP do Cilium: o cluster do EKS deve usar a versão do Cilium para EKS como a CNI nos nós híbridos, e o Cilium VTEP deve estar habilitado. Para obter mais informações, consulte Configuração da CNI para o gateway do Hybrid Nodes.

  • CNI da AWS VPC em nós na nuvem: os nós de gateway e outros nós na nuvem no cluster devem usar a CNI da AWS VPC. O gateway depende do roteamento nativo da VPC para encaminhar o tráfego entre a VPC e o túnel VXLAN.

  • Conectividade híbrida: é necessária uma conexão privada entre a VPC e o ambiente on-premises. Você pode usar o AWS Direct Connect, o AWS Site-to-Site VPN ou sua própria solução de VPN. Para obter mais informações, consulte Preparar a rede para nós híbridos.

  • Tráfego VXLAN permitido: os grupos de segurança associados às instâncias do EC2 do gateway devem permitir tráfego UDP de entrada e de saída na porta 8472. No lado do nó híbrido, as regras do firewall on-premises também devem permitir o tráfego UDP na porta 8472 de e para os endereços IP do nó de gateway.

  • Permissões do IAM para o gerenciamento da tabela de rotas: o gateway requer as seguintes ações do EC2 para gerenciar tabelas de rotas da VPC:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Você pode conceder essas permissões usando uma das seguintes abordagens:

      EKS Pod Identity (recommended)

      Use a Identidade de Pods do EKS para conceder permissões somente à conta de serviço do pod de gateway.

      1. Instale o complemento do Agente de Identidade de Pods do EKS no cluster, caso ainda não esteja instalado:

        aws eks create-addon \ --cluster-name CLUSTER_NAME \ --addon-name eks-pod-identity-agent
      2. Crie um perfil do IAM com as permissões do EC2 necessárias e uma política de confiança para a Identidade de Pods do EKS:

        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. Crie uma associação de identidade de pods vinculando o perfil do IAM à conta de serviço do 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

      Anexe uma política em linha ou gerenciada com as permissões necessárias ao perfil do IAM associado ao perfil de instância dos nós de 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": "*" }] }'

      Todos os pods presentes nos nós de gateway terão essas permissões.

  • Modo Automático do EKS (se estiver usando o Modo Automático para nós de gateway): se você planeja usar o Modo Automático do EKS para provisionar nós de gateway, o Modo Automático deve estar habilitado no cluster do EKS. Para obter mais informações, consulte Habilitar o Modo Automático do EKS.

Preparação dos nós de gateway

O gateway requer pelo menos dois nós do EC2 para o fornecimento de alta disponibilidade. Existem duas opções de configuração de nós compatíveis com o gateway:

  • Modo Automático do EKS (recomendado): os nós são provisionados automaticamente usando um NodePool e uma NodeClass. A verificação de origem e de destino, os rótulos e os taints são configurados declarativamente.

  • Grupos de nós gerenciados: você provisiona nós usando um grupo de nós gerenciado ou nós autogerenciados. Os rótulos podem ser configurados por meio da API do grupo de nós gerenciado e a verificação de origem e de destino pode ser desabilitada usando um modelo de inicialização personalizado com dados do usuário.

Modo Automático do EKS (recomendado)

Ao usar o Modo Automático do EKS, você deve criar um NodePool e uma NodeClass antes de instalar o chart do Helm. O NodePool provisiona instâncias do EC2 com rótulos adequados, taints e configuração de verificação destinada à origem e ao destino. Você não precisa provisionar ou configurar nós manualmente.

Aplique os seguintes recursos ao cluster, substituindo os valores com espaço reservado:

  • YOUR_NODE_ROLE: o nome do perfil do IAM do nó usado pelo Modo Automático do EKS para provisionar nós. Este é o perfil que você configurou, ou que o EKS criou, ao habilitar o Modo Automático no cluster. Para obter mais informações, consulte Criar um perfil do IAM de nó para o Modo Automático do EKS.

  • YOUR_CLUSTER_NAME: o nome do cluster do EKS.

  • SUBNET_ID_1 e SUBNET_ID_2: IDs de sub-rede em diferentes zonas de disponibilidade em que os nós de gateway serão provisionados.

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

Campos principais nesta configuração:

  • advancedNetworking.sourceDestCheck: DisabledPrimaryENI: desativa a verificação de origem e de destino do EC2 na ENI primária do nó, permitindo que o gateway encaminhe tráfego que não seja endereçado a si mesmo.

  • taints: o taint hybrid-gateway-node: NoSchedule garante que apenas pods de gateway com uma programação de tolerância correspondente sejam executados nesses nós.

  • labels: o rótulo hybrid-gateway-node: "true" é usado pelo seletor de nós do chart do Helm para direcionar pods de gateway para esses nós.

  • nodeClassRef: vincula o NodePool à NodeClass com a configuração de verificação de origem e de destino.

Grupos de nós gerenciados

Ao usar grupos de nós gerenciados, crie um grupo de nós dedicado ao gateway com os rótulos, taints e um modelo de inicialização personalizado necessários que desabilite a verificação de origem e de destino na inicialização.

Etapa 1: Criar um modelo de execução

Crie um modelo de inicialização com dados do usuário que desabilite a verificação de origem e de destino na ENI primária quando a instância for inicializada:

# 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

O perfil do IAM do nó deve ter a permissão ec2:ModifyNetworkInterfaceAttribute para que o script de dados do usuário seja executado com sucesso. O formato MIME multipart garante que os dados do usuário sejam executados em conjunto com o script de inicialização do EKS.

Etapa 2: criar o grupo de nós gerenciados

Crie um grupo de nós gerenciados dedicado com o rótulo do gateway, o taint e o modelo de inicialização da Etapa 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"

Isso cria um grupo de nós gerenciados de dois nós em que:

  • --labels define hybrid-gateway-node=true para que o seletor de nós do chart do Helm direcione esses nós.

  • --taints adiciona um taint NoSchedule para que apenas os pods de gateway com uma programação de tolerância correspondente sejam executados nesses nós.

  • --launch-template anexa o modelo de inicialização que desabilita a verificação de origem e de destino na inicialização.

Use sub-redes em diferentes zonas de disponibilidade para obter alta disponibilidade.

Instalação usando o Helm

Modo Automático do EKS

Execute o seguinte comando para instalar o gateway com o Modo Automático do 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

Grupos de nós gerenciados ou nós autogerenciados

Para grupos de nós gerenciados ou nós autogerenciados, defina 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

Valores obrigatórios para o Helm

Os seguintes valores são obrigatórios para todas as instalações:

Valor Descrição

vpcCIDR

O bloco CIDR da VPC do cluster do EKS (por exemplo, 10.0.0.0/16). Usado para a configuração do Cilium VTEP, para que os nós híbridos encaminhem o tráfego destinado à VPC por meio do gateway.

podCIDRs

Lista separada por vírgulas de CIDRs de pods usados ​​pelo Cilium nos nós híbridos (por exemplo, 10.100.0.0/16,10.101.0.0/16). O gateway cria entradas na tabela de rotas da VPC e rotas VXLAN para esses CIDRs.

routeTableIDs

Lista separada por vírgulas dos IDs da tabela de rotas da VPC a serem programados (por exemplo, rtb-0abc1234def567890,rtb-0fed9876cba543210). O gateway cria rotas nessas tabelas, direcionando os CIDRs dos pods híbridos para a instância de gateway ativa.

Para obter uma lista completa dos valores configuráveis, consulte Referência de configuração para o gateway do Amazon EKS Hybrid Nodes.

Verificar a instalação

Após instalar o gateway, verifique se ele está funcionando corretamente e sem problemas.

Verificação do status do pod

Confirme se dois pods de gateway estão em execução:

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

O resultado exibido deve ser semelhante 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

Verificação da eleição de líder

Confirme se um pod adquiriu o lease de eleição de líder:

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

O resultado mostra o líder atual na coluna HOLDER:

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

Verificação do endpoint de integridade

Verifique se o endpoint de integridade está respondendo no pod líder usando o encaminhamento de portas:

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

Se o gateway estiver íntegro, ele retornará uma resposta HTTP 200.

Verificação das entradas da tabela de rotas da VPC

No console da Amazon VPC ou usando a AWS CLI, confirme se as tabelas de rotas da VPC contêm entradas para os CIDRs dos pods híbridos com direcionamento para a ENI da instância do gateway líder:

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

Cada CIDR dos pods híbridos deve ter uma rota em que o campo NetworkInterfaceId esteja configurado para a ENI primária da instância líder.

Desinstalar

Para remover o gateway do Hybrid Nodes, execute:

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

A desinstalação do chart do Helm não remove automaticamente as entradas da tabela de rotas da VPC criadas pelo gateway. Após a desinstalação, exclua manualmente as rotas dos CIDRs dos pods híbridos nas tabelas de rotas da VPC para evitar o roteamento de tráfego para instâncias que não estão mais executando o gateway. É possível remover as rotas usando a AWS CLI:

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

Próximas etapas