Configurer CNI pour les nœuds hybrides - Amazon EKS

Aidez à améliorer cette page

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Pour contribuer à ce guide de l'utilisateur, cliquez sur le GitHub lien Modifier cette page sur qui se trouve dans le volet droit de chaque page.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Configurer CNI pour les nœuds hybrides

Cilium est l'interface réseau de conteneurs (CNI) prise en AWS charge par les nœuds hybrides Amazon EKS. Vous devez installer un CNI pour que les nœuds hybrides soient prêts à prendre en charge les charges de travail. Les nœuds hybrides apparaissent avec le statut Not Ready jusqu’à ce qu’un CNI soit en cours d’exécution. Vous pouvez gérer le CNI à l’aide des outils de votre choix, tels que Helm. Les instructions fournies sur cette page concernent la gestion du cycle de vie de Cilium (installation, mise à niveau, suppression). Consultez Présentation de Cilium Ingress et Cilium Gateway, Type de service LoadBalancer, et Configurer les politiques réseau Kubernetes pour les nœuds hybrides pour savoir comment configurer Cilium pour l’ingress, l’équilibrage de charge et les politiques réseau.

Cilium n'est pas pris en charge AWS lorsqu'il est exécuté sur des nœuds dans AWS le cloud. Le CNI VPC Amazon n’est pas compatible avec les nœuds hybrides et le CNI VPC est configuré avec une anti-affinité pour l’étiquette eks.amazonaws.com/compute-type: hybrid.

La documentation Calico qui figurait auparavant sur cette page a été déplacée vers le référentiel d’exemples hybrides EKS.

Compatibilité des versions

Les versions Cilium v1.17.x et B v1.18.x sont prises en charge pour les nœuds hybrides EKS pour chaque version de Kubernetes prise en charge dans Amazon EKS.

Note

Configuration requise pour le noyau Cilium v1.18.3 : En raison de l'exigence du noyau (noyau Linux >= 5.10), Cilium v1.18.3 n'est pas pris en charge sur :

  • Ubuntu 20.04

  • Red Hat Enterprise Linux (RHEL) 8

Pour la configuration système requise, consultez la section Configuration requise pour Cilium.

Consultez la prise en charge des versions Kubernetes pour connaître les versions Kubernetes prises en charge par Amazon EKS. Les nœuds hybrides EKS prennent en charge la même version de Kubernetes que les clusters Amazon EKS avec nœuds cloud.

Fonctionnalités prises en charge

AWS gère des versions de Cilium pour les nœuds hybrides EKS basées sur le projet open source Cilium. Pour bénéficier de l'assistance de AWS Cilium, vous devez utiliser les versions de Cilium AWS maintenues et les versions de Cilium prises en charge.

AWS fournit un support technique pour les configurations par défaut des fonctionnalités suivantes de Cilium à utiliser avec les nœuds hybrides EKS. Si vous envisagez d'utiliser des fonctionnalités hors du champ d' AWS assistance, il est recommandé d'obtenir un support commercial alternatif pour Cilium ou de disposer de l'expertise interne nécessaire pour résoudre les problèmes et apporter des correctifs au projet Cilium.

Fonction Cilium Soutenu par AWS

Conformité au réseau Kubernetes

Oui

Connectivité au cluster principal

Oui

Famille d'IP

IPv4

La gestion du cycle de vie

Helm

Mode réseau

Encapsulation VXLAN

Gestion des adresses IP (IPAM)

Champ d’application du cluster Cilium IPAM

Stratégie de réseau

Stratégie réseau Kubernetes

Protocole de passerelle frontière (BGP)

Plan de contrôle Cilium BGP

Entrée Kubernetes

Cilium Ingress, Cilium Gateway

Allocation d' LoadBalancer adresses IP de service

Équilibreur de charge Cilium IPAM

Publicité d'adresse LoadBalancer IP du service

Plan de contrôle Cilium BGP

remplacement de kube-proxy

Oui

