Configurer les webhooks 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 les webhooks pour les nœuds hybrides

Cette page détaille les considérations relatives à l'exécution de webhooks avec des nœuds hybrides. Les webhooks sont utilisés dans les applications Kubernetes et les projets open source, tels que le AWS Load Balancer Controller et l' CloudWatch Observability Agent, pour effectuer des fonctionnalités de mutation et de validation lors de l'exécution.

Réseaux de pods routables

Si vous parvenez à rendre votre pod CIDR local routable sur votre réseau local, vous pouvez exécuter des webhooks sur des nœuds hybrides. Vous pouvez utiliser plusieurs techniques pour rendre votre pod CIDR local routable sur votre réseau local, notamment le Border Gateway Protocol (BGP), les itinéraires statiques ou d'autres solutions de routage personnalisées. Le BGP est la solution recommandée car elle est plus évolutive et plus facile à gérer que les solutions alternatives qui nécessitent une configuration de routage personnalisée ou manuelle. AWS prend en charge les fonctionnalités BGP de Cilium et Calico pour les modules publicitaires CIDRs, voir Configuration d'un CNI pour les nœuds hybrides et Pod à distance routable CIDRs pour plus d'informations.

Réseaux de pods non routables

Si vous ne pouvez pas rendre votre pod CIDR sur site routable sur votre réseau local et que vous devez exécuter des webhooks, nous vous recommandons d'exécuter tous les webhooks sur des nœuds cloud du même cluster EKS que vos nœuds hybrides.

Considérations relatives aux clusters en mode mixte

Les clusters en mode mixte sont définis comme des clusters EKS comportant à la fois des nœuds hybrides et des nœuds exécutés dans AWS le cloud. Lorsque vous exécutez un cluster en mode mixte, tenez compte des recommandations suivantes :

  • Exécutez le VPC CNI sur des nœuds dans le AWS cloud et Cilium ou Calico sur des nœuds hybrides. Cilium et Calico ne sont pas pris en charge AWS lorsqu'ils sont exécutés sur des nœuds dans le Cloud. AWS

  • Configurez les webhooks pour qu'ils s'exécutent sur des nœuds dans le AWS cloud. Découvrez Configurer les webhooks pour les modules complémentaires comment configurer les webhooks AWS et les modules complémentaires communautaires.

  • Si vos applications nécessitent des pods exécutés sur des nœuds dans le AWS cloud pour communiquer directement avec des pods exécutés sur des nœuds hybrides (« communication est-ouest »), et que vous utilisez le VPC CNI sur des nœuds dans le AWS cloud, et Cilium ou Calico sur des nœuds hybrides, le CIDR de votre pod local doit être routable sur votre réseau local.

  • Exécutez au moins une réplique de CoreDNS sur des nœuds AWS dans le Cloud et au moins une réplique de CoreDNS sur des nœuds hybrides.

  • Configurez la distribution du trafic de service pour que le trafic de service reste local dans la zone d'où il provient. Pour plus d'informations sur la distribution du trafic de service, consultezConfiguration de la distribution du trafic de service.

  • Si vous utilisez des équilibreurs de charge d' AWS application (ALB) ou des équilibreurs de charge réseau (NLB) pour le trafic de charge de travail exécuté sur des nœuds hybrides, les cibles IP utilisées avec l'ALB ou le NLB doivent être routables depuis. AWS

  • Le module complémentaire Metrics Server nécessite une connectivité entre le plan de contrôle EKS et l'adresse IP du pod Metrics Server. Si vous exécutez le module complémentaire Metrics Server sur des nœuds hybrides, le CIDR de votre pod local doit être routable sur votre réseau local.

  • Pour collecter des métriques pour les nœuds hybrides à l'aide de collecteurs gérés par Amazon Managed Service for Prometheus (AMP), le CIDR de votre pod local doit être routable sur votre réseau local. Vous pouvez également utiliser le collecteur géré AMP pour les métriques et les ressources du plan de contrôle EKS exécutées dans le AWS cloud, et le module complémentaire AWS Distro for OpenTelemetry (ADOT) pour collecter des métriques pour les nœuds hybrides.

