Perché lo stato del mio nodo worker "non è integro" quando utilizzo il controller di ingresso NGINX con Amazon EKS?
Uso il controller di ingresso NGINX per esporre la risorsa di ingresso. Tuttavia, i miei nodi worker Amazon Elastic Kubernetes Service (Amazon EKS) non riescono a utilizzare Network Load Balancer.
Breve descrizione
Per preservare l'IP del client, il controller di ingresso NGINX imposta l'opzione spec.externalTrafficPolicy su Local. Inoltre, indirizza le richieste solo ai nodi worker integri.
Per risolvere i problemi relativi allo stato dei nodi worker e aggiornare la policy del traffico, consulta i seguenti passaggi.
Nota: non è necessario mantenere l'indirizzo IP del cluster o preservare l'indirizzo IP del client.
Risoluzione
Controlla lo stato di integrità dei tuoi nodi worker
Nota: i seguenti esempi utilizzano il controller di ingresso NGINX v1.5.1 in esecuzione su EKS Cluster v1.23.
1. Crea le risorse obbligatorie il controller di ingresso NGINX (dal sito Web Kubernetes) nel tuo cluster:
$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.5.1/deploy/static/provider/aws/deploy.yaml
Di default, il controller di ingresso NGINX crea il Kubernetes Service ingress-nginx-controller con l'opzione**.spec.externalTrafficPolicy** impostata su Local (dal sito Web GitHub).
2. Controlla se la policy sul traffico esterno (dal sito Web di Kubernetes) è impostata su Locale:
$ kubectl -n ingress-nginx describe svc ingress-nginx-controller
Riceverai un output simile al seguente:
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>
Nota: l'impostazione Locale elimina i pacchetti che vengono inviati ai nodi Kubernetes che non devono eseguire istanze del controller di ingresso NGINX. Assegna i pod NGINX (dal sito Web Kubernetes) ai nodi per cui desideri pianificare il controller di ingresso NGINX.
3. Controlla il comando iptables che imposta le regole DROP sui nodi che non eseguono istanze del controller di ingresso 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
Imposta l'opzione della policy
Aggiorna l'opzione spec.externalTrafficPolicy su Cluster:
$ kubectl -n ingress-nginx patch service ingress-nginx-controller -p '{"spec":{"externalTrafficPolicy":"Cluster"}}' service/ingress-nginx-controller patched
Di default, i servizi NodePort eseguono la traduzione dell'indirizzo IP di origine (dal sito Web Kubernetes). Per NGINX, ciò significa che l'indirizzo IP di origine di una richiesta HTTP è sempre l'indirizzo IP del nodo Kubernetes che ha ricevuto la richiesta. Se imposti externalTrafficPolicy (.spec.ExternalTrafficPolicy) su Cluster nella specifica del servizio ingress-nginx, il traffico in entrata non conserva l'indirizzo IP di origine. Per ulteriori informazioni, consulta Conservazione dell'indirizzo IP di origine del client (sul sito Web di Kubernetes).
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa