Limitez le trafic réseau du Pod avec Kubernetes politiques du réseau - Amazon EKS

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.

Limitez le trafic réseau du Pod avec Kubernetes politiques du réseau

Vous pouvez utiliser un Kubernetes politique réseau pour restreindre le trafic réseau à destination et en provenance de votre Pods. Pour plus d'informations, consultez la section Politiques réseau dans le Kubernetes .

Vous devez configurer les éléments suivants pour utiliser cette fonctionnalité :

  1. Configurez l'application des politiques sur Pod démarrage. Vous le faites dans le aws-node conteneur du VPC CNIDaemonSet.

  2. Activez le paramètre de politique réseau pour le module complémentaire.

  3. Configurez votre cluster pour utiliser le Kubernetes politique du réseau

Avant de commencer, passez en revue les considérations. Pour de plus amples informations, veuillez consulter Considérations.

Prérequis

Les conditions requises pour cette fonctionnalité sont les suivantes :

* .Version minimale du cluster Un EKS cluster Amazon existant. Pour en déployer un, consultez Commencez avec Amazon EKS. Le cluster doit être Kubernetes version 1.25 ou ultérieure. Le cluster doit exécuter l'un des Kubernetes versions et versions de plate-forme répertoriées dans le tableau suivant. Notez que tout Kubernetes et les versions de plate-forme ultérieures à celles répertoriées sont également prises en charge. Vous pouvez vérifier votre Kubernetes version en remplaçant my-cluster dans la commande suivante avec le nom de votre cluster, puis exécutez la commande modifiée :

+

aws eks describe-cluster --name my-cluster --query cluster.version --output text

+

Version de Kubernetes Version de la plateforme

1.27.4

eks.5

1.26.7

eks.6

1.25.12

eks.7

* VPC CNI .Version minimale Version 1.14 ou ultérieure du Amazon VPC CNI plugin for Kubernetes sur votre cluster. Vous pouvez voir la version que vous utilisez actuellement à l'aide de la commande suivante.

+

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

+ Si votre version est antérieure à1.14, voir Mettre à jour Amazon VPC CNI (EKSmodule complémentaire Amazon) pour passer à la version 1.14 ou ultérieure. * .Version minimale du noyau Linux Vos nœuds doivent disposer d'une version du noyau Linux 5.10 ou ultérieure. Vous pouvez vérifier votre version du noyau avec uname -r. Si vous utilisez les dernières versions d'Amazon Linux EKS optimisé pour Amazon, d'Amazon Linux accéléré EKS optimisé pour Amazon et de Bottlerocket AMIsAMIs, ils disposent déjà de la version de noyau requise.

+ La version accélérée EKS optimisée d'Amazon Linux v20231116 ou une AMI version ultérieure d'Amazon possède une version noyau5.10.

Étape 1 : configurer l'application des politiques sur Pod startup

Le Amazon VPC CNI plugin for Kubernetes configure les politiques réseau pour les pods en parallèle avec le provisionnement des pods. Jusqu'à ce que toutes les politiques soient configurées pour le nouveau pod, les conteneurs du nouveau pod commenceront par une politique d'autorisation par défaut. C'est ce qu'on appelle le mode standard. Une politique d'autorisation par défaut signifie que tout le trafic entrant et sortant est autorisé à destination et en provenance des nouveaux modules. Par exemple, aucune règle de pare-feu ne sera appliquée aux pods (tout le trafic est autorisé) tant que le nouveau pod ne sera pas mis à jour avec les politiques actives.

Lorsque la NETWORK_POLICY_ENFORCING_MODE variable est définie surstrict, les pods qui l'utilisent VPC CNI commencent par une politique de refus par défaut, les politiques sont configurées. C'est ce qu'on appelle le mode strict. En mode strict, vous devez disposer d'une politique réseau pour chaque point de terminaison auquel vos pods doivent accéder dans votre cluster. Notez que cette exigence s'applique au CoreDNS gousses. La politique de refus par défaut n'est pas configurée pour les pods dotés d'un réseau hôte.

Vous pouvez modifier la politique réseau par défaut en définissant la variable NETWORK_POLICY_ENFORCING_MODE d'environnement sur strict dans le aws-node conteneur du VPC CNIDaemonSet.

env: - name: NETWORK_POLICY_ENFORCING_MODE value: "strict"

Étape 2 : activer le paramètre de politique réseau pour le module complémentaire

