OCI Network Load Balancer für Kubernetes-Services vom Typ LoadBalancer bereitstellen
Erfahren Sie, wie Sie mit der Kubernetes-Engine (OKE) einen OCI-Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellen.
In diesem Abschnitt wird beschrieben, wie Sie einen OCI Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellen.
Ein Oracle Cloud Infrastructure Network Load Balancer ist eine Nicht-Proxy-Load-Balancing-Lösung, die Passthrough Load Balancing von Workloads der OSI-Schicht 3 und Schicht 4 (TCP/UDP/ICMP) ausführt. Es bietet eine elastisch skalierbare regionale virtuelle IP-(VIP-)Adresse, die basierend auf dem Clientdatenverkehr ohne Mindest- oder Maximalkonfigurationsanforderung vertikal oder horizontal skaliert werden kann. Außerdem bietet es die Vorteile von High Availability, Quell- und Ziel-IP-Adresse und Portbeibehaltung.
Weitere Informationen zu Oracle Cloud Infrastructure Network Load Balancers finden Sie unter Überblick über Flexible Network Load Balancer.
Durch das Provisioning eines OCI Network Load Balancers für einen Kubernetes-Service vom Typ LoadBalancer können Sie:
- Load Balancing-Traffic mit hohem Durchsatz und geringer Latenz
- Beibehalten von Quell- und Ziel-IP-Adressen und -Ports
- TCP- und UDP-Datenverkehr verarbeiten
Wenn die Kubernetes-Engine einen OCI-Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, werden Sicherheitsregeln, die eingehenden und ausgehenden Traffic zum und vom Subnetz des Network Load Balancers zulassen, standardmäßig nicht automatisch erstellt. Sie müssen entsprechende Sicherheitsregeln definieren, um eingehenden und ausgehenden Traffic zum und vom Subnetz des Load Balancers oder Network Load Balancers zuzulassen. Siehe Sicherheitsregeln für Load Balancer und Network Load Balancer.
Sie können OCI Network Load Balancer-Metriken verwenden, um den Zustand eines OCI Network Load Balancers zu überwachen, der für einen Kubernetes-Service vom Typ LoadBalancer bereitgestellt wird (siehe Network Load Balancer-Metriken).
Annotation für einen OCI Network Load Balancer angeben
Um einen Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitzustellen, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/load-balancer-type: "nlb"
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Beachten Sie, dass lb
der Standardwert der Annotation oci.oraclecloud.com/load-balancer-type
ist. Wenn Sie die Annotation nicht explizit in die Servicedefinition aufnehmen, wird der Standardwert der Annotation verwendet und ein Load Balancer (anstelle eines Network Load Balancers) bereitgestellt.
Anforderungen auf dem empfangenden Knoten beenden
Beim Provisioning eines Network Load Balancers für einen Kubernetes-Service des Typs LoadBalancer können Sie angeben, dass Anforderungen mit der Client-IP-Adresse enden, die in den Headern von IP-Paketen angegeben ist, anstatt mit einem Proxy auf andere Worker-Knoten im Cluster geleitet zu werden.
Standardmäßig werden Anforderungen an andere Worker-Knoten im Cluster weitergeleitet.
Die Angabe, dass Anforderungen an der Client-IP-Adresse beendet werden (anstatt über einen Proxy zu verfügen), kann die Performance in sehr großen Clustern mit Tausenden von Worker-Knoten verbessern, indem der Traffic zwischen Worker-Knoten eliminiert wird. Wenn Sie angeben, dass Anforderungen mit der Client-IP-Adresse beendet werden, können Sie auch die Implementierung vereinfachen und potenzielle Sicherheitsbedenken beseitigen, indem Sie Sicherheitsregeln (in einer Netzwerksicherheitsgruppe (empfohlen) und/oder einer Sicherheitsliste) für die Worker-Knoten im Cluster einrichten, die nur Ingress-Traffic aus dem CIDR-Block des Network Load Balancers zulassen.
Um Anforderungen an die Client-IP-Adresse zu beenden, fügen Sie die folgende Einstellung im Spezifikationsabschnitt der Manifestdatei hinzu:
externalTrafficPolicy: Local
Um Anforderungen an andere Worker-Knoten im Cluster weiterzuleiten, fügen Sie die folgende Einstellung im Spezifikationsabschnitt der Manifestdatei hinzu:
externalTrafficPolicy: Cluster
Beachten Sie, dass Cluster
der Standardwert der Einstellung externalTrafficPolicy
ist. Wenn Sie die Einstellung nicht explizit in die Servicedefinition aufnehmen, wird der Standardwert der Einstellung verwendet.
Wenn externalTrafficPolicy
auf Cluster
gesetzt ist, werden Client-IP-Adressen unabhängig vom Wert der oci-network-load-balancer.oraclecloud.com/is-preserve-source
-Annotation nicht beibehalten. Anforderungen können nicht erfolgreich ausgeführt werden, wenn externalTrafficPolicy
auf Cluster
gesetzt ist und die oci-network-load-balancer.oraclecloud.com/is-preserve-source
-Annotation explizit auf true
oder false
gesetzt ist. Siehe Preserving the Client IP Address.
Um Anforderungen an die Client-IP-Adresse zu beenden, müssen Sie außerdem die folgenden Sicherheitsregeln einrichten:
- Sie müssen eine Sicherheitsregel (in einer Netzwerksicherheitsgruppe (empfohlen) und/oder eine Sicherheitsliste) für die Worker-Knoten im Cluster eingerichtet haben, um Ingress-Traffic vom CIDR-Block, in dem die Clientverbindungen hergestellt werden, zu allen Knotenports (
30000 to 32767
) zuzulassen. Wenn die Anwendung im Internet verfügbar gemacht wird, setzen Sie den Quell-CIDR-Block der Sicherheitsregel auf 0.0.0.0/0. Alternativ können Sie den CIDR-Block der Quelle der Sicherheitsregel auf einen bestimmten CIDR-Block festlegen (z.B. wenn die Clientverbindungen aus einem bestimmten Subnetz stammen).Status Quelle Protokoll/Ziel- Port Beschreibung Zustandsbehaftet 0.0.0.0/0 oder Subnetz-CIDR ALLE/30000-32767 Zulassen, dass Worker-Knoten Verbindungen über OCI Network Load Balancer empfangen. -
Sie müssen die Ingress- und Egress-Sicherheitsregeln für den Network Load Balancer eingerichtet haben, wie unter Sicherheitsregeln für Load Balancer und Network Load Balancer beschrieben.
Beispiel: Im Folgenden finden Sie eine Kubernetes-Servicedefinition zum Beenden von Anforderungen an die Client-IP-Adresse (anstatt über einen Proxy zu verfügen):
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 80
selector:
app: nginx
Beibehalten der Client-IP-Adresse
Wenn Sie einen Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellen, können Sie angeben, ob die Client-IP-Adresse in den Headern von IP-Paketen beibehalten oder die Beibehaltung verhindert werden soll.
Sie haben nur die Möglichkeit, Client-IP-Adressen beizubehalten, wenn Anforderungen an die Client-IP-Adressen beendet werden, die in den IP-Paket-Headern angegeben sind. Das heißt, wenn die Einstellung externalTrafficPolicy
auf Local
gesetzt ist. Wenn externalTrafficPolicy
auf Cluster
gesetzt ist, werden die Client-IP-Adressen nicht beibehalten. Siehe Anforderungen auf dem empfangenden Knoten beenden.
Um die Beibehaltung von Client-IP-Adressen zu verhindern, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "false"
Um die Client-IP-Adresse beizubehalten, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "true"
Beachten Sie, dass true
der Standardwert der Annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
ist. Wenn Sie die Annotation nicht explizit in die Servicedefinition aufnehmen, wird der Standardwert der Annotation verwendet.
Wenn externalTrafficPolicy
auf Cluster
gesetzt ist, werden Client-IP-Adressen unabhängig vom Wert der oci-network-load-balancer.oraclecloud.com/is-preserve-source
-Annotation nicht beibehalten. Anforderungen können nicht erfolgreich ausgeführt werden, wenn externalTrafficPolicy
auf Cluster
gesetzt ist und die oci-network-load-balancer.oraclecloud.com/is-preserve-source
-Annotation explizit auf true
oder false
gesetzt ist. Fügen Sie daher die Annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
nicht hinzu, wenn externalTrafficPolicy
auf Cluster
gesetzt ist.
Sie können Client-IP-Adressen beibehalten, wenn Sie verwaltete Knotenpools verwenden, jedoch nicht, wenn Sie virtuelle Knotenpools verwenden.
Um die Client-IP-Adresse beizubehalten, müssen Sie auch die folgenden Sicherheitsregeln einrichten:
- Sie müssen eine Sicherheitsregel (in einer Netzwerksicherheitsgruppe (empfohlen) und/oder eine Sicherheitsliste) für die Worker-Knoten im Cluster eingerichtet haben, um Ingress-Traffic vom CIDR-Block, in dem die Clientverbindungen hergestellt werden, zu allen Knotenports (
30000 to 32767
) zuzulassen. Wenn die Anwendung im Internet verfügbar gemacht wird, setzen Sie den Quell-CIDR-Block der Sicherheitsregel auf 0.0.0.0/0. Alternativ können Sie den CIDR-Block der Quelle der Sicherheitsregel auf einen bestimmten CIDR-Block festlegen (z.B. wenn die Clientverbindungen aus einem bestimmten Subnetz stammen).Status Quelle Protokoll/Ziel- Port Beschreibung Zustandsbehaftet 0.0.0.0/0 oder Subnetz-CIDR ALLE/30000-32767 Zulassen, dass Worker-Knoten Verbindungen über OCI Network Load Balancer empfangen. -
Sie müssen die Ingress- und Egress-Sicherheitsregeln für den Network Load Balancer eingerichtet haben, wie unter Sicherheitsregeln für Load Balancer und Network Load Balancer beschrieben.
Beispiel: Die folgende Kubernetes-Servicedefinition verhindert die Beibehaltung der Client-IP-Adresse:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
oci-network-load-balancer.oraclecloud.com/is-preserve-source: "false"
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 80
selector:
app: nginx
Bereitstellen von TCP- und UDP-Anwendungen
Wenn Kubernetes Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie den vom Listener akzeptierten Traffictyp definieren, indem Sie das Protokoll angeben, auf dem der Listener Verbindungsanforderungen akzeptiert.
Wenn Sie nicht explizit ein Protokoll angeben, wird "TCP" als Standardwert verwendet.
Um das Listener-Protokoll explizit anzugeben, wenn Kubernetes Engine einen Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellt, fügen Sie die folgende Einstellung im Spezifikationsabschnitt der Manifestdatei hinzu:
protocol: <value>
Hierbei ist <value>
das Protokoll, das den Traffictyp definiert, der vom Listener akzeptiert wird. Beispiel: "UDP". Gültige Protokolle sind "UDP" und "TCP".
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
type: LoadBalancer
ports:
- port: 80
protocol: UDP
selector:
app: nginx
Backend-Set-Policy angeben
Wenn die Kubernetes-Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie eine Policy für das Backend-Set definieren, um anzugeben, wie eingehender Traffic an die Backend-Server verteilt werden soll.
Weitere Informationen finden Sie unter Backend-Set-Policys angeben.
Verwaltungsoptionen für Sicherheitslisten beim Provisioning eines OCI Network Load Balancers angeben
Es können Skalierbarkeits- und andere Probleme auftreten, wenn Sie das Kubernetes-Feature zur Verwaltung von Sicherheitslisten in komplexen Deployments und mit Tools wie Terraform verwenden. Daher empfiehlt Oracle, das Kubernetes-Feature zur Verwaltung von Sicherheitslisten nicht in Produktionsumgebungen zu verwenden.
Beachten Sie auch, dass die Möglichkeit, Sicherheitslisten zur Verwaltung von Sicherheitsregeln zu verwenden, in einem zukünftigen Release veraltet ist. Aus diesem Grund empfiehlt Oracle die Verwendung von Netzwerksicherheitsgruppen (NSGs) und der Annotation oci.oraclecloud.com/security-rule-management-mode
(siehe Sicherheitsregelverwaltungsoptionen für Load Balancer und Network Load Balancer angeben).
Mit dem Feature zur Verwaltung von Sicherheitslisten können Sie konfigurieren, wie Sicherheitslistenregeln für einen Oracle Cloud Infrastructure-Network Load Balancer verwaltet werden, den Kubernetes Engine für einen Kubernetes-Service des Typs LoadBalancer bereitstellt. Dieses Feature ist hilfreich, wenn Sie neu in Kubernetes sind, oder für einfache Deployments.
Um anzugeben, wie Sicherheitslisten vom Kubernetes-Feature zur Verwaltung von Sicherheitslisten verwaltet werden, wenn die Kubernetes-Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
oci-network-load-balancer.oraclecloud.com/security-list-management-mode: <value>
Hierbei ist <value>
einer der folgenden Werte:
"None"
: (Standard und empfohlen) Es ist keine Verwaltung der Sicherheitsliste aktiviert. Sie müssen eine Sicherheitsregel einrichten, die eingehenden Traffic an die entsprechenden Ports für Knotenportbereiche, den Port für den kube-proxy-Zustand und die Health-Check-Portbereiche zulässt. Außerdem müssen Sie Sicherheitsregeln einrichten, um eingehenden Traffic an Network Load Balancer zuzulassen (siehe Sicherheitsregeln für Load Balancer und Network Load Balancer)."All"
: Alle erforderlichen Sicherheitslistenregeln für Network Load Balancer-Services werden verwaltet."Frontend"
: Nur Sicherheitslistenregeln für Ingress für Network Load Balancer-Services werden verwaltet. Sie müssen eine Sicherheitsregel einrichten, die eingehenden Traffic an die entsprechenden Ports für Knotenportbereiche, den Port für den kube-proxy-Zustand und die Health-Check-Portbereiche zulässt.
Oracle empfiehlt, dass Sie oci-network-load-balancer.oraclecloud.com/security-list-management-mode
explizit auf None
setzen.
Wenn Sie in Clustern mit verwalteten Knoten keinen Verwaltungsmodus explizit angeben, ist die Sicherheitslistenverwaltung nicht aktiviert (entspricht "None"
). In Clustern mit virtuellen Knoten ist die Sicherheitslistenverwaltung nie aktiviert, und Sie müssen Sicherheitsregeln immer manuell konfigurieren (entspricht "None"
).
Beachten Sie, dass die Anzahl der Ingress- und Egress-Regeln, die in einer Sicherheitsliste zulässig sind, begrenzt ist (siehe Limits für Sicherheitslisten). Wenn die Anzahl der Ingress- oder Egress-Regeln das Limit überschreitet und <value>
auf "All"
oder "Frontend"
gesetzt ist, verläuft das Erstellen oder Aktualisieren des Load Balancers nicht erfolgreich.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
oci-network-load-balancer.oraclecloud.com/security-list-management-mode: "Frontend"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx