Pourquoi l'état de mon composant master est-il « défectueux » lorsque j'utilise le contrôleur d'entrée NGINX avec Amazon EKS ?
Date de la dernière mise à jour : 13/12/2021
J'utilise le contrôleur d'entrée NGINX pour exposer la ressource d'entrée, mais mes composants master Amazon Elastic Kubernetes Service (Amazon EKS) n'utilisent pas Network Load Balancer.
Brève description
Le contrôleur d'entrée NGINX définit l'option Spec.ExternalTrafficPolicy sur Local pour conserver l'adresse IP du client. De plus, les demandes ne sont pas acheminées vers des composants master défectueux. Le dépannage suivant implique que vous n'avez pas besoin de conserver l'adresse IP du cluster ou de sauvegarder l'adresse IP du client.
Résolution
Vérifiez l'état de votre composant master :
Remarque : les exemples suivants sont basés sur le contrôleur d'entrée NGINX v1.0.2.
1. Créez les ressources obligatoires pour le contrôleur d'entrée NGINX (à partir du site web de Kubernetes) dans votre cluster :
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.2/deploy/static/provider/aws/deploy.yaml
Par défaut, le contrôleur d'entrée NGINX crée le contrôleur d'entrée du service Kubernetes avec l'option .spec.ExternalTrafficPolicy définie sur Local (à partir du site web de GitHub).
2. Vérifiez si la politique de trafic externe (à partir du site web de Kubernetes) est définie sur Local :
$ kubectl -n ingress-nginx describe svc ingress-nginx-controller
Sortie :
Name: ingress-nginx-controller
Namespace: ingress-nginx
Labels: app.kubernetes.io/component=controller
app.kubernetes.io/instance=ingress-nginx
app.kubernetes.io/managed-by=Helm
app.kubernetes.io/name=ingress-nginx
app.kubernetes.io/version=1.0.2
helm.sh/chart=ingress-nginx-4.0.3
Annotations: service.beta.kubernetes.io/aws-load-balancer-backend-protocol: tcp
service.beta.kubernetes.io/aws-load-balancer-cross-zone-load-balancing-enabled: true
service.beta.kubernetes.io/aws-load-balancer-type: nlb
Selector: app.kubernetes.io/component=controller,app.kubernetes.io/instance=ingress-nginx,app.kubernetes.io/name=ingress-nginx
Type: LoadBalancer
IP Families: <none>
IP: 10.100.115.226
IPs: 10.100.115.226
LoadBalancer Ingress: a02245e77404f4707a725d0b977425aa-5b97f717658e49b9.elb.eu-west-1.amazonaws.com
Port: http 80/TCP
TargetPort: http/TCP
NodePort: http 31748/TCP
Endpoints: 192.168.43.203:80
Port: https 443/TCP
TargetPort: https/TCP
NodePort: https 30045/TCP
Endpoints: 192.168.43.203:443
Session Affinity: None
External Traffic Policy: Local
HealthCheck NodePort: 30424
Events: <none>
Remarque : le paramètre Local supprime les paquets envoyés aux nœuds Kubernetes qui ne sont pas des instances en cours d’exécution du contrôleur d'entrée NGINX. Attribuez des pods NGINX (à partir du site web de Kubernetes) aux nœuds sur lesquels vous souhaitez planifier le contrôleur d'entrée NGINX.
3. Vérifiez la commande iptables qui configure les règles DROP sur les nœuds qui ne sont pas des instances en cours d'exécution du contrôleur d'entrée NGINX :
$ sudo iptables-save | grep -i "no local endpoints"
-A KUBE-XLB-CG5I4G2RS3ZVWGLK -m comment --comment "ingress-nginx/ingress-nginx-controller:http has no local endpoints
" -j KUBE-MARK-DROP
-A KUBE-XLB-EDNDUDH2C75GIR6O -m comment --comment "ingress-nginx/ingress-nginx-controller:https has no local endpoints " -j KUBE-MARK-DROP
Définissez l'option de politique
Mettez à jour l'option PEC.ExternalTrafficPolicy sur Cluster :
$ kubectl -n ingress-nginx patch service ingress-nginx-controller -p '{"spec":{"externalTrafficPolicy":"Cluster"}}'
service/ingress-nginx-controller patched
Remarque : les services NodePort effectuent la traduction de l'adresse source (à partir du site web de Kubernetes) par défaut. Pour le contrôleur d'entrée NGINX, cela signifie que l'adresse IP source d'une demande HTTP est toujours l'adresse IP du nœud Kubernetes qui a reçu la demande. Si vous définissez un NodePort sur la valeur du champ ExternalTrafficPolicy dans la spécification de service ingress-nginx sur Cluster, vous ne pouvez pas conserver l'adresse IP source.
Cet article vous a-t-il été utile ?
Besoin d'aide pour une question technique ou de facturation ?