Configurar a CNI para nós híbridos - 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.

Configurar a CNI para nós híbridos

O Cilium é interface de rede de contêineres (CNI) compatível com a AWS para o Amazon EKS Hybrid Nodes. Você deve instalar uma CNI para que os nós híbridos fiquem prontos para atender às workloads. Os nós híbridos aparecem com o status Not Ready até que uma CNI esteja em execução. Você pode gerenciar essa CNI com ferramentas de sua escolha, como o Helm. As instruções nesta página abrangem o gerenciamento do ciclo de vida do Cilium (instalação, atualização, exclusão). Consulte Visão geral do Ingress do Cilium e do Gateway do Cilium, Tipo de serviço LoadBalancer, e Configurar políticas de rede do Kubernetes para nós híbridos para saber como configurar o Cilium para Ingress, balanceamento de carga e políticas de rede.

O Cilium não é compatível com a AWS quando executados em nós na Nuvem AWS. A CNI da Amazon VPC não é compatível com nós híbridos e está configurada com antiafinidade para o rótulo eks.amazonaws.com/compute-type: hybrid.

A documentação anterior do Calico nesta página foi movida para o Repositório de exemplos híbridos do EKS.

Compatibilidade da versão

A versão v1.17.x do Cilium é compatível com o EKS Hybrid Nodes para cada versão do Kubernetes compatível com o Amazon EKS.

Consulte o suporte a versões do Kubernetes para obter uma lista das versões do Kubernetes compatíveis com o Amazon EKS. O EKS Hybrid Nodes tem o mesmo suporte a versão do Kubernetes que os clusters do Amazon EKS com nós na nuvem.

Recursos com suporte

A AWS mantém compilações do Cilium para o EKS Hybrid Nodes baseadas no projeto Cilium de código aberto. Para receber suporte da AWS para o Cilium, você deve usar as compilações do Cilium fornecidas pela AWS e as versões compatíveis com o Cilium.

A AWS oferece suporte técnico para a configuração padrão dos recursos do Cilium para uso com o EKS Hybrid Nodes. Se você planeja usar o recurso fora do escopo do suporte da AWS, recomendamos que obtenha suporte comercial para o Cilium ou tenha a experiência interna para solucionar problemas e contribuir com correções para o projeto do Cilium.

Atributo do Cilium Com suporte da AWS

Conformidade da rede do Kubernetes

Sim

Conectividade do cluster principal

Sim

Família IP

IPv4

Gerenciamento de ciclo de vida

Helm

Modo de rede

Encapsulamento VXLAN

Gerenciamento de endereços IP (IPAM)

Escopo do cluster de IPAM do Cilium

Política de rede

Política de rede do Kubernetes

Protocolo de Gateway da Borda (BGP)

Ambiente de gerenciamento BGP do Cilium

Ingress do Kubernetes

Ingress do Cilium, Gateway do Cilium

Alocação de IP do Service LoadBalancer

Balanceador de Carga de IPAM do Cilium

Anúncio de Endereço IP do Service LoadBalancer

Ambiente de gerenciamento BGP do Cilium

substituição do kube-proxy

Sim

Considerações sobre o Cilium

  • Repositório Helm: a AWS hospeda o chart do Helm do Cilium no Amazon Elastic Container Registry Public (Amazon ECR Public) no Amazon EKS Cilium/Cilium. Você pode usar o seguinte URI em seus comandos helm para usar este repositório: oci://public.ecr.aws/eks/cilium/cilium:1.17.6-0. Os comandos neste tópico usam esse repositório. Observe que certos comandos helm repo não são válidos para repositórios do Helm no Amazon ECR Public, então você não pode se referir a esse repositório a partir de um nome de repositório local do Helm. Em vez disso, use o URI completo na maioria dos comandos.

  • Por padrão, o Cilium é configurado para ser executado no modo sobreposto e túnel com VXLAN como método de encapsulamento. Esse modo tem o menor número de requisitos para a rede física subjacente.

  • Por padrão, o Cilium mascara o endereço IP de origem de todo o tráfego de pods que sai do cluster para o endereço IP do nó. Se você desabilitar o mascaramento, os CIDRs do pod devem ser roteáveis na sua rede on-premises.

  • Se você estiver executando webhooks em nós híbridos, os CIDRs do pod deverão ser roteáveis em sua rede on-premises. Se os CIDRs de pod não forem roteáveis na rede on-premises, é recomendável executar webhooks em nós de nuvem no mesmo cluster. Consulte Configurar webhooks para nós híbridos e Preparar a rede para nós híbridos para obter mais informações.

  • A AWS recomenda o uso da funcionalidade BGP integrada do Cilium para tornar os CIDRs do pod roteáveis na sua rede on-premises. Para obter mais informações sobre como configurar o BGP do Cilium com nós híbridos, consulte Configurar o BGP do Cilium para nós híbridos.

  • O Gerenciamento de endereços IP (IPAM) padrão no Cilium é chamado de Escopo do cluster, em que o operador do Cilium aloca endereços IP para cada nó com base nos CIDRs de pod configurados pelo usuário.