Considérations relatives à Cilium

  • Référentiel Helm : AWS héberge le graphique Cilium Helm dans le Amazon Elastic Container Registry Public (Amazon ECR Public) sur Amazon EKS Cilium/Cilium. Les versions disponibles incluent :

    • 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

      Les commandes de cette rubrique utilisent ce référentiel. Notez que certaines commandes helm repo ne sont pas valides pour les référentiels Helm dans Amazon ECR Public. Vous ne pouvez donc pas faire référence à ce référentiel à partir d’un nom de référentiel Helm local. Au lieu de cela, utilisez l’URI complet dans la plupart des commandes.

  • Par défaut, Cilium est configuré pour fonctionner en mode overlay/tunnel avec VXLAN comme méthode d’encapsulation. Ce mode présente le moins d’exigences sur le réseau physique sous-jacent.

  • Par défaut, Cilium masque l’adresse IP source de tout le trafic du pod quittant le cluster au profit de l’adresse IP du nœud. Si vous désactivez le masquage, votre pod CIDRs doit être routable sur votre réseau local.

  • Si vous exécutez des webhooks sur des nœuds hybrides, votre pod CIDRs doit être routable sur votre réseau local. Si votre pod CIDRs n'est pas routable sur votre réseau local, il est recommandé d'exécuter des webhooks sur les nœuds cloud du même cluster. Pour plus d’informations, consultez Configurer les webhooks pour les nœuds hybrides et Préparer la mise en réseau pour les nœuds hybrides.

  • AWS recommande d'utiliser la fonctionnalité BGP intégrée de Cilium pour rendre votre pod CIDRs routable sur votre réseau local. Pour plus d’informations sur la configuration de Cilium BGP avec des nœuds hybrides, consultez Configurer Cilium BGP pour les nœuds hybrides.

  • La gestion des adresses IP (IPAM) par défaut dans Cilium s'appelle Cluster Scope, où l'opérateur Cilium alloue des adresses IP à chaque nœud en fonction du pod configuré par l'utilisateur. CIDRs

Installer Cilium sur les nœuds hybrides

Procédure

  1. Créez un fichier YAML nommé cilium-values.yaml. L’exemple suivant configure Cilium pour qu’il s’exécute uniquement sur des nœuds hybrides en définissant l’affinité pour l’étiquette eks.amazonaws.com/compute-type: hybrid de l’agent et de l’opérateur Cilium.

    • Configurez clusterPoolIpv4PodCIDRList avec le même pod CIDRs que celui que vous avez configuré pour les réseaux de pods distants de votre cluster EKS. Par exemple, 10.100.0.0/24. L’opérateur Cilium attribue des tranches d’adresses IP à partir de l’espace IP clusterPoolIpv4PodCIDRList configuré. Votre CIDR de pod ne doit pas chevaucher votre CIDR de nœud sur site, votre CIDR VPC ou votre CIDR de service Kubernetes.

    • Configurez clusterPoolIpv4MaskSize en fonction du nombre de pods requis par nœud. Par exemple, 25 pour une taille de segment /25 de 128 pods par nœud.

    • Ne modifiez pas clusterPoolIpv4PodCIDRList ou clusterPoolIpv4MaskSize après avoir déployé Cilium sur votre cluster, consultez la section Extension du pool de clusters pour plus d’informations.

    • Si vous exécutez Cilium en mode de remplacement de kube-proxy, définissez kubeProxyReplacement: "true" dans vos valeurs Helm et assurez-vous qu’aucun déploiement kube-proxy n’est en cours d’exécution sur les mêmes nœuds que Cilium.

    • L’exemple ci-dessous désactive le proxy Envoy Layer 7 (L7) utilisé par Cilium pour les politiques réseau L7 et l’entrée. Pour plus d’informations, consultez Configurer les politiques réseau Kubernetes pour les nœuds hybrides et Présentation de Cilium Ingress et Cilium Gateway.

    • L’exemple ci-dessous configure loadBalancer.serviceTopology : true pour que la distribution du trafic de service fonctionne correctement si vous la configurez pour vos services. Pour de plus amples informations, veuillez consulter Configuration de la distribution du trafic de service.

    • Pour obtenir la liste complète des valeurs Helm pour Cilium, consultez la référence Helm dans la documentation 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. Installez Cilium sur votre cluster.

    • CILIUM_VERSIONRemplacez-le par une version Cilium (par exemple 1.17.9-0 ou1.18.3-0). Il est recommandé d’utiliser la dernière version du correctif pour la version mineure de Cilium.

    • Assurez-vous que vos nœuds répondent aux exigences du noyau pour la version que vous choisissez. Cilium v1.18.3 nécessite un noyau Linux >= 5.10.

    • Si vous utilisez un fichier kubeconfig spécifique, utilisez le drapeau --kubeconfig avec la commande d’installation Helm.

      helm install cilium oci://public.ecr.aws/eks/cilium/cilium \ --version CILIUM_VERSION \ --namespace kube-system \ --values cilium-values.yaml
  3. Vérifiez que l’installation de Cilium s’est bien déroulée à l’aide des commandes suivantes. Vous devriez voir le déploiement cilium-operator et l’exécution cilium-agent sur chacun de vos nœuds hybrides. De plus, vos nœuds hybrides devraient désormais avoir un statut Ready. Pour plus d'informations sur la façon de configurer Cilium BGP pour promouvoir votre pod sur votre réseau local, passez CIDRs à. Configurer Cilium BGP pour les nœuds hybrides

    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

