Comment choisir des sous-réseaux IP spécifiques à utiliser pour les pods de mon cluster Amazon EKS ?

Lecture de 7 minute(s)
0

Je souhaite utiliser des sous-réseaux ou des plages d'adresses IP personnalisés pour mes pods dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Parfois, les pods n'utilisent pas tous les sous-réseaux disponibles dans votre cluster Amazon EKS. Cela se produit lorsque certains sous-réseaux de nœuds n'ont aucune adresse IP disponible, mais que d'autres sous-réseaux d'Amazon Virtual Private Cloud (Amazon VPC) restent sous-utilisés.

Les nœuds et les pods d'Amazon EKS utilisent des adresses IP provenant du même espace d'adressage : les plages d'adresses CIDR IP associées au VPC du cluster. Plus précisément, Amazon EKS attribue des adresses IP aux pods à partir du même sous-réseau que le composant master où les pods sont planifiés.

Par exemple, supposons que le nœud 1 soit lancé dans le sous-réseau 1. C'est-à-dire que l'interface réseau élastique principale du nœud se trouve dans le sous-réseau 1. Plus tard, le pod-A peut être déployé et programmé sur le nœud 1. Par défaut, le plugin CNI Amazon VPC attribue des interfaces réseau élastiques secondaires et des adresses IP dans le sous-réseau 1 pour attribuer une adresse IP au pod-A.

Par conséquent, les utilisateurs n'ont aucun contrôle direct sur l'attribution personnalisée des espaces aux sous-réseaux IP, car les espaces et les nœuds utilisent le même sous-réseau. Si les nœuds disposent d'une capacité de calcul suffisante pour exécuter de nombreux pods, les pods peuvent utiliser toutes les adresses IP disponibles dans le sous-réseau du nœud. Les nouveaux pods ne s'exécutent pas en raison d'adresses IP épuisées dans le sous-réseau du nœud. Cela se produit même lorsque d'autres sous-réseaux d'Amazon VPC peuvent avoir des adresses IP disponibles.

Résolution

Vous pouvez résoudre ce problème en utilisant le composant réseau personnalisé d'Amazon VPC CNI. Cette fonctionnalité vous permet de définir des sous-réseaux spécifiques dans le cluster Amazon VPC à utiliser par vos pods. Il différencie vos sous-réseaux de ceux utilisés par les composants master. Comme avantage supplémentaire, vous pouvez définir des groupes de sécurité pour vos pods. Consultez Tutoriel : Réseau personnalisé pour plus d'informations sur les cas d'utilisation de réseaux personnalisés.

Préalable

Avant de commencer, procédez aux points suivants :

Il est recommandé de vous assurer que la dernière version du plugin Amazon VPC CNI est en cours d'exécution dans votre cluster. Exécutez la commande suivante pour vérifier la version dans votre cluster Amazon VPC :

kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2

Remarque : Pour plus d'informations sur la meilleure version à utiliser, consultez la section Mise à jour du plugin Amazon VPC CNI pour le module complémentaire autogéré.

Configurez votre sous-réseau et vos plages d'adresses IP personnalisés

Suivez ces étapes pour utiliser la fonctionnalité réseau personnalisée CNI d'Amazon VPC :

1.    Activez la fonctionnalité réseau personnalisée Amazon VPC CNI :

kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true

2.    Créez des objets ENIConfig pour définir des sous-réseaux et des groupes de sécurité à utiliser par les pods.

Un objet ENIConfig définit un sous-réseau et une liste de groupes de sécurité. Lorsqu'un nœud est annoté ou étiqueté avec un seul objet ENIConfig, tous les pods planifiés pour ce nœud utilisent le sous-réseau et les groupes de sécurité définis dans cet objet ENIConfig.

Vous pouvez associer automatiquement ou manuellement un objet ENIConfig à un nœud.

Associer automatiquement des objets ENIConfig à des nœuds

Cette option n'autorise qu'un seul objet ENIConfig (un sous-réseau) par zone de disponibilité (AZ). Le nom ENIConfig doit être le nom de l'AZ.

1.    Créez des objets ENIConfig avec le nom AZ :

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: us-east-2b
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-YYYYYYYYY
EOF

2.    Activez Amazon VPC-CNI pour étiqueter automatiquement les nœuds avec l'objet ENIConfig qui correspond au nœud AZ.

kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=topology.kubernetes.io/zone

Associer manuellement des objets ENIConfig à des nœuds

Cette option autorise plusieurs objets ENIConfig par zone de disponibilité. Notez que vous pouvez utiliser un nom personnalisé pour chaque objet ENIConfig. Assurez-vous que le nœud et l'objet ENIConfig associé se trouvent dans la même zone de disponibilité.

