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.
Informations connexes
Authentification de cluster
Service Kubernetes