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

Lecture de 4 minute(s)
0

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 requêtes provenant de la source 0.0.0.0/0 sont autorisées par défaut. Si votre équilibreur de charge se trouve dans un sous-réseau public, les requêtes sont acheminées vers les composants master partout sur Internet.

Pour restreindre la source plutôt que 0.0.0.0/0, utilisez loadBalancerSourceRanges.

Résolution

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes de l’interface de la ligne de commande AWS (AWS CLI), consultez Corriger les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Configurer votre environnement

Pour configurer votre environnement, procédez comme suit :

  1. Créez un cluster Amazon EKS.
  2. Créez, puis lancez des composants master.
  3. Configurez kubectl.
  4. Configurez AWS CLI.
  5. Configurez AWS Balancer Controller.
    Remarque : pour le service de type LoadBalancer, AWS Balancer Controller prend en charge le mode IP Network Load Balancer (NLB) version 2.0.0 ou ultérieure et le mode d’instance NLB 2.2.0 ou version ultérieure.

Important : pour allouer un nouveau Network Load Balancer aux services de type LoadBalancer, il est recommandé d’utiliser AWS Balancer Controller plutôt que le contrôleur d’équilibreur de charge du service Kubernetes. Pour obtenir la dernière version d’AWS Balancer Controller, consultez aws-load-balancer-controller sur le site Web de GitHub.

Restreindre les adresses IP CIDR

Choisissez l’une des méthodes suivantes pour spécifier les loadBalancerSourceRanges.

Utiliser une annotation 

Utilisez une annotation dans votre fichier manifeste de service (svc.yaml).

Exemple d’annotation :

service.beta.kubernetes.io/load-balancer-source-ranges: 143.231.0.0/16

pour plus d’informations, consultez la page Contrôle d’accès sur le site Web de Kubernetes.

Ajoutez le champ loadBalancerSourceRanges

  1. Ajoutez le champ .spec.loadBalancerSourceRanges dans votre fichier svc.yaml :

    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. Exécutez la commande suivante pour appliquer votre fichier svc.yaml :

    $ kubectl apply -f svc.yaml

    Exécutez la commande suivante pour vérifier les journaux des pods d’AWS Load Balancer Controller :

    $ kubectl logs -f <aws load balancer controller pod> -n <namespace>
  3. AWS Load Balancer Controller ajoute les plages de sources configurées de l’équilibreur de charge dans les règles d’entrée du groupe de sécurité. Exécutez la commande suivante pour vous assurer que les règles entrantes du groupe de sécurité sont modifiées :

    $ aws ec2 describe-security-groups --group-ids sg-XXXXXXXXXXXXXXXXX
    ...
        "CidrIp": "143.231.0.0/16"
    ...
  4. Si vous utilisez un Network Load Balancer en mode IP, le champ .spec.loadBalancerSourceRanges est alors ignoré par défaut. Dans ce cas, utilisez l’annotation suivante pour activer la préservation de l’IP du client :

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

    Pour un service de type Network Load Balancer, vous pouvez augmenter la limite maximale du groupe de sécurité. Pour chaque port de nœud et plage CIDR de sous-réseau, le contrôleur crée des règles sur le groupe de sécurité du composant master. Pour en savoir plus, consultez Ingress traffic sur le site Web de Kubernetes.

    Remarque : pour un service de type Network Load Balancer, vous pouvez augmenter le quota maximum des groupes de sécurité. Pour chaque port de nœud et plage CIDR de sous-réseau, le contrôleur crée des règles sur le groupe de sécurité du composant master. Par exemple, vous disposez de composants master répartis dans trois zones de disponibilité. Vous ajoutez un loadBalancerSourceRange. Trois règles de surveillance de l’état (une par sous-réseau) et une règle loadBalancerSourceRange sont créées dans le groupe de sécurité du composant master. Les groupes de sécurité ont une limite par défaut de 60 règles. Vous pouvez augmenter ce quota, mais le nombre total de groupes de sécurité par interface réseau ne doit pas dépasser 1 000.

Informations connexes

Autoriser les utilisateurs à accéder à votre cluster

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