GKE On-Prem verwendet Kubernetes-Netzwerkkonzepte wie Service und Ingress. In diesem Dokument wird die standardmäßige Konfiguration von GKE On-Prem-Netzwerken beschrieben.
Clusterdienstvorgänge und Inselmodus
GKE On-Prem verwendet eine Inselmodus-Konfiguration, bei der Pods innerhalb eines Clusters direkt miteinander kommunizieren können, aber außerhalb des Clusters nicht erreichbar sind. Diese Konfiguration bildet eine "Insel" innerhalb des Netzwerks, die nicht mit dem externen Netzwerk verbunden ist. Cluster verwenden BGP (über das Calico CNI-Plug-in), um ein vollständiges Knoten-zu-Knoten-Mesh über die Clusterknoten zu bilden, sodass Pod andere Pods im Cluster direkt erreichen kann.
Der gesamte ausgehende Traffic vom Pod zu Zielen außerhalb des Clusters wird durch die Knoten-IP-Adresse NAT-fähig. GKE On-Prem enthält einen L7-Load-Balancer mit einem Envoy-basierten Ingress-Controller, der Ingress-Objektregeln für ClusterIP-Dienste verarbeitet, die im Cluster bereitgestellt werden. Der Ingress-Controller selbst wird als NodePort-Service im Cluster bereitgestellt.
Der Ingress-NodePort-Service kann über einen L3/L4-F5-Load-Balancer erreicht werden. Bei der Installation wird eine virtuelle IP-Adresse (VIP) mit den Ports 80 und 443 auf dem Load-Balancer konfiguriert. Die VIP verweist auf die Ports im NodePort-Service für den Ingress-Controller. So können externe Clients auf Services im Cluster zugreifen.
Nutzercluster können Services vom Typ LoadBalancer ausführen, solange in der Service-Spezifikation ein loadBalancerIP-Feld konfiguriert ist. Geben Sie im Feld loadBalancerIP
die VIP ein, die Sie verwenden möchten.
Diese wird in F5 konfiguriert und verweist auf die NodePorts des Service.
Als Alternative zur Verwendung des F5-Load-Balancers können Sie den manuellen Load-Balancing-Modus aktivieren.
Wenn Sie manuelles Load-Balancing verwenden, können Sie keine Services vom Typ LoadBalancer
ausführen. Stattdessen können Sie Services des Typs NodePort
erstellen und Ihren Load-Balancer manuell konfigurieren, um sie als Back-Ends zu verwenden. Außerdem können Sie Services mithilfe eines Ingress-Objekts für externe Clients verfügbar machen.
Netzwerkarchitektur
Abbildung: GKE On-Prem-Netzwerk.
- Knoten-IP-Adressen
- DHCP oder statisch zugewiesene IP-Adressen für die Knoten (alternativ als virtuelle Maschinen oder VMs bezeichnet). Müssen innerhalb des Rechenzentrums routingfähig sein. Sie können manuell statische IP-Adressen zuweisen.
- Pod-CIDR-Block
- Nicht routingfähiger CIDR-Block für alle Pods im Cluster. Aus diesem Bereich werden kleinere /24-Bereiche pro Knoten zugewiesen. Wenn Sie einen Cluster mit N Knoten benötigen, achten Sie darauf, dass dieser Block groß genug ist, um N /24-Blöcke zu unterstützen.
- Services-CIDR-Block
- Im Inselmodus, ähnlich wie der Pod-CIDR-Block. Wird also nur im Cluster verwendet. Jeder private CIDR-Block, der sich nicht mit den Knoten, VIPs oder dem Pod-CIDR-Block überschneidet. Sie können dieselbe Blockierung unter Clustern teilen. Die Größe der Blockierung bestimmt die Anzahl der Dienste. Eine Dienst-IP wird für den Ingress-Dienst benötigt und zehn oder mehr IP-Adressen für Kubernetes-Dienste wie Cluster-DNS usw.
- Dienst-VIPs
- Anzahl N der routingfähigen IP-Adressen, die auf F5 für L4-Ingress konfiguriert werden sollen, wenn Sie einen Service verfügbar machen. Diese VIPs sind dieselben wie die
loadBalancerIP
-Werte, die Sie beim Erstellen von Services vom Typ LoadBalancer festlegen. - VIP der Steuerungsebene
- Eine Routable-IP-Adresse, die auf dem F5-Load-Balancer für den Kubernetes API-Server konfiguriert werden soll.
- Ingress-VIP
- Eine Routable-IP-Adresse, die auf dem F5-Load-Balancer für L7-Ingress in Verbindung mit den auf jedem Knoten ausgeführten Envoy-Proxys konfiguriert werden soll.
Konfigurationsoptionen für das Netzwerk
Sie haben mehrere Möglichkeiten, das Netzwerk Ihrer Cluster zu konfigurieren:
- Sie können ein globales vCenter-Netzwerk auswählen oder ein anderes vCenter-Netzwerk für Administrator- und Nutzercluster verwenden.
- Sie können einen HTTP-Proxy verwenden und auswählen, welche Adressen Sie von der Proxysuche ausschließen möchten.
- Sie können die Zuweisung über DHCP oder statische IP-Adressen auswählen.
- Sie können den integrierten oder manuellen Load-Balancing-Modus auswählen.
Während der Installation geben Sie Ihre Einstellungen in der GKE On-Prem-Konfigurationsdatei an.
vCenter-Netzwerkkonfigurationen
Das Feld network
der Konfiguration bestimmt, welches vCenter-Netzwerk für die Cluster verwendet wird:
- Das globale Feld
vcenter.network
gibt ein bestimmtes Netzwerk an. admincluster.vcenter.network
überschreibt das globale Feld und gibt das Netzwerk an, das für den Administratorcluster verwendet werden soll.usercluster.vcenter.network
überschreibt das globale Feld und gibt das Netzwerk an, das für den Nutzercluster verwendet werden soll.
Beispiel: Zugriff auf eine Webanwendung über URL
Angenommen, in Ihrem Cluster wird eine Gästebuch-Webanwendung als Deployment mit dem Namen frontend
ausgeführt. Sie möchten eine Verbindung zur Anwendung über die URL www.guestbook.com
herstellen. Sie müssen die URL des Deployments zuordnen, das in Ihrem Cluster ausgeführt wird. Dazu können Sie ein Kubernetes Ingress-Objekt verwenden.
Erstellen Sie zuerst einen Platzhalter-DNS-Eintrag für *.guestbook.com
, der auf die vorhandene Ingress-VIP des Clusters verweist:
*.guestbook.com A [INGRESS_VIP]
Als Nächstes müssen Sie einen Service für das Front-End-Deployment erstellen. Durch das Ausführen von kubectl
expose
wird ein Service erstellt, der die Pods des Deployments logisch gruppiert und für sie eine gemeinsame IP-Adresse innerhalb des Clusters bereitstellt:
kubectl expose deployment frontend
Dadurch wird ein Service vom Typ ClusterIP erstellt:
apiVersion: v1 kind: Service metadata: labels: app: guestbook name: frontend spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: guestbook type: ClusterIP
Sie müssen die URL www.guestbook.com
dem soeben erstellten Front-End-Service zuordnen. Wenn Sie das Ingress-Objekt unten anwenden, wird diese Zuordnung erstellt:
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: frontend labels: app: guestbook spec: rules: - host: www.guestbook.com http: paths: - backend: serviceName: frontend # name of the frontend Service servicePort: 80
Wenn Sie nun www.guestbook.com aufrufen, wird die Webanwendung in Ihrem Browser geöffnet.
So funktioniert das genau:
- Da Sie diesen Platzhalter-DNS-Eintrag erstellt haben, greifen Sie beim Aufrufen der URL auf die Ingress-VIP des Clusters zu.
- Der Cluster sucht anhand des Hostnamens nach dem richtigen Ingress-Objekt, in diesem Fall www.guestbook.com.
- Der Traffic wird an einen Front-End-Pod weitergeleitet.
Beispiel: Zugriff auf eine Webanwendung über die IP-Adresse
Wenn es sich bei Ihrer Anwendung nicht um eine Webanwendung handelt oder Sie Netzwerkbeschränkungen haben, können Sie eine VIP speziell für Ihren Service erstellen. Dazu können Sie einen Kubernetes-Service vom Typ LoadBalancer verwenden.
Der folgende Service erstellt eine VIP speziell für die guestbook
-Anwendung:
apiVersion: v1 kind: Service metadata: labels: app: guestbook name: frontend spec: ports: - port: 80 protocol: TCP targetPort: 80 selector: app: guestbook type: LoadBalancer loadBalancerIP: [IP_ADDRESS]
Nachdem Sie diesen Service angewendet haben, sehen Sie die VIP in Ihrer F5-Konsole und im Menü Pools der Konsole sehen Sie die IP-Adressen der Knoten. Wenn Sie die IP-Adresse aufrufen, wird die Anwendung geladen.