

 **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
<a name="hybrid-nodes-cni"></a>

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](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium), [Tipo de serviço LoadBalancer](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer), e [Configurar políticas de rede do Kubernetes para nós híbridos](hybrid-nodes-network-policies.md) 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](https://github.com/aws-samples/eks-hybrid-examples).

## Compatibilidade da versão
<a name="hybrid-nodes-cilium-version-compatibility"></a>

As versões `v1.17.x` e `v1.18.x` do Cilium são compatíveis com o EKS Hybrid Nodes para todas as versões do Kubernetes com suporte por parte do Amazon EKS.

**nota**  
 **Requisito de kernel do Cilium v1.18.3**: devido ao requisito de kernel (kernel do Linux igual ou superior à versão 5.10), o Cilium v1.18.3 não é compatível com:
+ Ubuntu 20.04
+ Red Hat Enterprise Linux (RHEL) 8

Para obter os requisitos do sistema, consulte [Requisitos do sistema Cilium](https://docs.cilium.io/en/stable/operations/system_requirements/).

Consulte o [suporte a versões do Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) 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 name="hybrid-nodes-cilium-support"></a>

 A AWS mantém compilações do Cilium para o EKS Hybrid Nodes baseadas no [projeto Cilium](https://github.com/cilium/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
<a name="hybrid-nodes-cilium-considerations"></a>
+  **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](https://gallery.ecr.aws/eks/cilium/cilium). As versões disponíveis são:
  + Cilium v1.17.9: `oci://public.ecr.aws/eks/cilium/cilium:1.17.9-0` 
  + Cilium v1.18.3: `oci://public.ecr.aws/eks/cilium/cilium:1.18.3-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](https://docs.cilium.io/en/stable/network/concepts/routing/#encapsulation). Esse modo tem o menor número de requisitos para a rede física subjacente.
+ Por padrão, o Cilium [mascara](https://docs.cilium.io/en/stable/network/concepts/masquerading/) 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](hybrid-nodes-webhooks.md) e [Preparar a rede para nós híbridos](hybrid-nodes-networking.md) 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](hybrid-nodes-cilium-bgp.md).
+ O Gerenciamento de endereços IP (IPAM) padrão no Cilium é chamado de [Escopo do cluster](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/), 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
<a name="hybrid-nodes-cilium-install"></a>

### Procedimento
<a name="_procedure"></a>

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](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/#expanding-the-cluster-pool) 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](hybrid-nodes-network-policies.md) e [Visão geral do Ingress do Cilium e do Gateway do Cilium](hybrid-nodes-ingress.md#hybrid-nodes-ingress-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](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-service-traffic-distribution).
   + Para obter uma lista completa dos valores do Helm para o Cilium, consulte a [referência do Helm](https://docs.cilium.io/en/stable/helm-reference/) 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"
     ```

1. Instale o Cilium no cluster.
   + Substitua `CILIUM_VERSION` por uma versão do Cilium (por exemplo, `1.17.9-0` ou `1.18.3-0`). É recomendável usar a versão de patch mais recente para a versão secundária do Cilium.
   + Certifique-se de que seus nós atendam aos requisitos de kernel da versão escolhida. O Cilium v1.18.3 necessita do kernel do Linux igual ou superior à versão 5.10.
   + 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
     ```

1. 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](hybrid-nodes-cilium-bgp.md).

   ```
   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
<a name="hybrid-nodes-cilium-upgrade"></a>

Antes de atualizar a implantação do Cilium, analise cuidadosamente a [documentação de atualização do Cilium](https://docs.cilium.io/en/v1.17/operations/upgrade/) 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](https://helm.sh/docs/intro/quickstart/) para obter instruções da instalação.

1. 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](https://github.com/cilium/cilium#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
   ```

1. 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
   ```

1. 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](https://docs.cilium.io/en/v1.17/operations/upgrade/#cnp-validation) 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
   ```

1. Excluir o pré-lançamento

   ```
   helm uninstall cilium-preflight --namespace kube-system
   ```

1. 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
   ```

1. 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
   ```

1. (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
<a name="hybrid-nodes-cilium-delete"></a>

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](https://github.com/cilium/cilium/issues/34289) para obter mais informações.

1. 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`](https://github.com/cilium/cilium/blob/main/plugins/cilium-cni/cni-uninstall.sh) no repositório do Cilium no GitHub.

1. 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
   ```