Se Kubernetes Ingress è l'oggetto API che fornisce le regole di routing per gestire l'accesso esterno ai service, il controller Ingress è l'implementazione effettiva dell'API Ingress. Il controller Ingress è di solito un sistema di bilanciamento del carico per indirizzare il traffico esterno verso il cluster Kubernetes ed è responsabile dei servizi di rete L4-L7.
Il livello 4 (L4) si riferisce al livello di connessione dello stack di rete OSI: connessioni esterne con bilanciamento del carico tra i pod, in modo rotatorio. Il livello 7 (L7) si riferisce al livello di applicazione dello stack OSI: connessioni esterne con bilanciamento del carico tra i pod, in base alle richieste. Il livello 7 è spesso preferito, ma è consigliabile selezionare un controller Ingress che soddisfi i requisiti di bilanciamento del carico e routing.
Il controller Ingress è responsabile della lettura delle informazioni sulle risorse Ingress e del trattamento di tali dati di conseguenza. Di seguito è riportato un esempio di risorsa Ingress:
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
spec:
backend:
serviceName:ServiceName
servicePort:<Port Number>
Per analogia, se Kubernetes Ingress è un computer, il controller Ingress è un programmatore che usa il computer e agisce. Inoltre, le regole Ingress agiscono come il manager che ordina al programmatore di svolgere il lavoro utilizzando il computer. Le regole Ingress sono un insieme di regole per l'elaborazione del traffico HTTP in entrata. Un Ingress senza regole invia tutto il traffico a un singolo servizio backend predefinito.
Guardando più a fondo, il controller Ingress è un'applicazione che viene eseguita in un cluster e configura un load balancer HTTP secondo le risorse Ingress. Il load balancer può essere un load balancer software in esecuzione nel cluster o un load balancer hardware o cloud eseguito esternamente. Diversi sistemi di bilanciamento del carico richiedono diverse implementazioni di controller Ingress.
Sul mercato sono disponibili diversi controller Ingress ed è importante scegliere quello giusto per gestire il traffico e il carico in arrivo nel tuo cluster Kubernetes.