Mettre à niveau Cilium sur les nœuds hybrides

Avant de mettre à niveau votre déploiement Cilium, consultez attentivement la documentation relative à la mise à niveau de Cilium et les notes de mise à niveau afin de comprendre les modifications apportées à la version Cilium cible.

  1. Assurez-vous d’avoir installé l’interface helm CLI dans votre environnement de ligne de commande. Consultez la documentation Helm pour obtenir les instructions d’installation.

  2. Exécutez le contrôle de mise à niveau de Cilium avant le vol. Remplacez CILIUM_VERSION par votre version cible de Cilium. Nous vous recommandons d’utiliser la dernière version du correctif pour votre version mineure de Cilium. Vous trouverez la dernière version du correctif pour une version mineure donnée de Cilium dans la section Versions stables de la documentation 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. Après avoir appliqué le cilium-preflight.yaml, assurez-vous que le nombre de pods READY correspond au nombre de pods Cilium en cours d’exécution.

    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. Une fois que le nombre de pods READY est égal, assurez-vous que le déploiement préalable de Cilium est également marqué comme READY 1/1. Si le message READY 0/1 s’affiche, consultez la section Validation CNP et résolvez les problèmes liés au déploiement avant de poursuivre la mise à niveau.

    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. Supprimer le pré-vol

    helm uninstall cilium-preflight --namespace kube-system
  6. Avant d’exécuter la commande helm upgrade, conservez les valeurs de votre déploiement dans un existing-cilium-values.yaml ou utilisez les options de ligne de commande --set pour vos paramètres lorsque vous exécutez la commande de mise à niveau. L'opération de mise à niveau remplace le Cilium ConfigMap. Il est donc essentiel que vos valeurs de configuration soient transmises lors de la mise à niveau.

    helm get values cilium --namespace kube-system -o yaml > existing-cilium-values.yaml
  7. Pendant le fonctionnement normal du cluster, tous les composants Cilium doivent exécuter la même version. Les étapes suivantes décrivent comment mettre à niveau tous les composants d’une version stable vers une version stable ultérieure. Lors de la mise à niveau d’une version mineure vers une autre version mineure, il est recommandé de commencer par mettre à niveau vers la dernière version corrective de la version mineure existante de Cilium. Pour minimiser les perturbations, définissez l’option upgradeCompatibility sur la version initiale de Cilium que vous avez installée dans ce 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. (Facultatif) Si vous devez annuler votre mise à niveau en raison de problèmes, exécutez les commandes suivantes.

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

Supprimer Cilium des nœuds hybrides

  1. Exécutez la commande suivante pour désinstaller tous les composants Cilium de votre cluster. Remarque : la désinstallation du CNI peut avoir un impact sur l’état des nœuds et des pods et ne doit pas être effectuée sur les clusters de production.

    helm uninstall cilium --namespace kube-system

    Les interfaces et les routes configurées par Cilium ne sont pas supprimées par défaut lorsque le CNI est supprimé du cluster. Consultez le GitHub problème pour plus d'informations.

  2. Pour nettoyer les fichiers de configuration et les ressources sur disque, si vous utilisez les répertoires de configuration standard, vous pouvez supprimer les fichiers comme indiqué par le cni-uninstall.shscript dans le référentiel Cilium sur. GitHub

  3. Pour supprimer les définitions de ressources personnalisées Cilium (CRDs) de votre cluster, vous pouvez exécuter les commandes suivantes.

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