La fonctionnalité de politique réseau utilise le port 8162 du nœud pour les métriques par défaut. En outre, la fonctionnalité utilisait le port 8163 pour les sondes d'intégrité. Si vous exécutez une autre application sur les nœuds ou dans les pods qui doivent utiliser ces ports, l'application ne s'exécutera pas. Dans VPC CNI la version v1.14.1 ou ultérieure, vous pouvez modifier ces ports.

Utilisez la procédure suivante pour activer le paramètre de politique réseau pour le module complémentaire.

AWS Management Console
  1. Ouvrez la EKSconsole Amazon.

  2. Dans le volet de navigation de gauche, sélectionnez Clusters, puis sélectionnez le nom du cluster pour lequel vous souhaitez configurer le VPC CNI module complémentaire Amazon.

  3. Choisissez l'onglet Modules complémentaires.

  4. Cochez la case en haut à droite de la zone du module complémentaire, puis sélectionnez Edit (Modifier).

  5. Sur le Configure name of add-on page :

    1. Sélectionnez une version v1.14.0-eksbuild.3 ou une version ultérieure dans la liste des versions.

    2. Sélectionnez Paramètres de configuration facultatifs.

    3. Entrez la JSON clé "enableNetworkPolicy": et la valeur "true" dans Valeurs de configuration. Le texte obtenu doit être un JSON objet valide. Si cette clé et cette valeur sont les seules données de la zone de texte, entourez-les d'accolades { }.

      Dans l'exemple suivant, la fonctionnalité de politique réseau est activée et les métriques et les sondes de santé sont définies sur les numéros de port par défaut :

      { "enableNetworkPolicy": "true", "nodeAgent": { "healthProbeBindAddr": "8163", "metricsBindAddr": "8162" } }
Helm

Si vous avez installé le Amazon VPC CNI plugin for Kubernetes grâce à helm cela, vous pouvez mettre à jour la configuration pour modifier les ports.

  1. Exécutez la commande suivante pour modifier les ports. Définissez le numéro de port dans la valeur de la clé nodeAgent.metricsBindAddr ou de la clé nodeAgent.healthProbeBindAddr.

    helm upgrade --set nodeAgent.metricsBindAddr=8162 --set nodeAgent.healthProbeBindAddr=8163 aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Ouvrez le aws-node DaemonSet dans votre éditeur.

    kubectl edit daemonset -n kube-system aws-node
  2. Remplacez les numéros de port dans les arguments de commande suivants args: dans le aws-network-policy-agent conteneur du manifeste du VPC CNI aws-node daemonset.

    - args: - --metrics-bind-addr=:8162 - --health-probe-bind-addr=:8163

Étape 3 : monter le système de fichiers Berkeley Packet Filter (BPF) sur vos nœuds

Vous devez monter le système de fichiers Berkeley Packet Filter (BPF) sur chacun de vos nœuds.

Note

Si votre cluster est une version 1.27 ou une version ultérieure, vous pouvez ignorer cette étape car tous les systèmes Amazon Linux et Bottlerocket EKS optimisés AMIs pour Amazon 1.27 ou version ultérieure disposent déjà de cette fonctionnalité.

Pour toutes les autres versions de cluster, si vous mettez à niveau le système Amazon Linux EKS optimisé pour Amazon vers la version v20230703 ou ultérieure ou si vous mettez à niveau le Bottlerocket AMI vers la version v1.0.2 ou ultérieure, vous pouvez ignorer cette étape.

  1. Montez le système de fichiers Berkeley Packet Filter (BPF) sur chacun de vos nœuds.

    sudo mount -t bpf bpffs /sys/fs/bpf
  2. Ajoutez ensuite la même commande à vos données utilisateur dans votre modèle de lancement pour vos groupes Amazon EC2 Auto Scaling.

Étape 4 : configurer votre cluster pour utiliser Kubernetes politiques du réseau

Configurer le cluster à utiliser Kubernetes politiques du réseau. Vous pouvez le définir pour un EKS module complémentaire Amazon ou un module complémentaire autogéré.

