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 :
- Créez un cluster Amazon EKS.
- Créez, puis lancez des composants master.
- Configurez kubectl.
- Configurez AWS CLI.
- 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
-
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"
-
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>
-
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"
...
-
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