Ingress: Ingress Object + Ingress Controller
Eingangsobjekt:
Genau wie ein Serviceobjekt, außer dass es nichts alleine macht. Ein Ingress-Objekt beschreibt lediglich eine Möglichkeit, den Layer 7-Verkehr in Ihren Cluster weiterzuleiten, indem Dinge wie der Anforderungspfad, die Anforderungsdomäne und der Zubernetes-Zieldienst angegeben werden, während ein Dienstobjekt tatsächlich Dienste erstellt
Ingress Controller:
Ein Service, der:
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
Beispielsweise könnte der Nginx Ingress Controller mithilfe eines Dienstes die Ports 80 und 443 abhören, dann neue Ingress-Objekte lesen und sie in neue Serverabschnitte analysieren, die er dynamisch in die Datei nginx.conf einfügt
LoadBalancer: Externer Load Balancer-Anbieter + Diensttyp
Externer Load Balancer-Anbieter:
Externe Load Balancer-Anbieter werden normalerweise in Clouds wie AWS und GKE konfiguriert und bieten eine Möglichkeit, externe IPs durch die Erstellung externer Load Balancer zuzuweisen. Diese Funktionalität kann verwendet werden, indem ein Dienst als Typ "LoadBalancer" festgelegt wird.
Servicetyp:
Wenn der Diensttyp auf LoadBalancer festgelegt ist, versucht Kubernetes, einen externen Load Balancer mit Einträgen für die Kubernetes-Pods zu erstellen und anschließend zu programmieren, um ihnen externe IPs zuzuweisen.
Der Kubernetes Service Controller automatisiert die Erstellung des externen Load Balancers, Integritätsprüfungen (falls erforderlich), Firewall-Regeln (falls erforderlich) und ruft die externe IP des neu erstellten oder konfigurierten LoadBalancer ab, der vom Cloud-Anbieter zugewiesen wurde, und füllt sie im Serviceobjekt.
Beziehungen:
Ingress Controller-Dienste werden häufig als LoadBalancer-Typ bereitgestellt, sodass http- und https-Anforderungen über eine externe IP-Adresse an bestimmte interne Dienste weitergeleitet werden können.
Ein LoadBalancer wird hierfür jedoch nicht unbedingt benötigt. Da Sie mithilfe von hostNetwork oder hostPort einen Port auf dem Host technisch an einen Dienst binden können (sodass Sie ihn über den externen IP-Port des Hosts aufrufen können). Obwohl dies offiziell nicht empfohlen wird, werden Ports auf dem eigentlichen Knoten verbraucht.
Verweise:
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/