Configuración de una CNI para nodos híbridos - Amazon EKS

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

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, LoadBalancer del tipo de servicio y Configuración de políticas de red de Kubernetes para nodos híbridos 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.

Compatibilidad de versiones

La versión v1.17.x de Cilium es compatible con los Nodos híbridos de EKS para todas las versiones de Kubernetes compatibles con Amazon EKS.

Consulte la compatibilidad de versiones de Kubernetes 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

AWS mantiene versiones de Cilium para los Nodos híbridos de EKS que se basan en el proyecto de código abierto 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

Conectividad del clúster principal

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

Consideraciones sobre Cilium

  • 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. Puede usar el siguiente URI en sus comandos de helm para usar este repositorio: oci://public.ecr.aws/eks/cilium/cilium:1.17.6-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. Este modo es el que impone menos requisitos a la red física subyacente.

  • De forma predeterminada, Cilium enmascara 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 y Cómo preparar las redes para los nodos híbridos.

  • 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.

  • La administración de direcciones IP (IPAM) predeterminada en Cilium se llama Ámbito del clúster, 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

Procedimiento

  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 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 y Información general sobre Cilium Ingress y Cilium Gateway.

    • 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.

    • Para obtener una lista completa de los valores de Helm para Cilium, consulte la referencia de Helm 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"
  2. Instale Cilium en el clúster.

    • Sustituya CILIUM_VERSION por una versión de Cilium (por ejemplo, 1.17.5). Se recomienda utilizar la versión más reciente del parche para la versión secundaria de Cilium. Puede encontrar la versión más reciente del parche disponible en el repositorio local de Helm con el comando helm search repo cilium/cilium --versions.

    • 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
  3. 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.

    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

Antes de actualizar la implementación de Cilium, revise detenidamente la documentación de actualización de Cilium 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 para consultar las instrucciones de instalación.

  2. 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 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
  3. 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
  4. 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 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
  5. Elimine la verificación previa

    helm uninstall cilium-preflight --namespace kube-system
  6. 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
  7. 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
  8. (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

  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 para obtener más información.

  2. 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 proporcionado en el repositorio de Cilium en GitHub.

  3. 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