Configuration de clusters en mode mixte

Pour visualiser les webhooks mutants et validants exécutés sur votre cluster, vous pouvez consulter le type de ressource Extensions dans le panneau Ressources de la console EKS correspondant à votre cluster, ou vous pouvez utiliser les commandes suivantes. EKS indique également les métriques du webhook dans le tableau de bord d'observabilité du cluster, voir Surveillez votre cluster à l'aide du tableau de bord d'observabilité pour plus d'informations.

kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations

Configuration de la distribution du trafic de service

Lorsque vous exécutez des clusters en mode mixte, nous vous recommandons d'utiliser la distribution du trafic de service pour que le trafic de service reste local dans la zone d'où il provient. La distribution du trafic de service (disponible pour les versions 1.31 et ultérieures de Kubernetes dans EKS) est la solution recommandée par rapport au routage basé sur la topologie, car elle est plus prévisible. Avec la distribution du trafic de service, les terminaux sains de la zone recevront tout le trafic de cette zone. Avec le routage adapté à la topologie, chaque service doit remplir plusieurs conditions dans cette zone pour appliquer le routage personnalisé, sinon il achemine le trafic de manière uniforme vers tous les points de terminaison.

Si vous utilisez Cilium comme CNI, vous devez exécuter le CNI avec le paramètre enable-service-topology défini sur pour activer la distribution du trafic true de service. Vous pouvez transmettre cette configuration à l'aide de l'indicateur d'installation Helm --set loadBalancer.serviceTopology=true ou vous pouvez mettre à jour une installation existante à l'aide de la commande Cilium CLI. cilium config set enable-service-topology true L'agent Cilium exécuté sur chaque nœud doit être redémarré après la mise à jour de la configuration d'une installation existante.

Un exemple de configuration de la distribution du trafic de service pour le service CoreDNS est présenté dans la section suivante, et nous vous recommandons d'activer la même méthode pour tous les services de votre cluster afin d'éviter le trafic interenvironnemental involontaire.

Configuration des répliques CoreDNS

Lorsque vous exécutez des clusters en mode mixte, nous vous recommandons de disposer d'au moins une réplique CoreDNS sur les nœuds hybrides et d'au moins une réplique CoreDNS sur les nœuds du Cloud. AWS

  1. Ajoutez une étiquette de zone topologique pour chacun de vos nœuds hybrides, par exempletopology.kubernetes.io/zone: onprem. Vous pouvez également définir l'étiquette lors de la nodeadm init phase en spécifiant l'étiquette dans votre nodeadm configuration, voirConfig de nœud pour personnaliser kubelet (facultatif). Notez que les nœuds exécutés dans AWS le cloud reçoivent automatiquement une étiquette de zone topologique qui correspond à la zone de disponibilité (AZ) du nœud.

    kubectl label node hybrid-node-name topology.kubernetes.io/zone=zone
  2. Ajoutez podAntiAffinity au déploiement CoreDNS avec la clé de zone topologique. Vous pouvez également configurer le déploiement de CoreDNS lors de l'installation à l'aide des modules complémentaires EKS.

    kubectl edit deployment coredns -n kube-system
    spec: template: spec: affinity: ... podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname weight: 100 - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: topology.kubernetes.io/zone weight: 50 ...
  3. Ajoutez le paramètre trafficDistribution: PreferClose à la configuration du kube-dns service pour activer la distribution du trafic du service.

    kubectl patch svc kube-dns -n kube-system --type=merge -p '{ "spec": { "trafficDistribution": "PreferClose" } }'
  4. Vous pouvez confirmer que la distribution du trafic de service est activée en consultant les tranches de point de terminaison du kube-dns service. Vos tranches de point de terminaison doivent afficher hints les étiquettes de votre zone topologique, ce qui confirme que la distribution du trafic de service est activée. Si vous ne voyez pas l'adresse de chaque point hints de terminaison, cela signifie que la distribution du trafic de service n'est pas activée.

    kubectl get endpointslice -A | grep "kube-dns"
    kubectl get endpointslice [.replaceable]`kube-dns-<id>` -n kube-system -o yaml
    addressType: IPv4 apiVersion: discovery.k8s.io/v1 endpoints: - addresses: - <your-hybrid-node-pod-ip> hints: forZones: - name: onprem nodeName: <your-hybrid-node-name> zone: onprem - addresses: - <your-cloud-node-pod-ip> hints: forZones: - name: us-west-2a nodeName: <your-cloud-node-name> zone: us-west-2a

