Ingress: Objeto do Ingress + Controlador do Ingress
Objeto de entrada:
Assim como um Objeto de Serviço, exceto que ele não faz nada por si só. Um Objeto do Ingress apenas descreve uma maneira de rotear o tráfego da Camada 7 para o cluster, especificando coisas como o caminho da solicitação, o domínio da solicitação e o serviço kubernetes de destino, enquanto um objeto de serviço realmente cria serviços
Controlador de ingresso:
Um serviço que:
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
Por exemplo, o Nginx Ingress Controller, poderia usar um serviço para escutar nas portas 80 e 443 e, em seguida, ler novos objetos do Ingress e analisá-los em novas seções do servidor {} que ele coloca dinamicamente no nginx.conf
LoadBalancer: provedor de balanceador de carga externo + tipo de serviço
Provedor de balanceador de carga externo:
Os provedores de balanceador de carga externo geralmente são configurados em nuvens como AWS e GKE e fornecem uma maneira de atribuir IPs externos por meio da criação de balanceadores de carga externos. Essa funcionalidade pode ser usada designando um serviço como o tipo "LoadBalancer".
Tipo de serviço:
Quando o tipo de serviço é definido como LoadBalancer, o Kubernetes tenta criar e programar um balanceador de carga externo com entradas para os pods do Kubernetes, atribuindo-lhes IPs externos.
O controlador de serviço Kubernetes automatiza a criação do balanceador de carga externo, verificações de integridade (se necessário), regras de firewall (se necessário) e recupera o IP externo do LoadBalancer recém-criado ou configurado que foi alocado pelo provedor de nuvem e o preenche no diretório objeto de serviço.
Relacionamentos:
Os serviços do controlador de ingresso geralmente são provisionados como tipo LoadBalancer, para que solicitações http e https possam ser enviadas por proxy / roteadas para serviços internos específicos por meio de um ip externo.
No entanto, um LoadBalancer não é estritamente necessário para isso. Como, através do uso de hostNetwork ou hostPort, é possível vincular tecnicamente uma porta no host a um serviço (permitindo visitá-la através dos hosts ip: port externos). Embora oficialmente isso não seja recomendado, pois utiliza portas no nó real.
Referências:
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/