Instalar o Cilium em nós híbridos

Procedimento

  1. Crie um novo arquivo YAML denominado cilium-values.yaml. O exemplo a seguir configura o Cilium para ser executado somente em nós híbridos, definindo a afinidade para o rótulo eks.amazonaws.com/compute-type: hybrid para o atendente e operador do Cilium.

    • Configure clusterPoolIpv4PodCIDRList com os mesmos CIDRs de pods que configurou as redes remotas de pods do seu cluster do EKS. Por exemplo, .10.100.0.0/24 O operador do Cilium aloca fatias de endereço IP por meio do espaço de IP configurado clusterPoolIpv4PodCIDRList. O CIDR do seu pod não deve se sobrepor ao CIDR do nó on-premises, ao CIDR da VPC ou ao CIDR do serviço do Kubernetes.

    • Configure clusterPoolIpv4MaskSize com base nos pods necessários por nó. Por exemplo, 25 para um tamanho de segmento /25 de 128 pods por nó.

    • Não altere clusterPoolIpv4PodCIDRList ou clusterPoolIpv4MaskSize depois de implantar o Cilium em seu cluster, consulte Expandir o pool de clusters para obter mais informações.

    • Se você estiver executando o Cilium no modo de substituição do kube-proxy, defina kubeProxyReplacement: "true" em seus valores de Helm e certifique-se de não ter uma implantação existente do kube-proxy em execução nos mesmos nós que o Cilium.

    • O exemplo abaixo desabilita o proxy Envoy Layer 7 (L7) que o Cilium usa para políticas de rede L7 e Ingress. Para obter mais informações, consulte Configurar políticas de rede do Kubernetes para nós híbridos e Visão geral do Ingress do Cilium e do Gateway do Cilium.

    • O exemplo abaixo configura loadBalancer.serviceTopology: true para que a Distribuição de tráfego de serviços funcione corretamente se você a configurar para seus serviços. Para obter mais informações, consulte Configurar a Distribuição de Tráfego de Serviços.

    • Para obter uma lista completa dos valores do Helm para o Cilium, consulte a referência do Helm na documentação do Cilium.

      affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid ipam: mode: cluster-pool operator: clusterPoolIPv4MaskSize: 25 clusterPoolIPv4PodCIDRList: - POD_CIDR loadBalancer: serviceTopology: true operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false loadBalancer: serviceTopology: true envoy: enabled: false kubeProxyReplacement: "false"
  2. Instale o Cilium no cluster.

    • Substitua CILIUM_VERSION por uma versão do Cilium (por exemplo, 1.17.5). É recomendável usar a versão de patch mais recente para a versão secundária do Cilium. Você pode encontrar a versão mais recente do patch disponível em seu repositório Helm local com o comando helm search repo cilium/cilium --versions.

    • Caso esteja usando um arquivo kubeconfig específico, use o sinalizador --kubeconfig com o comando de instalação do Helm.

      helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  3. Confirme que a instalação do Cilium teve êxito com os comandos a seguir. Você deve ver a implantação cilium-operator e o cilium-agent em execução em cada um dos seus nós híbridos. Além disso, os nós híbridos agora devem ter o status Ready. Para obter informações sobre como configurar o BGP do Cilium para anunciar seus CIDRs de pod em sua rede on-premises, acesse Configurar o BGP do Cilium para nós híbridos.

    kubectl get pods -n kube-system
    NAME READY STATUS RESTARTS AGE cilium-jjjn8 1/1 Running 0 11m cilium-operator-d4f4d7fcb-sc5xn 1/1 Running 0 11m
    kubectl get nodes
    NAME STATUS ROLES AGE VERSION mi-04a2cf999b7112233 Ready <none> 19m v1.31.0-eks-a737599