Configurer les webhooks pour les modules complémentaires

Les modules complémentaires suivants utilisent des webhooks et sont compatibles avec les nœuds hybrides.

  • AWS Contrôleur Load Balancer

  • CloudWatch Agent d'observabilité

  • AWS Distribution pour OpenTelemetry (ADOT)

  • cert-manager

Consultez les sections suivantes pour configurer les webhooks utilisés par ces modules complémentaires pour qu'ils s'exécutent sur des nœuds dans le AWS Cloud.

AWS Contrôleur Load Balancer

Pour utiliser le AWS Load Balancer Controller dans une configuration de cluster en mode mixte, vous devez exécuter le contrôleur sur des nœuds du Cloud. AWS Pour ce faire, ajoutez ce qui suit à votre configuration des valeurs Helm ou spécifiez les valeurs à l'aide de la configuration complémentaire EKS.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

CloudWatch Agent d'observabilité

Le module complémentaire CloudWatch Observability Agent possède un opérateur Kubernetes qui utilise des webhooks. Pour exécuter l'opérateur sur des nœuds du AWS cloud dans une configuration de cluster en mode mixte, modifiez la configuration de l'opérateur CloudWatch Observability Agent. Vous ne pouvez pas configurer l'affinité des opérateurs lors de l'installation avec les modules complémentaires Helm et EKS (voir le problème #2431 de containers-roadmap).

kubectl edit -n amazon-cloudwatch deployment amazon-cloudwatch-observability-controller-manager
spec: ... template: ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

AWS Distribution pour OpenTelemetry (ADOT)

Le module complémentaire AWS Distro for OpenTelemetry (ADOT) possède un opérateur Kubernetes qui utilise des webhooks. Pour exécuter l'opérateur sur des nœuds dans le AWS cloud dans une configuration de cluster en mode mixte, ajoutez ce qui suit à votre configuration des valeurs Helm ou spécifiez les valeurs à l'aide de la configuration complémentaire EKS.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

Si le CIDR de votre pod n'est pas routable sur votre réseau local, le collecteur ADOT doit s'exécuter sur des nœuds hybrides pour extraire les métriques de vos nœuds hybrides et des charges de travail qui s'y exécutent. Pour ce faire, modifiez la définition de ressource personnalisée (CRD).

kubectl -n opentelemetry-operator-system edit opentelemetrycollectors.opentelemetry.io adot-col-prom-metrics
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid

Vous pouvez configurer le collecteur ADOT pour extraire uniquement les métriques des nœuds hybrides et des ressources exécutées sur les nœuds hybrides en ajoutant les éléments suivants relabel_configs à chacun scrape_configs dans la configuration CRD du collecteur ADOT.

relabel_configs: - action: keep regex: hybrid source_labels: - __meta_kubernetes_node_label_eks_amazonaws_com_compute_type

Le module complémentaire ADOT doit être installé cert-manager pour les certificats TLS utilisés par le webhook de l'opérateur ADOT. cert-managerexécute également des webhooks et vous pouvez le configurer pour qu'il s'exécute sur des nœuds dans le AWS cloud avec la configuration des valeurs Helm suivante.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

cert-manager

Le cert-manager module complémentaire exécute des webhooks et vous pouvez le configurer pour qu'il s'exécute sur des nœuds dans le AWS cloud avec la configuration des valeurs Helm suivante.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid