

 **Ayude a mejorar esta página** 

Para contribuir a esta guía del usuario, elija el enlace **Edit this page on GitHub** que se encuentra en el panel derecho de cada página.

# Configuración de una CNI para nodos híbridos
<a name="hybrid-nodes-cni"></a>

Cilium es la interfaz de red de contenedores (CNI) compatible con AWS para los Nodos híbridos de Amazon EKS. Debe instalar una CNI para que los nodos híbridos estén listos para atender cargas de trabajo. Los nodos híbridos aparecen con el estado `Not Ready` hasta que una CNI está en ejecución. Puede administrar la CNI con las herramientas que elija, como Helm. Las instrucciones de esta página tratan la administración del ciclo de vida de Cilium (instalar, actualizar, eliminar). Consulte [Información general sobre Cilium Ingress y Cilium Gateway](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium), [LoadBalancer del tipo de servicio](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium-loadbalancer) y [Configuración de políticas de red de Kubernetes para nodos híbridos](hybrid-nodes-network-policies.md) para saber cómo configurar Cilium para las políticas de entrada, equilibrio de carga y red.

Cilium no es compatibles con AWS cuando se ejecuta en nodos en la nube de AWS. La CNI de Amazon VPC no es compatible con los nodos híbridos y está configurada con antiafinidad para la etiqueta `eks.amazonaws.com/compute-type: hybrid`.