Atualizar o Cilium em nós híbridos

Antes de atualizar a implantação do Cilium, analise cuidadosamente a documentação de atualização do Cilium e as notas de atualização para entender as mudanças na versão de destino do Cilium.

  1. Certifique-se de ter instalado a CLI do helm no ambiente de linha de comandos. Consulte a documentação do Helm para obter instruções da instalação.

  2. Execute a verificação de pré-lançamento da atualização do Cilium. Substitua CILIUM_VERSION pela sua versão de destino do Cilium. Recomendamos executar a versão de patch mais recente para a versão secundária do Cilium. Você pode encontrar a versão de patch mais recente para uma determinada versão secundária do Cilium na seção Stable Releases da documentação do Cilium.

    helm install cilium-preflight oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
  3. Depois de aplicar o cilium-preflight.yaml, certifique-se de que o número de pods READY seja o mesmo número de pods do Cilium em execução.

    kubectl get ds -n kube-system | sed -n '1p;/cilium/p'
    NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE cilium 2 2 2 2 2 <none> 1h20m cilium-pre-flight-check 2 2 2 2 2 <none> 7m15s
  4. Quando o número de pods READY for igual, certifique-se de que a implantação de pré-lançamento do Cilium também esteja marcada como READY 1/1. Caso mostre READY 0/1, consulte a seção Validação de CNP e resolva problemas com a implantação antes de continuar com a atualização.

    kubectl get deployment -n kube-system cilium-pre-flight-check -w
    NAME READY UP-TO-DATE AVAILABLE AGE cilium-pre-flight-check 1/1 1 0 12s
  5. Excluir o pré-lançamento

    helm uninstall cilium-preflight --namespace kube-system
  6. Antes de executar o comando helm upgrade, preserve os valores da implantação em um existing-cilium-values.yaml ou use as opções da linha de comando --set para as configurações quando estiver executando o comando de upgrade. A operação de atualização substitui o ConfigMap do Cilium, portanto, é fundamental que os valores de configuração sejam passados durante a atualização.

    helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
  7. Durante as operações normais do cluster, todos os componentes do Cilium devem executar a mesma versão. As etapas a seguir descrevem como atualizar todos os componentes de uma versão estável para uma versão estável posterior. Ao atualizar de uma versão secundária para outra versão secundária, é recomendável atualizar primeiro para a versão de patch mais recente da versão secundária existente do Cilium. Para minimizar a interrupção, a opção upgradeCompatibility deve ser definida para a versão inicial do Cilium que foi instalada no cluster.

    helm upgrade cilium oci://public.ecr.aws/eks/cilium/cilium --version CILIUM_VERSION \ --namespace kube-system \ --set upgradeCompatibility=1.X \ -f existing-cilium-values.yaml
  8. (Opcional) Se você precisar reverter a atualização devido a problemas, execute os comandos a seguir.

    helm history cilium --namespace kube-system helm rollback cilium [REVISION] --namespace kube-system

Excluir o Cilium dos nós híbridos

  1. Execute o comando a seguir para desinstalar todos os componentes do Cilium do cluster. Observe que a desinstalação da CNI pode afetar a integridade dos nós e pods e não deve ser realizada em clusters de produção.

    helm uninstall cilium --namespace kube-system

    As interfaces e rotas configuradas pelo Cilium não são removidas por padrão quando a CNI é removida do cluster. Consulte o problema do GitHub para obter mais informações.

  2. Para limpar os arquivos e recursos de configuração em disco, caso esteja usando os diretórios de configuração padrão, você poderá remover os arquivos conforme mostrado pelo script cni-uninstall.sh no repositório do Cilium no GitHub.

  3. Para remover as definições de recursos personalizados (CRDs) do Cilium do cluster, você pode executar os comandos a seguir.

    kubectl get crds -oname | grep "cilium" | xargs kubectl delete