Comment restreindre les adresses IP CIDR pour un service de type LoadBalancer dans Amazon EKS ?

Date de la dernière mise à jour : 23/08/2021

Je souhaite restreindre les adresses IP CIDR pour un service de type LoadBalancer dans Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Si vous créez un service de type : LoadBalancer, les demandes de la source 0.0.0.0/0 sont alors autorisées par défaut. Cela signifie que, si votre équilibreur de charge se trouve dans un sous-réseau public, les demandes sont acheminées vers les nœuds de travail depuis n'importe quel emplacement sur Internet.

Résolution

Remarque : si des erreurs s'affichent lors de l'exécution de commandes AWS Command Line Interface (AWS CLI), assurez-vous que vous utilisez la version la plus récente de l'AWS CLI.

Configurer votre environnement

1.    Créez un cluster Amazon EKS.

2.    Créez et lancez des nœuds de travail.

3.    Configurez kubectl.

4.    Configurez l'AWS CLI.

5.    Configurez le contrôleur de l'équilibreur de charge AWS.

Remarque : le contrôleur de l'équilibreur de charge AWS prend en charge les versions suivantes du dispositif d'équilibrage de charge de réseau pour les services de type LoadBalancer : mode IP NLB (version 2.0.0 ou supérieure) et mode d'instance NLB (2.2.0 ou supérieur)

Important : il est recommandé d'utiliser le contrôleur de l'équilibreur de charge AWS lorsque vous mettez en service un nouveau dispositif d'équilibrage de charge de réseau pour les services de type LoadBalancer. Utilisez le contrôleur de l'équilibreur de charge AWS au lieu du contrôleur de l'équilibreur de charge de service Kubernetes « in-tree ».

Restriction des adresses IP CIDR

1.    Dans votre fichier manifeste de service (svc.yaml), ajoutez le champ .spec.loadBalancerSourceRanges. Par exemple :

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "external"
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
    service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer
  loadBalancerSourceRanges:
  - "143.231.0.0/16"

2.    Afin d'appliquer le fichier manifeste, exécutez la commande suivante :

$ kubectl apply -f svc.yaml

3.    Afin de confirmer la modification des règles entrantes sur le groupe de sécurité, exécutez la commande de l'interface de ligne de commande AWS suivante :

$ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
...
    "CidrIp": "143.231.0.0/16"
...

Enfin, tenez compte des éléments suivants :

Si vous utilisez le mode IP NLB, le champ .spec.loadBalancerSourceRanges est ignoré par défaut. Dans ce cas, utilisez l'annotation suivante :

service.beta.kubernetes.io/aws-load-balancer-target-group-attributes: preserve_client_ip.enabled=true

Cette annotation permet la préservation de l'adresse IP du client.

Pour un service avec un type Network Load Balancer, prenez en compte la limite maximale du groupe de sécurité. Pour chaque port de nœud et plage CIDR du sous-réseau, le contrôleur crée des règles sur le groupe de sécurité du nœud de travail.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?