Remarque : Vous ne pouvez annoter qu'un seul nœud avec un seul objet ENIConfig, mais vous pouvez annoter plusieurs nœuds avec le même objet ENIConfig.

1.    Créez des objets ENIConfig avec des noms personnalisés, comme suit :

cat <<EOF  | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-1-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-XXXXXXXX
EOF


cat <<EOF | kubectl apply -f -
apiVersion: crd.k8s.amazonaws.com/v1alpha1
kind: ENIConfig
metadata:
 name: my-conf-2-us-east-2a
spec:
  securityGroups: 
    - sg-xxxxxxxxxxxx
  subnet: subnet-ZZZZZZZZZZ
EOF

2.    Annotez manuellement les nœuds avec des objets ENIConfig. Assurez-vous que le nœud et le sous-réseau de l'objet ENIConfig associé se trouvent dans la même zone de disponibilité.

kubectl annotate node ip-192-168-0-126.us-east-2.compute.internal k8s.amazonaws.com/eniConfig=my-conf-1-us-east-2a

Cette annotation manuelle a priorité sur l'étiquette ajoutée automatiquement par Amazon VPC CNI.

Lancer de nouveaux nœuds pour remplacer le composant master actuel

Les composants master existants peuvent disposer d'interfaces réseau élastiques secondaires et d'adresses IP provenant du sous-réseau du nœud avant que vous n'activiez la fonctionnalité de mise en réseau personnalisée dans Amazon VPC CNI. Pour cette raison, vous devez lancer de nouveaux nœuds afin qu'ils puissent attribuer des interfaces réseau élastiques secondaires et des adresses IP à partir des sous-réseaux définis dans l'objet ENIConfig associé au nœud.

1.    Vérifiez si vous utilisez l'une des options de groupe de nœuds suivantes :

  • groupe de nœuds autogéré
  • groupe de nœuds géré avec ID AMI personnalisé

Remarque : Si vous créez des nœuds dans ces types de groupes de nœuds, passez à l'étape 2 pour définir manuellement le nombre maximum de pods pour vos nœuds. Si vous lancez des nœuds dans le groupe de nœuds gérés sans spécifier d'AMI personnalisée, Amazon EKS met automatiquement à jour le nombre maximum de pods pour vos nœuds. Pour plus d'informations, consultez Erreurs de groupe de nœuds gérés.

2.    Déterminez le nombre maximum de pods par nœud. Quand vous utilisez un réseau personnalisé, l'interface réseau principale n'est pas utilisée pour le placement de pod. Pour déterminer la valeur maximale du nombre de pods à l'aide du script de calcul du nombre maximum de pods, consultez le nombre maximal d'espaces recommandé par Amazon EKS pour chaque type d'instance EC2.

Remarque : utilisez l'indicateur cni-custom-networking-enabled avec le script ci-dessus pour lancer des pods dans un sous-réseau autre que votre propre instance.

3.    Mettez à jour le script de données utilisateur sur vos nouveaux nœuds pour inclure les indicateurs requis. Par exemple :

#!/bin/bash
/etc/eks/bootstrap.sh my_cluster_name --use-max-pods false --kubelet-extra-args '--max-pods=20'

Remarque : remplacez my_cluster_name par le nom de votre cluster EKS. Pour plus d'informations sur les fonctionnalités Bootstrap, consultez awslabs/amazon-eks-ami sur le site Web de GitHub.

4.    Recréez les pods pour utiliser la nouvelle configuration réseau personnalisée des pods.

Autres considérations

  • Par défaut, le trafic provenant des pods vers des adresses IP externes au CIDR VPC du cluster utilise l'interface principale et l'adresse IP du nœud. Par conséquent, ce trafic n'utilise pas le sous-réseau et les groupes de sécurité définis dans l'ENIConfig. Le trafic utilise plutôt les groupes de sécurité et le sous-réseau de l'interface réseau principale du nœud. Pour plus d'informations, consultez la section SNAT pour les pods.
  • Si vous utilisez également des groupes de sécurité pour les espaces, le groupe de sécurité spécifié dans une SecurityGroupPolicy est utilisé à la place du groupe de sécurité spécifié dans les objets ENIConfig**.**
  • Consultez Simplifier la mise en réseau personnalisée CNI pour les dernières mises à jour sur le site Web de GitHub.
  • Pour ajouter d'autres plages d'adresses CIDR IP à votre VPC, suivez les étapes de la section Comment utiliser plusieurs plages d'adresses CIDR dans Amazon EKS ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an