Configurez le plug-in CNI Amazon VPC pour Kubernetes pour les groupes de sécurité des pods Amazon EKS - 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.

Configurez le plug-in CNI Amazon VPC pour Kubernetes pour les groupes de sécurité des pods Amazon EKS

Si vous utilisez des pods avec des instances Amazon EC2, vous devez configurer le plug-in CNI Amazon VPC pour Kubernetes pour les groupes de sécurité

Si vous utilisez uniquement des pods Fargate et que vous n’avez aucun nœud Amazon EC2 dans votre cluster, consultez Utiliser une politique de groupe de sécurité pour un pod Amazon EKS.

  1. Vérifiez la version actuelle de votre plug-in CNI Amazon VPC pour Kubernetes à l’aide de la commande suivante :

    kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

    L'exemple qui suit illustre un résultat.

    v1.7.6

    Si la version de votre plug-in CNI Amazon VPC pour Kubernetes est antérieure à 1.7.7, veuillez mettre à jour le plug-in vers la version 1.7.7 ou une version ultérieure. Pour plus d’informations, consultez Attribuer IPs à des pods avec l'Amazon VPC CNI.

  2. Ajoutez la politique IAM gérée AmazonEKSVPCResourceController au rôle de cluster associé à votre cluster Amazon EKS. La politique permet au rôle de gérer les interfaces réseau, leurs adresses IP privées, leur attachement et leur détachement vers et depuis les instances réseau.

    1. Récupérez le nom de votre rôle IAM de cluster et stockez-le dans une variable. Remplacez my-cluster par le nom de votre cluster.

      cluster_role=$(aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2)
    2. Attachez la stratégie au rôle.

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController --role-name $cluster_role
  3. Activez le module complémentaire CNI Amazon VPC pour gérer les interfaces réseau des pods en définissant la variable ENABLE_POD_ENI sur true dans le DaemonSet aws-node. Une fois ce paramètre défini sur true, le module complémentaire crée une ressource personnalisée cninode pour chaque nœud du cluster. Le contrôleur de ressources VPC crée et attache une interface réseau spéciale appelée interface réseau de tronc avec la description aws-k8s-trunk-eni.

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

    L'interface réseau de tronc est incluse dans le nombre maximal d'interfaces réseau prises en charge par le type d'instance. Pour obtenir la liste du nombre maximal d’interfaces réseau prises en charge par chaque type d’instance, consultez Adresses IP par interface réseau par type d’instance dans le Guide de l’utilisateur Amazon EC2. Si votre nœud a déjà le nombre maximal d'interfaces réseau standard qui lui sont attachées, le contrôleur de ressources VPC réservera un espace. Vous devrez réduire verticalement vos pods en cours d’exécution suffisamment pour que le contrôleur puisse détacher et supprimer une interface réseau standard, créer l’interface réseau trunk et la connecter à l’instance.

  4. Vous pouvez voir quels nœuds ont une ressource personnalisée CNINode avec la commande suivante. Si le message No resources found est renvoyé, attendez plusieurs secondes et réessayez. L’étape précédente nécessite de redémarrer le plug-in CNI Amazon VPC pour les pods Kubernetes, ce qui prend plusieurs secondes.

    kubectl get cninode -A NAME FEATURES ip-192-168-64-141.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}] ip-192-168-7-203.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}]

    Si vous utilisez des versions CNI VPC antérieures à 1.15, les étiquettes de nœud ont été utilisées à la place de la ressource personnalisée CNINode. Vous pouvez voir quels nœuds ont le label de nœud aws-k8s-trunk-eni défini sur true à l’aide de la commande suivante. Si le message No resources found est renvoyé, attendez plusieurs secondes et réessayez. L’étape précédente nécessite de redémarrer le plug-in CNI Amazon VPC pour les pods Kubernetes, ce qui prend plusieurs secondes.

    kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true

    Une fois l’interface réseau trunk créée, les pods se voient attribuer des adresses IP secondaires à partir des interfaces réseau trunk ou standard. L'interface de tronc est automatiquement supprimée si le nœud est supprimé.

    Lorsque vous déployez un groupe de sécurité pour un pod dans une étape ultérieure, le contrôleur de ressources VPC crée une interface réseau spéciale appelée interface réseau de branche avec une description aws-k8s-branch-eni et y associe les groupes de sécurité. Les interfaces réseau de branche sont créées en plus des interfaces réseau standard et de tronc attachées au nœud.

    Si vous utilisez des sondes de vivacité ou de disponibilité, vous devez également désactiver TCP early demux, afin que le kubelet puisse se connecter aux pods sur les interfaces réseau de branche à l’aide de TCP. Pour désactiver le TCP early demux, exécutez la commande suivante :

    kubectl patch daemonset aws-node -n kube-system \ -p '{"spec": {"template": {"spec": {"initContainers": [{"env":[{"name":"DISABLE_TCP_EARLY_DEMUX","value":"true"}],"name":"aws-vpc-cni-init"}]}}}}'
    Note

    Si vous utilisez la version 1.11.0 ou ultérieure du plug-in CNI Amazon VPC pour le module complémentaire Kubernetes et que vous définissez POD_SECURITY_GROUP_ENFORCING_MODE=standard, comme décrit à l’étape suivante, vous n’avez pas besoin d’exécuter la commande précédente.

  5. Si votre cluster utilise NodeLocal DNSCache, ou si vous voulez utiliser la politique réseau Calico avec vos pods qui ont leurs propres groupes de sécurité, ou si vous disposez de services Kubernetes de type NodePort et LoadBalancer utilisant des cibles d’instance avec une externalTrafficPolicy définie sur Local pour les pods que vous voulez attribuer des groupes de sécurité, vous devez utiliser la version 1.11.0 ou ultérieure du module complémentaire Plug-in CNI Amazon VPC pour Kubernetes et activer le paramètre suivant :

    kubectl set env daemonset aws-node -n kube-system POD_SECURITY_GROUP_ENFORCING_MODE=standard

    IMPORTANT : Les règles de groupe de sécurité des pods ne s’appliquent pas au trafic entre les pods ou entre les pods et les services, tels que kubelet ou nodeLocalDNS, qui se trouvent sur le même nœud. Les pods utilisant différents groupes de sécurité sur le même nœud ne peuvent pas communiquer car ils sont configurés dans des sous-réseaux différents et le routage est désactivé entre ces sous-réseaux. Le trafic sortant des pods vers des adresses en dehors du VPC est soumis à une traduction d’adresses réseau vers l’adresse IP de l’interface réseau principale de l’instance (sauf si vous avez également défini AWS_VPC_K8S_CNI_EXTERNALSNAT=true). Pour ce trafic, les règles des groupes de sécurité de l’interface réseau principale sont utilisées, plutôt que celles des groupes de sécurité des pods. ** Pour que ce paramètre s’applique aux pods existants, vous devez redémarrer les pods ou les nœuds sur lesquels les pods s’exécutent.

  6. Pour savoir comment utiliser une stratégie de groupe de sécurité pour votre pod, consultez Utiliser une politique de groupe de sécurité pour un pod Amazon EKS.