AWS Management Console
  1. Ouvrez la EKSconsole Amazon.

  2. Dans le volet de navigation de gauche, sélectionnez Clusters, puis sélectionnez le nom du cluster pour lequel vous souhaitez configurer le VPC CNI module complémentaire Amazon.

  3. Choisissez l'onglet Modules complémentaires.

  4. Cochez la case en haut à droite de la zone du module complémentaire, puis sélectionnez Edit (Modifier).

  5. Sur le Configure name of addon page :

    1. Sélectionnez une version v1.14.0-eksbuild.3 ou une version ultérieure dans la liste des versions.

    2. Sélectionnez Paramètres de configuration facultatifs.

    3. Entrez la JSON clé "enableNetworkPolicy": et la valeur "true" dans Valeurs de configuration. Le texte obtenu doit être un JSON objet valide. Si cette clé et cette valeur sont les seules données de la zone de texte, entourez-les d'accolades { }. L'exemple suivant montre que la politique réseau est activée :

      { "enableNetworkPolicy": "true" }

      La capture d'écran suivante montre un exemple de ce scénario.

      <shared id="consolelong"/>montrant le VPC CNI module complémentaire avec la politique réseau dans la configuration optionnelle.
AWS CLI
  1. Exécutez la AWS CLI commande suivante. my-clusterRemplacez-le par le nom de votre cluster et le IAM rôle ARN par le rôle que vous utilisez.

    aws eks update-addon --cluster-name my-cluster --addon-name vpc-cni --addon-version v1.14.0-eksbuild.3 \ --service-account-role-arn arn:aws: iam::123456789012:role/AmazonEKSVPCCNIRole \ --resolve-conflicts PRESERVE --configuration-values '{"enableNetworkPolicy": "true"}'
Helm

Si vous avez installé le Amazon VPC CNI plugin for Kubernetes grâce à helm cela, vous pouvez mettre à jour la configuration pour activer la politique réseau.

  1. Exécutez la commande suivante pour activer la stratégie réseau.

    helm upgrade --set enableNetworkPolicy=true aws-vpc-cni --namespace kube-system eks/aws-vpc-cni
kubectl
  1. Ouvrez le amazon-vpc-cni ConfigMap dans votre éditeur.

    kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml
  2. Ajoutez la ligne suivante dans les data de ConfigMap.

    enable-network-policy-controller: "true"

    Une fois que vous avez ajouté la ligne, vous ConfigMap devriez ressembler à l'exemple suivant.

    apiVersion: v1 kind: ConfigMap metadata: name: amazon-vpc-cni namespace: kube-system data: enable-network-policy-controller: "true"
  3. Ouvrez le aws-node DaemonSet dans votre éditeur.

    kubectl edit daemonset -n kube-system aws-node
  4. Remplacez le false par true dans l'argument de commande --enable-network-policy=false args: dans le aws-network-policy-agent conteneur du manifeste du VPC CNI aws-node daemonset.

    - args: - --enable-network-policy=true

Étape 5. Étapes suivantes

Une fois la configuration terminée, vérifiez que les aws-node pods sont en cours d'exécution sur votre cluster.

kubectl get pods -n kube-system | grep 'aws-node\|amazon'

L'exemple qui suit illustre un résultat.

aws-node-gmqp7 2/2 Running 1 (24h ago) 24h aws-node-prnsh 2/2 Running 1 (24h ago) 24h

Il y a 2 conteneurs dans les aws-node capsules dans les versions 1.14 et ultérieures. Dans les versions précédentes et si la stratégie réseau est désactivée, il n'y a qu'un seul conteneur dans les pods du aws-node.

Vous pouvez désormais déployer Kubernetes politiques réseau appliquées à votre cluster.

À mettre en œuvre Kubernetes politiques réseau que vous créez Kubernetes NetworkPolicyobjets et déployez-les sur votre cluster. NetworkPolicyles objets sont limités à un espace de noms. Vous mettez en œuvre des politiques pour autoriser ou refuser le trafic entre Pods en fonction des sélecteurs d'étiquettes, des espaces de noms et des plages d'adresses IP. Pour plus d'informations sur la création d'NetworkPolicyobjets, consultez la section Politiques réseau dans le Kubernetes .

Mise en œuvre de Kubernetes NetworkPolicyles objets sont implémentés à l'aide du Extended Berkeley Packet Filter (eBPF). Par rapport aux implémentations iptables basées, il offre des caractéristiques de latence et de performance plus faibles, notamment une CPU utilisation réduite et l'évitement des recherches séquentielles. De plus, eBPF les sondes fournissent un accès à des données contextuelles qui aident à résoudre les problèmes complexes au niveau du noyau et à améliorer l'observabilité. Amazon EKS prend en charge un eBPFexportateur basé sur les sondes pour enregistrer les résultats des politiques sur chaque nœud et exporter les données vers des collecteurs de journaux externes pour faciliter le débogage. Pour plus d'informations, consultez la BPFdocumentation électronique.