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.
Cilium y Calico son compatibles como interfaces de red de contenedores (CNIs) 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 estas CNI con las herramientas que elija, como Helm. 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
.
Compatibilidad de versiones de CNI
La versión 3.29.x
de Calico es compatible y recomendada para los Nodos híbridos de EKS para todas las versiones de Kubernetes compatibles con Amazon EKS.
La versión 1.16.x
de Cilium es compatible y recomendada para los Nodos híbridos de EKS para todas las versiones de Kubernetes compatibles con Amazon EKS.
Capacidades compatibles
AWS admite las siguientes capacidades de Cilium y Calico para su uso con nodos híbridos. Si planea utilizar funcionalidades fuera del alcance del soporte de AWS, recomendamos obtener soporte comercial para el complemento o contar con expertos internos que puedan resolver problemas y contribuir con correcciones al proyecto del complemento CNI.
Característica | Cilium | Calico |
---|---|---|
Conformidad de la red Kubernetes |
Sí |
Sí |
Conectividad entre el plano de control y el nodo |
Sí |
Sí |
Conectividad entre el plano de control y el pod |
Sí |
Sí |
Administración del ciclo de vida |
Instalar, actualizar, eliminar |
Instalar, actualizar, eliminar |
Modos de redes |
VXLAN |
VXLAN |
Administración de direcciones IP (IPAM) |
Ámbito de clúster (IPAM de Cilium) |
IPAM de Calico |
Familia de IP |
IPv4 |
IPv4 |
BGP |
Sí (plano de control de Cilium) |
Sí |
Cómo instalar Cilium en nodos híbridos
-
Asegúrese de haber instalado la CLI de Helm en el entorno de línea de comandos. Consulte la documentación de Helm
para consultar las instrucciones de instalación. -
Instale el repositorio de Helm de Cilium.
helm repo add cilium https://helm.cilium.io/
-
Cree un archivo YAML denominado
cilium-values.yaml
. Si configuró al menos una red de pods remotos, configure los mismos CIDR de pod para laclusterPoolIPv4PodCIDRList
. No debe cambiar laclusterPoolIPv4PodCIDRList
después de implementar Cilium en el clúster. Puede configurarclusterPoolIPv4MaskSize
en función de los pods que necesite por nodo; consulte Cómo ampliar el grupo de clústeresen la documentación de Cilium. Para obtener una lista completa de los valores de Helm para Cilium, consulte la referencia de Helm en la documentación de Cilium. El siguiente ejemplo configura todos los componentes de Cilium para que se ejecuten únicamente en los nodos híbridos, ya que llevan la etiqueta eks.amazonaws.com/compute-type: hybrid
.De forma predeterminada, Cilium enmascara la dirección IP de origen de todo el tráfico de los pods que sale del clúster con la dirección IP del nodo. Esto permite que Cilium se ejecute con clústeres de Amazon EKS que tienen redes de pods remotos configuradas y con clústeres que no tienen redes de pods remotas configuradas. Si desactiva el enmascaramiento para la implementación de Cilium, deberá configurar el clúster de Amazon EKS con las redes de pods remotos y anunciar las direcciones de pods en la red en las instalaciones. Si ejecuta webhooks en los nodos híbridos, debe configurar el clúster con las redes de pods remotos y debe anunciar las direcciones de los pods en la red en las instalaciones.
Una forma habitual de anunciar las direcciones de los pods en la red en las instalaciones es mediante BGP. Para usar BGP con Cilium, debe configurar
bgpControlPlane.enabled: true
. Para obtener más información sobre la compatibilidad de BGP con Cilium, consulte el Plano de control de BGP de Ciliumen 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 operator: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid unmanagedPodWatcher: restart: false envoy: enabled: false
-
Instale Cilium en el clúster. Sustituya
CILIUM_VERSION
por la versión de Cilium que desee. Se recomienda ejecutar la versión más reciente de la revisión 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 establesde la documentación de Cilium. Si va a habilitar BGP para la implementación, agregue la marca --set bgpControlPlane.enabled=true
en el siguiente comando. Si va a utilizar un archivo kubeconfig específico, utilice la marca--kubeconfig
con el comando de instalación de Helm.helm install cilium cilium/cilium \ --version
CILIUM_VERSION
\ --namespace kube-system \ --values cilium-values.yaml -
Puede confirmar que la instalación de Cilium se haya realizado correctamente con los siguientes comandos. Debería ver la implementación del
cilium-operator
y elcilium-agent
en ejecución en cada uno de los nodos híbridos. Además, los nodos híbridos se deben encontrar en el estadoReady
. Para obtener información sobre cómo configurar BGP para Cilium, continúe con el siguiente paso.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
-
Para usar BGP con Cilium para anunciar las direcciones de los pods en la red en las instalaciones, debe haber instalado Cilium con
bgpControlPlane.enabled: true
. Para configurar BGP en Cilium, cree primero un archivo llamadocilium-bgp-cluster.yaml
con unaCiliumBGPClusterConfig
conpeerAddress
establecido en la IP del enrutador en las instalaciones con el que se establece el emparejamiento. Configure los valores delocalASN
ypeerASN
según la configuración del enrutador en las instalaciones.apiVersion: cilium.io/v2alpha1 kind: CiliumBGPClusterConfig metadata: name: cilium-bgp spec: nodeSelector: matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid bgpInstances: - name: "rack0" localASN: ONPREM_ROUTER_ASN peers: - name: "onprem-router" peerASN: PEER_ASN peerAddress: ONPREM_ROUTER_IP peerConfigRef: name: "cilium-peer"
-
Aplique la configuración de clúster de BGP de Cilium al clúster.
kubectl apply -f cilium-bgp-cluster.yaml
-
El recurso
CiliumBGPPeerConfig
define una configuración de emparejamiento de BGP. Varios pares pueden compartir la misma configuración y proporcionar una referencia al recursoCiliumBGPPeerConfig
común. Cree un archivo llamadocilium-bgp-peer.yaml
para establecer la configuración de emparejamiento de la red en las instalaciones. Consulte la Configuración de emparejamiento de BGPen la documentación de Cilium para obtener una lista completa de las opciones de configuración. apiVersion: cilium.io/v2alpha1 kind: CiliumBGPPeerConfig metadata: name: cilium-peer spec: timers: holdTimeSeconds: 30 keepAliveTimeSeconds: 10 gracefulRestart: enabled: true restartTimeSeconds: 120 families: - afi: ipv4 safi: unicast advertisements: matchLabels: advertise: "bgp"
-
Aplique la configuración de emparejamiento de BGP de Cilium al clúster.
kubectl apply -f cilium-bgp-peer.yaml
-
El recurso de
CiliumBGPAdvertisement
se utiliza para definir varios tipos de anuncios y los atributos asociados a estos. Cree un archivo llamadocilium-bgp-advertisement.yaml
y configure el recurso deCiliumBGPAdvertisement
con los ajustes que desee.apiVersion: cilium.io/v2alpha1 kind: CiliumBGPAdvertisement metadata: name: bgp-advertisements labels: advertise: bgp spec: advertisements: - advertisementType: "PodCIDR" - advertisementType: "Service" service: addresses: - ClusterIP - ExternalIP - LoadBalancerIP
-
Aplique la configuración de anuncio de BGP de Cilium al clúster.
kubectl apply -f cilium-bgp-advertisement.yaml
Puede confirmar que el emparejamiento de BGP funcionó con la CLI de Cilium
mediante el comando cilium bgp peers
. Debería ver los valores correctos en la salida del entorno y el estado de la sesión comoestablished
. Consulte la Guía de solución de problemas y operacionesen la documentación de Cilium para obtener más información sobre la solución de problemas.
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
-
Asegúrese de haber instalado
helm
CLI en el entorno de línea de comandos. Consulte la documentación de Helmpara consultar las instrucciones de instalación. -
Instale el repositorio de Helm de Cilium.
helm repo add cilium https://helm.cilium.io/
-
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 establesde la documentación de Cilium. helm install cilium-preflight cilium/cilium --version CILIUM_VERSION \ --namespace=kube-system \ --set preflight.enabled=true \ --set agent=false \ --set operator.enabled=false
-
Después de aplicar
cilium-preflight.yaml
, asegúrese de que la cantidad de podsREADY
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
-
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
-
Elimine la verificación previa
helm uninstall cilium-preflight --namespace kube-system
-
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.Antes de ejecutar el comando de actualización de Helm, conserve los valores de la implementación en un
cilium-values.yaml
o utilice las opciones de línea de comandos de--set
para la configuració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. Si utiliza BGP, se recomienda utilizar la opción de línea de comandos de--set bgpControlPlane=true
en lugar de proporcionar esta información en el archivo de valores.helm upgrade cilium cilium/cilium --version CILIUM_VERSION \ --namespace kube-system \ --set upgradeCompatibility=1.X \ -f cilium-values.yaml
-
(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
-
Ejecute el siguiente comando para desinstalar todos los componentes de Cilium del clúster. Tenga en cuenta que la desinstalación de la CNI puede afectar al estado de los nodos y los pods, por lo que no se debe realizar 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. -
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. -
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
Cómo instalar Calico en nodos híbridos
-
Asegúrese de haber instalado la CLI de Helm en el entorno de línea de comandos. Consulte la documentación de Helm
para consultar las instrucciones de instalación. -
Instale el repositorio de Helm de Cilium.
helm repo add projectcalico https://docs.tigera.io/calico/charts
-
Cree un archivo YAML llamado
calico-values.yaml
que configure Calico con afinidad para que se ejecute en nodos híbridos. Para obtener más información sobre los diferentes modos de red de Calico, consulte Cómo determinar la mejor opción de reden la documentación de Calico. -
Sustituya
POD_CIDR
por los rangos CIDR de los pods. Si configuró el clúster de Amazon EKS con redes de pods remotos, elPOD_CIDR
que especifique para Calico debe ser el mismo que el de las redes de pods remotos. Por ejemplo,10.100.0.0/24
. -
Sustituya
CIDR_SIZE
por el tamaño del segmento de CIDR que quiera asignar a cada nodo. Por ejemplo,25
para un tamaño de segmento de /25. Para obtener más información sobre elblockSize
de CIDR y cómo cambiar elblockSize
, consulte Cómo cambiar el tamaño del bloque de grupos de direcciones IPen la documentación de Calico. -
En el siguiente ejemplo,
natOutgoing
está habilitado ybgp
desactivado. En esta configuración, Calico se puede ejecutar en clústeres de Amazon EKS que tienen configurada una red de pods remotos y en clústeres que no la tienen configurada. Si tienenatOutgoing
configurado como desactivado, debe configurar el clúster con las redes de pods remotos, y la red en las instalaciones debe ser capaz de dirigir correctamente el tráfico destinado a los CIDR de los pods. Una forma habitual de anunciar las direcciones de los pods en la red en las instalaciones es mediante BGP. Para utilizar BGP con Calico, debe habilitarbgp
. En el siguiente ejemplo se configuran todos los componentes de Calico para que se ejecuten únicamente en los nodos híbridos, ya que llevan la marcaeks.amazonaws.com/compute-type: hybrid
. Si ejecuta webhooks en los nodos híbridos, debe configurar el clúster con las redes de pods remotos y debe anunciar las direcciones de los pods en la red en las instalaciones. En el siguiente ejemplo se configuracontrolPlaneReplicas: 1
. Aumente el valor si tiene varios nodos híbridos y desea ejecutar los componentes del plano de control de Calico con alta disponibilidad.installation: enabled: true cni: type: Calico ipam: type: Calico calicoNetwork: bgp: Disabled ipPools: - cidr: POD_CIDR blockSize: CIDR_SIZE encapsulation: VXLAN natOutgoing: Enabled nodeSelector: eks.amazonaws.com/compute-type == "hybrid" controlPlaneReplicas: 1 controlPlaneNodeSelector: eks.amazonaws.com/compute-type: hybrid calicoNodeDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid csiNodeDriverDaemonSet: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid calicoKubeControllersDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid typhaDeployment: spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: hybrid
-
-
Instale Calico en el clúster. Sustituya
CALICO_VERSION
por la versión de Calico que desee (por ejemplo, la 3.29.0) y consulte las versiones de Calicopara encontrar la revisión más reciente para la versión secundaria de Calico. Se recomienda ejecutar la versión más reciente de la revisión para la versión secundaria de Calico. Si utiliza un archivo kubeconfig
específico, utilice la marca--kubeconfig
.helm install calico projectcalico/tigera-operator \ --version
CALICO_VERSION
\ --namespace kube-system \ -f calico-values.yaml -
Puede confirmar que la instalación de Calico se haya realizado correctamente con los siguientes comandos. Debería ver la implementación de
tigera-operator
y el agente decalico-node
en ejecución en cada uno de los nodos híbridos,calico-apiserver
,csi-node-driver
ycalico-kube-controllers
implementados. Además, los nodos híbridos se deben encontrar en el estadoReady
. Si utilizanatOutgoing: Disabled
, entonces ninguno de los componentes de Calico se podrá iniciar correctamente hasta que anuncie las direcciones de los pods en la red en las instalaciones. Para obtener información sobre cómo configurar BGP para Calico, continúe con el siguiente paso.kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-6c77bb6d46-2n8mq 1/1 Running 0 69s calico-system calico-kube-controllers-7c5f8556b5-7h267 1/1 Running 0 68s calico-system calico-node-s5nnk 1/1 Running 0 68s calico-system calico-typha-6487cc9d8c-wc5jm 1/1 Running 0 69s calico-system csi-node-driver-cv42d 2/2 Running 0 68s kube-system coredns-7bb495d866-2lc9v 1/1 Running 0 6m27s kube-system coredns-7bb495d866-2t8ln 1/1 Running 0 157m kube-system kube-proxy-lxzxh 1/1 Running 0 18m kube-system tigera-operator-f8bc97d4c-28b4d 1/1 Running 0 90s
kubectl get nodes
NAME STATUS ROLES AGE VERSION mi-0c6ec2f6f79176565 Ready <none> 5h13m v1.31.0-eks-a737599
-
Si ha instalado Calico sin BGP, omita este paso. Para configurar BGP, cree un archivo llamado
calico-bgp.yaml
con una configuraciónBGPPeer
y unaBGPConfiguration
. Es importante distinguir entreBGPPeer
yBGPConfiguration
.BGPPeer
es el enrutador o recurso remoto habilitado para BGP con el que se emparejarán los nodos de un clúster de Calico. El valorasNumber
de la configuración deBGPPeer
es similar al ajustepeerASN
de Cilium. El valorBGPConfiguration
se aplica a cada nodo de Calico y el valorasNumber
para laBGPConfiguration
es equivalente al ajustelocalASN
de Cilium. Sustituya los valoresONPREM_ROUTER_IP
,ONPREM_ROUTER_ASN
yLOCAL_ASN
que aparecen en el ejemplo siguiente, por los valores correspondientes al entorno en las instalaciones. La configuración dekeepOriginalNextHop: true
se utiliza para garantizar que cada nodo anuncie únicamente el CIDR de la red de pods que le pertenece.apiVersion: projectcalico.org/v3 kind: BGPPeer metadata: name: calico-hybrid-nodes spec: peerIP:
ONPREM_ROUTER_IP
asNumber:ONPREM_ROUTER_ASN
keepOriginalNextHop: true --- apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: nodeToNodeMeshEnabled: false asNumber:LOCAL_ASN
-
Aplique el archivo al clúster.
kubectl apply -f calico-bgp.yaml
-
Confirme que los pods de Calico se ejecutan con el siguiente comando.
kubectl get pods -n calico-system -w
NAMESPACE NAME READY STATUS RESTARTS AGE calico-apiserver calico-apiserver-598bf99b6c-2vltk 1/1 Running 0 3h24m calico-system calico-kube-controllers-75f84bbfd6-zwmnx 1/1 Running 31 (59m ago) 3h20m calico-system calico-node-9b2pg 1/1 Running 0 5h17m calico-system calico-typha-7d55c76584-kxtnq 1/1 Running 0 5h18m calico-system csi-node-driver-dmnmm 2/2 Running 0 5h18m kube-system coredns-7bb495d866-dtn4z 1/1 Running 0 6h23m kube-system coredns-7bb495d866-mk7j4 1/1 Running 0 6h19m kube-system kube-proxy-vms28 1/1 Running 0 6h12m kube-system tigera-operator-55f9d9d565-jj9bg 1/1 Running 0 73m
Si se presentaron problemas durante estos pasos, consulte la orientación para la solución de problemas
Cómo actualizar Calico en nodos híbridos
Antes de actualizar la implementación de Calico, revise detenidamente la documentación de actualización de Calico
-
Descargue el manifiesto de operador de la versión de Calico a la que va a actualizar. Sustituya
CALICO_VERSION
por la versión a la que va a actualizar; por ejemplo,v3.29.0
. Asegúrate de anteponerv
a la major.minor.patch.kubectl apply --server-side --force-conflicts \ -f https://raw.githubusercontent.com/projectcalico/calico/
CALICO_VERSION
/manifests/operator-crds.yaml -
Ejecute
helm upgrade
para actualizar la implementación de Calico. Sustituya CALICO_VERSION por la versión a la que va a actualizar; por ejemplo,v3.29.0
. Cree el archivocalico-values.yaml
a partir de los valores de configuración que utilizó para instalar Calico.helm upgrade calico projectcalico/tigera-operator \ --version
CALICO_VERSION
\ --namespace kube-system \ -f calico-values.yaml
Cómo eliminar Calico de los nodos híbridos
-
Ejecute el siguiente comando para desinstalar los componentes de Calico del clúster. Tenga en cuenta que la desinstalación de la CNI puede afectar al estado de los nodos y los pods, por lo que no se debe efectuar en clústeres de producción. Si instaló Calico en un espacio de nombres que no sea
kube-system
, cambie el espacio de nombres en el siguiente comando.helm uninstall calico --namespace kube-system
Tenga en cuenta que las interfaces y rutas configuradas por Calico no se eliminan de forma predeterminada cuando elimina la CNI del clúster.
-
Para limpiar los archivos de configuración y recursos en disco, elimine los archivos de Calico de los directorios
/opt/cni
y/etc/cni
. -
Para eliminar las CRD de Calico del clúster, ejecute los siguientes comandos.
kubectl get crds -oname | grep "calico" | xargs kubectl delete
kubectl get crds -oname | grep "tigera" | xargs kubectl delete