La documentación de Calico que aparecía anteriormente en esta página se ha trasladado al [repositorio de ejemplos de Nodos híbridos de EKS](https://github.com/aws-samples/eks-hybrid-examples).

## Compatibilidad de versiones
<a name="hybrid-nodes-cilium-version-compatibility"></a>

Las versiones `v1.17.x` y `v1.18.x` de Cilium son compatibles con los Nodos híbridos de EKS para todas las versiones de Kubernetes compatibles con Amazon EKS.

**nota**  
 **Requisito del kernel de Cilium v1.18.3**: debido a los requisitos del kernel (kernel de Linux >= 5.10), Cilium v1.18.3 no es compatible con:
+ Ubuntu 20.04
+ Red Hat Enterprise Linux (RHEL) 8

Para conocer los requisitos del sistema, consulte los [requisitos del sistema de Cilium](https://docs.cilium.io/en/stable/operations/system_requirements/).

Consulte la [compatibilidad de versiones de Kubernetes](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html) para ver las versiones que admite Amazon EKS. Los Nodos híbridos de EKS tienen la misma compatibilidad de versiones de Kubernetes que los clústeres de Amazon EKS con nodos en la nube.

## Capacidades compatibles
<a name="hybrid-nodes-cilium-support"></a>

 AWS mantiene versiones de Cilium para los Nodos híbridos de EKS que se basan en el proyecto de código abierto [Cilium](https://github.com/cilium/cilium). Para recibir soporte de AWS para Cilium, debe utilizar las versiones de Cilium mantenidas por AWS y las versiones compatibles de Cilium.

 AWS ofrece soporte técnico para las configuraciones predeterminadas de las siguientes capacidades de Cilium para su uso con Nodos híbridos de EKS. Si planea utilizar la funcionalidad fuera del ámbito del soporte de AWS, es recomendable obtener soporte comercial alternativo para Cilium o contar con expertos internos que puedan resolver problemas y contribuir con correcciones al proyecto de Cilium.


| Característica Cilium | Compatible con AWS  | 
| --- | --- | 
|  Conformidad de la red Kubernetes  |  Sí  | 
|  Conectividad del clúster principal  |  Sí  | 
|  Familia de IP  |  IPv4  | 
|  Administración del ciclo de vida  |  Helm  | 
|  Modos de redes  |  Encapsulación mediante VXLAN  | 
|  Administración de direcciones IP (IPAM)  |  Ámbito del clúster de IPAM de Cilium  | 
|  Política de red  |  Política de red de Kubernetes  | 
|  Protocolo de puerta de enlace fronteriza (BGP)  |  Cilium BGP Control Plane  | 
|  Kubernetes Ingress  |  Cilium Ingress, Cilium Gateway  | 
|  Asignación de IP de LoadBalancer de servicio  |  Cilium Load Balancer IPAM  | 
|  Anuncio de dirección IP de LoadBalancer de servicio  |  Cilium BGP Control Plane  | 
|  Reemplazo de kube-proxy  |  Sí  | 

## Consideraciones sobre Cilium
<a name="hybrid-nodes-cilium-considerations"></a>
+  **Repositorio de Helm**: AWS aloja el gráfico de Helm de Cilium en Amazon Elastic Container Registry Público (Amazon ECR Público) en [Amazon EKS Cilium/Cilium](https://gallery.ecr.aws/eks/cilium/cilium). Las versiones disponibles incluyen lo siguiente:
  + 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` 

    Los comandos de este tema utilizan este repositorio. Tenga en cuenta que ciertos comandos `helm repo` no son válidos para los repositorios de Helm en Amazon ECR Público, por lo que no puede hacer referencia a este repositorio desde un nombre de repositorio de Helm local. En su lugar, use el URI completo en la mayoría de los comandos.
+ De forma predeterminada, Cilium está configurado para ejecutarse en modo de superposición/túnel con VXLAN como [método de encapsulación](https://docs.cilium.io/en/stable/network/concepts/routing/#encapsulation). Este modo es el que impone menos requisitos a la red física subyacente.
+ De forma predeterminada, Cilium [enmascara](https://docs.cilium.io/en/stable/network/concepts/masquerading/) la dirección IP de origen de todo el tráfico de pods que sale del clúster, asignándole la dirección IP del nodo. Si desactiva el enmascarado, los CIDR de los pods deben ser enrutables en la red en las instalaciones.
+ Si ejecuta webhooks en nodos híbridos, los CIDR de los pods deben ser enrutable en la red en las instalaciones. Si los CIDR de los pods no son enrutables en la red en las instalaciones, se recomienda ejecutar los webhooks en los nodos en la nube del mismo clúster. Para obtener más información, consulte [Configuración de webhooks para nodos híbridos](hybrid-nodes-webhooks.md) y [Cómo preparar las redes para los nodos híbridos](hybrid-nodes-networking.md).
+  AWS recomienda usar la funcionalidad del BGP integrada de Cilium para hacer que los CIDR de los pods sean enrutables en la red en las instalaciones. Para obtener más información sobre cómo configurar el BGP de Cilium con nodos híbridos, consulte [Configuración del BGP de Cilium para nodos híbridos](hybrid-nodes-cilium-bgp.md).
+ La administración de direcciones IP (IPAM) predeterminada en Cilium se llama [Ámbito del clúster](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/), donde el operador de Cilium asigna direcciones IP para cada nodo en función de los CIDR de pods configurados por el usuario.

## Cómo instalar Cilium en nodos híbridos
<a name="hybrid-nodes-cilium-install"></a>

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

1. Cree un archivo YAML denominado `cilium-values.yaml`. En el siguiente ejemplo se configura Cilium para que se ejecute únicamente en nodos híbridos. Para ello, establece afinidad para la etiqueta `eks.amazonaws.com/compute-type: hybrid` para el operador y el agente de Cilium.
   + Configure `clusterPoolIpv4PodCIDRList` con los mismos CIDR de los pods que configuró para las *redes de pods remotas* del clúster de EKS. Por ejemplo, `10.100.0.0/24`. El operador de Cilium asigna segmentos de direcciones IP desde el espacio de IP `clusterPoolIpv4PodCIDRList` configurado. El CIDR de los pods no debe superponerse con el CIDR de los nodos en las instalaciones, el CIDR de las VPC o el CIDR de los servicios de Kubernetes.
   + Configure `clusterPoolIpv4MaskSize` según los pods requeridos por nodo. Por ejemplo, `25` para un tamaño de segmento /25 de 128 pods por nodo.
   + No cambie `clusterPoolIpv4PodCIDRList` ni `clusterPoolIpv4MaskSize` después de implementar Cilium en su clúster. Consulte [Expanding the cluster pool](https://docs.cilium.io/en/stable/network/concepts/ipam/cluster-pool/#expanding-the-cluster-pool) para obtener más información.
   + Si está ejecutando Cilium en el modo de reemplazo de kube-proxy, configure `kubeProxyReplacement: "true"` en sus valores de Helm y asegúrese de que no tenga ninguna implementación de kube-proxy existente en ejecución en los mismos nodos que Cilium.
   + En el siguiente ejemplo se desactiva el proxy de capa 7 (L7) de Envoy que Cilium utiliza para las políticas de red y el ingreso de la capa 7. Para obtener más información, consulte [Configuración de políticas de red de Kubernetes para nodos híbridos](hybrid-nodes-network-policies.md) y [Información general sobre Cilium Ingress y Cilium Gateway](hybrid-nodes-ingress.md#hybrid-nodes-ingress-cilium).
   + En el siguiente ejemplo se configura `loadBalancer.serviceTopology`: `true` para que la distribución del tráfico del servicio funcione correctamente si la configura para sus servicios. Para obtener más información, consulte [Configurar la distribución de tráfico del servicio](hybrid-nodes-webhooks.md#hybrid-nodes-mixed-service-traffic-distribution).
   + Para obtener una lista completa de los valores de Helm para Cilium, consulte la [referencia de Helm](https://docs.cilium.io/en/stable/helm-reference/) en la documentación de 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 Cilium en el clúster.
   + Sustituya `CILIUM_VERSION` por una versión de Cilium (por ejemplo, `1.17.9-0` o `1.18.3-0`). Se recomienda utilizar la versión más reciente del parche para la versión secundaria de Cilium.
   + Asegúrese de que los nodos cumplan los requisitos del kernel para la versión que elija. Cilium v1.18.3 requiere un kernel de Linux >= 5.10.
   + Si va a utilizar un archivo kubeconfig específico, utilice la marca `--kubeconfig` con el comando de instalación de Helm.

     ```
     helm install cilium oci://public.ecr.aws/eks/cilium/cilium \
         --version CILIUM_VERSION \
         --namespace kube-system \
         --values cilium-values.yaml
     ```

1. Confirme que la instalación de Cilium se haya realizado correctamente con los siguientes comandos. Debería ver la implementación del `cilium-operator` y el `cilium-agent` en ejecución en cada uno de los nodos híbridos. Además, los nodos híbridos se deben encontrar en el estado `Ready`. Para obtener información sobre cómo configurar el BGP de Cilium para anunciar los CIDR de los pods en la red en las instalaciones, continúe con [Configuración del BGP de Cilium para nodos 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
   ```

## Cómo actualizar Cilium en nodos híbridos
<a name="hybrid-nodes-cilium-upgrade"></a>

Antes de actualizar la implementación de Cilium, revise detenidamente la [documentación de actualización de Cilium](https://docs.cilium.io/en/v1.17/operations/upgrade/) y las notas de actualización para comprender los cambios en la versión de destino de Cilium.

1. Asegúrese de haber instalado `helm` CLI en el entorno de línea de comandos. Consulte la [documentación de Helm](https://helm.sh/docs/intro/quickstart/) para consultar las instrucciones de instalación.

1. Ejecute la comprobación previa a la actualización de Cilium. Sustituya `CILIUM_VERSION` por la versión de destino de Cilium. Le recomendamos ejecutar la versión más reciente del parche para la versión secundaria de Cilium. Puede encontrar la versión más reciente de la revisión de una versión secundaria determinada de Cilium en la sección [Versiones estables](https://github.com/cilium/cilium#stable-releases) de la documentación de 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. Después de aplicar `cilium-preflight.yaml`, asegúrese de que la cantidad de pods `READY` sea la misma que la cantidad de pods de Cilium en ejecución.

   ```
   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. Una vez que la cantidad de pods en READY sea igual, asegúrese de que la implementación de verificación previa de Cilium también esté marcada como READY 1/1. Si aparece READY 0/1, consulte la sección [Validación del CNP](https://docs.cilium.io/en/v1.17/operations/upgrade/#cnp-validation) y resuelva los problemas relacionados con la implementación antes de continuar con la actualización.

   ```
   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. Elimine la verificación previa

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

1. Antes de ejecutar el comando `helm upgrade`, conserve los valores de la implementación en `existing-cilium-values.yaml` o utilice las opciones de línea de comandos de `--set` para la configuración al ejecutar el comando de actualización. La operación de actualización sobrescribe el ConfigMap de Cilium, por lo que es fundamental que se transmitan los valores de configuración al realizar la actualización.

   ```
   helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
   ```

1. Durante las operaciones normales del clúster, todos los componentes de Cilium deben ejecutar la misma versión. En los siguientes pasos se describe cómo actualizar todos los componentes de una versión estable a una versión estable posterior. Al actualizar de una versión secundaria a otra secundaria, se recomienda actualizar primero a la versión de revisión más reciente para la versión secundaria de Cilium existente. Para minimizar las interrupciones, la opción `upgradeCompatibility` se debe establecer en la versión inicial de Cilium que instaló en este clúster.

   ```
   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) Si necesita revertir la actualización debido a problemas, ejecute los siguientes comandos.

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

## Elimine Cilium de los nodos híbridos
<a name="hybrid-nodes-cilium-delete"></a>

1. Ejecute el siguiente comando para desinstalar todos los componentes de Cilium del clúster. Tenga en cuenta que desinstalar el CNI podría afectar el estado de los nodos y pods, y no debería realizarse en clústeres de producción.

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

   Las interfaces y rutas configuradas por Cilium no se eliminan de forma predeterminada cuando se elimina la CNI del clúster; consulte la [edición de GitHub](https://github.com/cilium/cilium/issues/34289) para obtener más información.

1. Para limpiar los archivos de configuración y recursos en disco, si utiliza los directorios de configuración estándar, puede eliminar los archivos como se indica el [script `cni-uninstall.sh`](https://github.com/cilium/cilium/blob/main/plugins/cilium-cni/cni-uninstall.sh) proporcionado en el repositorio de Cilium en GitHub.

1. Para eliminar las definiciones de recursos personalizadas (CRD) de Cilium del clúster, puede ejecutar los siguientes comandos.

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