Ingress : Objet Ingress + Contrôleur Ingress
Objet d'entrée :
Tout comme un objet de service, sauf qu'il ne fait rien par lui-même. Un Ingress Object décrit simplement une façon de router le trafic de couche 7 dans votre cluster, en spécifiant des choses comme le chemin de la requête, le domaine de la requête et le service Kubernetes cible, tandis qu'un objet de service crée réellement des services.
Contrôleur d'entrée :
Un service qui :
1. listens on specific ports (usually 80 and 443) for web traffic
2. Listens for the creation, modification, or deletion of Ingress Objects
3. Creates internal L7 routing rules based on these Ingress Objects
Par exemple, le contrôleur d'entrée Nginx pourrait utiliser un service pour écouter sur les ports 80 et 443, puis lire les nouveaux objets Ingress et les analyser dans de nouvelles sections server{} qu'il place dynamiquement dans son fichier nginx.conf.
LoadBalancer : Fournisseur d'équilibreur de charge externe + Type de service
Fournisseur d'équilibreur de charge externe :
Les fournisseurs d'équilibreurs de charge externes sont généralement configurés dans des clouds tels que AWS et GKE et permettent d'attribuer des IP externes par la création d'équilibreurs de charge externes. Cette fonctionnalité peut être utilisée en désignant un service de type "LoadBalancer".
Type de service :
Lorsque le type de service est défini sur LoadBalancer, Kubernetes tente de créer puis de programmer un équilibreur de charge externe avec des entrées pour les pods Kubernetes, leur attribuant ainsi des IP externes.
Le contrôleur de service Kubernetes automatise la création de l'équilibreur de charge externe, les contrôles de santé (si nécessaire), les règles de pare-feu (si nécessaire) et récupère l'IP externe de l'équilibreur de charge nouvellement créé ou configuré qui a été alloué par le fournisseur de nuage et le remplit dans l'objet de service.
Les relations :
Les services de contrôleur d'entrée sont souvent provisionnés en tant que LoadBalancer, afin que les requêtes http et https puissent être proxiées / routées vers des services internes spécifiques via une adresse IP externe.
Cependant, un LoadBalancer n'est pas strictement nécessaire pour cela. En effet, grâce à l'utilisation de hostNetwork ou hostPort, vous pouvez techniquement lier un port de l'hôte à un service (ce qui vous permet de le visiter via l'ip:port externe de l'hôte). Bien qu'officiellement cela ne soit pas recommandé car cela utilise des ports sur le nœud actuel.
Références :
https://kubernetes.io/docs/concepts/configuration/overview/#services
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/
https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/#external-load-balancer-providers
https://kubernetes.io/docs/concepts/services-networking/ingress/