Hoe wordt het verkeer van binnen het cluster naar de ingress omgeleid?
sobes.tech AI
Antwoord van AI
Om verkeer van binnen de cluster naar Ingress te leiden, wordt de DNS-naam van de Ingress Controller-service gebruikt. In de standaardconfiguratie wordt de Ingress Controller uitgerold als een LoadBalancer- of NodePort-service.
-
Service Discovery: De applicatie binnen de cluster gebruikt de DNS-naam van de Service, die de Ingress Controller exposeert (zichtbaar maakt). Bijvoorbeeld
nginx-ingress-controller.ingress-nginx.svc.cluster.local, als nginx-ingress wordt gebruikt met de bijbehorende Service-naam. -
Service IP/ClusterIP: De DNS-server van de Kubernetes-cluster (bijvoorbeeld CoreDNS) lost deze DNS-naam op naar de ClusterIP van de Ingress Controller Service.
-
kube-proxy:
kube-proxyop de node waar de applicatie draait, onderschept het verkeer dat gericht is op de ClusterIP van de Ingress Controller Service. -
iptables/ipvs:
kube-proxygebruiktiptables- ofipvs-regels om het verkeer te routeren naar een van de pods van de Ingress Controller. -
Verwerking in de Ingress Controller: De pods van de Ingress Controller ontvangen het verkeer en sturen het volgens de regels van de Ingress-resources door naar de juiste service binnen de cluster.
Voorbeeld van een verzoek vanuit een pod:
# Verzoek aan de service via Ingress, gebruikmakend van interne DNS
curl http://my-app.example.com
Hier wordt my-app.example.com door de DNS-server van de cluster opgelost naar de ClusterIP van de Ingress Controller Service, mits de juiste records zijn geconfigureerd of als de Ingress Controller is ingesteld om dergelijke verzoeken rechtstreeks te verwerken (minder gebruikelijk voor intern verkeer). Intern verkeer verwijst meestal naar de service via zijn DNS-naam. Als je expliciet via Ingress vanuit de binnenkant van de cluster wilt gaan, moet je ervoor zorgen dat de Ingress Controller bereikbaar is via ClusterIP of lokaal IP van de pods en dat de DNS-registratie of het routeringsmechanisme naar hem wijst.
Het meest gebruikelijke patroon voor communicatie tussen services binnen de cluster is directe toegang tot de service via zijn DNS-naam (<service-naam>.<namespace>.svc.cluster.local), waarbij Ingress wordt vermeden. Het doorsturen van verkeer naar Ingress vanuit de binnenkant van de cluster is meestal nodig voor testen of specifieke routeringscenario's.