Load Balancer und Network Load Balancer konfigurieren
Erfahren Sie, wie Sie die Oracle Cloud Infrastructure-Load Balancer und Network Load Balancer definieren, die von der Kubernetes-Engine (OKE) für einen Kubernetes-Service des Typs LoadBalancer bereitgestellt werden.
Interne Load Balancer erstellen
Sie können Oracle Cloud Infrastructure Load Balancer und Network Load Balancer erstellen, um den Zugriff auf Services zu kontrollieren, die in einem Cluster ausgeführt werden:
- Wenn Sie ein Cluster im Workflow "Benutzerdefinierte Erstellung" erstellen, wählen Sie ein vorhandenes VCN mit den Netzwerkressourcen aus, die von dem neuen Cluster verwendet werden sollen. Wenn Sie den Traffic in das VCN mit einem Load Balancer oder Network Load Balancer kontrollieren möchten, wählen Sie ein vorhandenes öffentliches oder privates Subnetz in diesem VCN als Host aus.
- Wenn Sie ein Cluster im Workflow "Schnellerstellung" erstellen, enthält das automatisch erstellte VCN ein öffentliches regionales Subnetz zum Hosten eines Load Balancers oder eines Network Load Balancers. Wenn Sie einen Load Balancer oder einen Network Load Balancer in einem privaten Subnetz hosten möchten, können Sie dem VCN später ein privates Subnetz hinzufügen.
Alternativ können Sie einen internen Kubernetes-Service des Typs LoadBalancer (oft auch als "interner Load Balancer" bezeichnet) in einem Cluster definieren, damit andere Programme, die im selben VCN wie das Cluster ausgeführt werden, auf Services im Cluster zugreifen können. Ein interner Load Balancer kann bereitgestellt werden:
- als Load Balancer oder als Network Load Balancer
- mit einer öffentlichen IP-Adresse oder mit einer privaten IP-Adresse (von dem Load-Balancer-Service oder dem Network Load Balancer-Service zugewiesen)
- in einem öffentlichen Subnetz oder in einem privaten Subnetz
Ein Load Balancer oder Network Load Balancer mit einer öffentlichen IP-Adresse wird als öffentlich bezeichnet. Ein öffentlicher Load Balancer oder Network Load Balancer kann in einem öffentlichen Subnetz oder in einem privaten Subnetz gehostet werden.
Ein Load Balancer oder Network Load Balancer mit einer privaten IP-Adresse wird als privat bezeichnet. Ein privater Load Balancer oder Network Load Balancer kann in einem öffentlichen Subnetz oder in einem privaten Subnetz gehostet werden.
Standardmäßig werden interne Load Balancer mit öffentlichen IP-Adressen bereitgestellt und in öffentlichen Subnetzen gehostet.
Weitere Informationen:
- Informationen zu öffentlichen und privaten Load Balancer von Oracle Cloud Infrastructure finden Sie unter Load-Balancer-Typen.
- Informationen zu öffentlichen und privaten Network Load Balancern von Oracle Cloud Infrastructure finden Sie unter Network Load Balancer-Typen
Um einen internen Load Balancer als OCI-Load Balancer mit einer privaten IP-Adresse zu erstellen, die in dem für Load Balancer beim Erstellen des Clusters angegebenen Subnetz gehostet wird, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-internal: "true"
Um einen internen Load Balancer als OCI-Load Balancer mit einer privaten IP-Adresse zu erstellen, die in einem alternativen Subnetz gehostet wird, das zu dem für Load Balancer beim Erstellen des Clusters angegebenen Subnetz gehostet wird, fügen Sie die beiden folgenden Annotationen im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
Hierbei ist ocid1.subnet.oc1..aaaaaa....vdfw
die OCID des alternativen Subnetzes. Das alternative Subnetz kann ein privates oder ein öffentliches Subnetz sein.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-internal: "true"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
type: LoadBalancer
ports:
- port: 8100
selector:
app: nginx
Um einen internen Network Load Balancer als OCI Network Load Balancer mit einer privaten IP-Adresse zu erstellen, die in dem Subnetz gehostet wird, das beim Erstellen des Clusters für Load Balancer angegeben wurde, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/internal: "true"
Um einen internen Network Load Balancer als OCI Network Load Balancer mit einer privaten IP-Adresse zu erstellen, der in einem alternativen Subnetz gehostet wird, das dem für Load Balancer beim Erstellen des Clusters angegebenen Subnetz entspricht, fügen Sie beide der folgenden Annotationen im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/internal: "true"
oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"
Hierbei ist ocid1.subnet.oc1..aaaaaa....vdfw
die OCID des privaten Subnetzes. Das alternative Subnetz kann ein privates oder ein öffentliches Subnetz sein.
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/internal: "true"
oci-network-load-balancer.oraclecloud.com/subnet: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Reservierte öffentliche IP-Adressen angeben
Wenn ein Kubernetes-Service des Typs LoadBalancer in einem Cluster bereitgestellt wird, erstellt die Kubernetes-Engine einen öffentlichen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer, um Traffic in das Cluster zu akzeptieren. Standardmäßig wird dem öffentlichen Load Balancer oder Network Load Balancer von Oracle Cloud Infrastructure eine ephemere öffentliche IP-Adresse zugewiesen. Eine ephemere öffentliche IP-Adresse ist jedoch temporär und dauert nur für die Lebensdauer des öffentlichen Load Balancers oder Network Load Balancers.
Wenn der von der Kubernetes-Engine erstellte öffentliche Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer dasselbe Deployment der öffentlichen IP-Adresse nach dem Deployment aufweisen soll, können Sie ihm eine reservierte öffentliche IP-Adresse aus dem Pool der reservierten öffentlichen IP-Adressen zuweisen. Weitere Informationen zum Erstellen und Anzeigen reservierter öffentlicher IP-Adressen finden Sie unter Öffentliche IP-Adressen.
Um dem von Kubernetes Engine erstellten öffentlichen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer eine reservierte öffentliche IP-Adresse zuzuweisen, fügen Sie die Eigenschaft LoadBalancerIP
im Spezifikationsabschnitt der Manifestdatei hinzu, die den Service vom Typ LoadBalancer definiert, und geben Sie die reservierte öffentliche IP-Adresse an.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
spec:
loadBalancerIP: 144.25.97.173
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "nlb"
spec:
loadBalancerIP: 144.25.97.173
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Beachten Sie Folgendes:
- Wenn Sie die Eigenschaft
loadBalancerIP
desLoadBalancer
-Service festlegen, können Sie die IP-Adresse des öffentlichen Oracle Cloud Infrastructure-Load Balancers oder Network Load Balancers, den Kubernetes Engine erstellt, später nicht direkt ändern. Wenn Sie die IP-Adresse ändern möchten, löschen Sie den ServiceLoadBalancer
, geben Sie eine andere reservierte öffentliche IP-Adresse in der Manifestdatei an, und stellen Sie den ServiceLoadBalancer
erneut bereit. - Wenn Sie die Eigenschaft
loadBalancerIP
desLoadBalancer
-Service nicht festlegen, können Sie die IP-Adresse des öffentlichen Oracle Cloud Infrastructure-Load Balancers oder Network Load Balancers, den Kubernetes Engine von einer flüchtigen IP-Adresse erstellt, später nicht direkt in eine reservierte öffentliche IP-Adresse umschalten. Wenn Sie die flüchtige IP-Adresse in eine reservierte öffentliche IP-Adresse umschalten möchten, löschen Sie den Service vom Typ LoadBalancer, setzen Sie die EigenschaftloadBalancerIP
auf eine reservierte öffentliche IP-Adresse in der Manifestdatei, und stellen Sie den Service vom Typ LoadBalancer erneut bereit. - Sie können den Service vom Typ LoadBalancer löschen und die reservierte öffentliche IP-Adresse für andere Zwecke freigeben (z.B. um ihn einem anderen Service vom Typ LoadBalancer zuzuweisen).
- Sie können keine reservierte öffentliche IP-Adresse für einen Service vom Typ LoadBalancer angeben, wenn dieselbe IP-Adresse bereits einer anderen Ressource zugewiesen ist (z.B. einer Compute-Instanz oder einem anderen Service vom Typ LoadBalancer).
- Sie können die Eigenschaft
loadBalancerIP
nicht der Manifestdatei für einen internen Load-Balancer-Service hinzufügen (d.h. einer Manifestdatei, die die Annotationservice.beta.kubernetes.io/oci-load-balancer-internal: "true"
oderoci-network-load-balancer.oraclecloud.com/internal: "true"
enthält). -
Standardmäßig wird erwartet, dass die reservierte öffentliche IP-Adresse, die Sie als Eigenschaft
loadBalancerIP
eines Service des Typs LoadBalancer in der Manifestdatei angeben, eine Ressource in demselben Compartment wie das Cluster ist. Wenn Sie eine reservierte öffentliche IP-Adresse in einem anderen Compartment angeben möchten:- für öffentliche Load Balancer die folgende Policy zum Mandanten hinzufügen:
ALLOW any-user to read public-ips in tenancy where request.principal.type = 'cluster' ALLOW any-user to manage floating-ips in tenancy where request.principal.type = 'cluster'
- Fügen Sie für Network Load Balancer die folgende Policy zum Mandanten hinzu:
ALLOW any-user to use private-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'} ALLOW any-user to manage public-ips in TENANCY where ALL {request.principal.type = 'cluster', request.principal.compartment.id = 'target.compartment.id'}
- für öffentliche Load Balancer die folgende Policy zum Mandanten hinzufügen:
Angeben von Netzwerksicherheitsgruppen (empfohlen)
Mit Netzwerksicherheitsgruppen (NSGs) von Oracle Cloud Infrastructure können Sie den Traffic in und aus Ressourcen sowie zwischen Ressourcen kontrollieren. Die für eine NSG definierten Sicherheitsregeln stellen sicher, dass alle Ressourcen in dieser NSG denselben Sicherheitsstatus aufweisen. Weitere Informationen finden Sie unter Netzwerksicherheitsgruppen.
Mit NSGs können Sie den Zugriff auf den Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer kontrollieren, den Kubernetes Engine für einen Kubernetes-Service des Typs LoadBalancer bereitstellt.
Wenn Sie NSGs zur Kontrolle des Zugriffs verwenden, müssen entsprechende Sicherheitsregeln vorhanden sein, um eingehenden und ausgehenden Traffic zum und vom Subnetz des Load Balancers oder des Network Load Balancers zuzulassen. Siehe Sicherheitsregeln für Load Balancer und Network Load Balancer.
Wenn Sie NSGs verwenden, um den Zugriff auf Load Balancer oder Network Load Balancer zu kontrollieren:
- Sie können die NSGs und Sicherheitsregeln vom OCI-Cloud-Controller-Manager vollständig für Sie verwalten lassen (siehe Sicherheitsregelverwaltungsoptionen für Load Balancer und Network Load Balancer angeben).
- Sie können die NSGs und Sicherheitsregeln selbst verwalten und den Load Balancer oder Network Load Balancer zu den vorhandenen NSGs hinzufügen (wie in diesem Abschnitt beschrieben).
- Der OCI-Cloud-Controller-Manager kann einige Sicherheitsregeln in einer NSG verwalten, während Sie andere Sicherheitsregeln in einer anderen NSG verwalten.
Um den Zugriff mit einer von Ihnen verwalteten NSG zu kontrollieren, nehmen Sie Annotationen in die Manifestdatei auf, um die NSG anzugeben, der Sie den Load Balancer oder Network Load Balancer hinzufügen möchten.
Um den von der Kubernetes-Engine erstellten Oracle Cloud Infrastructure-Load Balancer zu einer von Ihnen verwalteten NSG hinzuzufügen, fügen Sie die folgende Anmerkung im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
Dabei ist <nsg-ocid>
die OCID einer vorhandenen NSG.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Um den von der Kubernetes-Engine erstellten Oracle Cloud Infrastructure-Network Load Balancer zu einer von Ihnen verwalteten NSG hinzuzufügen, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Anmerkung hinzu:
oci-network-load-balancer.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
Dabei ist <nsg-ocid>
die OCID einer vorhandenen NSG.
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/oci-network-security-groups: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....vdfw"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Beachten Sie Folgendes:
- Die angegebene NSG muss sich im selben VCN wie der Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer befinden.
- Wenn die angegebene NSG zu einem anderen Compartment als dem Cluster gehört, müssen Sie eine Policy-Anweisung wie die folgende in eine IAM-Policy aufnehmen:
ALLOW any-user to use network-security-groups in TENANCY where ALL { request.principal.type = 'cluster' }
Wenn Sie diese Policy-Anweisung als zu permissiv erachten, können Sie die Berechtigung einschränken, das Compartment, zu dem die NSG gehört, explizit anzugeben und/oder das Cluster explizit anzugeben. Beispiel:
Allow any-user to use network-security-groups in compartment <compartment-ocid> where all { request.principal.id = '<cluster-ocid>' }
- Sie können bis zu fünf NSGs in einer kommagetrennten Liste im folgenden Format angeben:
oci.oraclecloud.com/oci-network-security-groups: "<nsg1-ocid>,<nsg2-ocid>,<nsg3-ocid>,<nsg4-ocid>,<nsg5-ocid>"
- Um einen Load Balancer oder Network Load Balancer aus einer NSG zu entfernen oder die NSG zu ändern, in der sich der Load Balancer oder Network Load Balancer befindet, aktualisieren Sie die Annotation, und wenden Sie das Manifest erneut an.
-
Wenn Sie den Zugriff auf einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer mit einer von Ihnen verwalteten NSG kontrollieren möchten, empfiehlt Oracle, das Kubernetes-Sicherheitslistenmanagement zu deaktivieren, indem Sie eine der folgenden Annotationen im Metadatenabschnitt der Manifestdatei für den Load Balancer bzw. Network Load Balancer hinzufügen:
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "None"
oci-network-load-balancer.oraclecloud.com/security-list-management-mode: "None"
Alternativ können Sie die folgende äquivalente Anmerkung hinzufügen:
oci.oraclecloud.com/security-rule-management-mode: "None"
Wenn Sie der Empfehlung folgen und die Anmerkung hinzufügen, ist die Verwaltung der Kubernetes-Sicherheitsliste nicht aktiviert. Sie müssen NSGs mit Ingress- und Egress-Sicherheitsregeln für Knotenpools und den Kubernetes-API-Endpunkt einrichten (weitere Informationen finden Sie unter Sicherheitsregelkonfiguration in Netzwerksicherheitsgruppen und/oder Sicherheitslisten und Beispielkonfigurationen für Netzwerkressourcen). Außerdem müssen Sie NSGs mit Ingress- und Egress-Sicherheitsregeln für den Health-Port "kube-proxy", für den Health-Check-Portbereich und für Load Balancer einrichten.
Sicherheitsregelverwaltungsoptionen für Load Balancer und Network Load Balancer angeben
Sicherheitsregeln steuern den Zugriff auf die Oracle Cloud Infrastructure-Load Balancer und Network Load Balancer, die für Kubernetes-Services des Typs LoadBalancer bereitgestellt werden. Die Sicherheitsregeln können wie folgt verwaltet (d.h. erstellt, aktualisiert und gelöscht) werden:
- In einer Netzwerksicherheitsgruppe oder NSG (empfohlen) Die Sicherheitsregeln in einer NSG gelten für alle Kubernetes-Ressourcen, die der NSG hinzugefügt werden. Daher können NSGs eine fein granulierte Zugriffskontrolle für einzelne Ressourcen bereitstellen.
- In einer Sicherheitsliste. Die Sicherheitsregeln in einer Sicherheitsliste gelten für alle Kubernetes-Ressourcen in einem Subnetz. Sicherheitslisten bieten keine feingranulierte Zugriffskontrolle für einzelne Ressourcen im Subnetz.
Wichtige Informationen zur Funktionsweise von Sicherheitsregeln und einen allgemeinen Vergleich von Sicherheitslisten und Netzwerksicherheitsgruppen finden Sie unter Sicherheitsregeln.
Wenn Sicherheitsregeln in Sicherheitslisten verwaltet werden, können Sicherheitskonfiguration und -verwaltung kompliziert werden, wenn die Infrastruktur komplex ist und Tools wie Terraform verwendet werden. Beachten Sie auch, dass die Möglichkeit, Sicherheitslisten zur Verwaltung von Sicherheitsregeln zu verwenden, in einem zukünftigen Release veraltet ist. Aus diesen Gründen empfiehlt Oracle die Verwendung von Netzwerksicherheitsgruppen (NSGs) und der Annotation oci.oraclecloud.com/security-rule-management-mode
zur Verwaltung von Sicherheitsregeln.
Sie können die Sicherheitsregeln selbst verwalten, Regeln nach Bedarf erstellen, aktualisieren und löschen. Alternativ können Sie angeben, dass der oci-cloud-controller-manager (der auf der Cluster-Control Plane ausgeführt wird) einige oder alle Sicherheitsregeln für Sie verwalten soll. Kubernetes Engine verwendet den oci-cloud-controller-manager, um Load Balancer und Network Load Balancer für Kubernetes-Services des Typs LoadBalancer bereitzustellen.
Mit verschiedenen Annotationen können Sie wie folgt angeben, ob der OCI-Cloud-Controller-Manager Sicherheitsregeln für einen Load Balancer oder Network Load Balancer in einer NSG oder in einer Sicherheitsliste verwaltet:
-
Um Sicherheitsregeln in einer NSG zu verwalten, verwenden Sie die Annotation
oci.oraclecloud.com/security-rule-management-mode: "NSG"
(empfohlen).Wenn der OCI-Cloud-Controller-Manager Sicherheitsregeln in einer NSG verwalten soll (wie von Oracle empfohlen), müssen Sie die
oci.oraclecloud.com/security-rule-management-mode: "NSG"
-Annotation verwenden. Weitere Informationen zur Verwendung dieser Annotation finden Sie unter Sicherheitsregeln in NSGs und Sicherheitslisten mit der Annotation oci.oraclecloud.com/security-rule-management-mode verwalten. -
Um Sicherheitsregeln in einer Sicherheitsliste zu verwalten, verwenden Sie entweder die
oci.oraclecloud.com/security-rule-management-mode
-Annotation oder dieservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
- undoci-network-load-balancer.oraclecloud.com/security-list-management-mode
-Annotationen.Wenn der OCI-Cloud-Controller-Manager Sicherheitsregeln in der Sicherheitsliste eines Load Balancers oder eines Network Load Balancers verwalten soll, führen Sie einen der folgenden Schritte aus:
- Verwenden Sie die Annotation
oci.oraclecloud.com/security-rule-management-mode
, die auf"SL-All"
oder"SL-Frontend"
gesetzt ist. Weitere Informationen zur Verwendung dieser Annotation finden Sie unter Sicherheitsregeln in NSGs und Sicherheitslisten mit der Annotation oci.oraclecloud.com/security-rule-management-mode verwalten. - Verwenden Sie die Annotationen
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
bzw.oci-network-load-balancer.oraclecloud.com/security-list-management-mode
, die auf"All"
oder"Frontend"
gesetzt sind. Weitere Informationen zur Verwendung dieser beiden Annotationen finden Sie unter Verwaltungsoptionen für Sicherheitslisten beim Provisioning eines OCI Load Balancers angeben und Verwaltungsoptionen für Sicherheitslisten beim Provisioning eines OCI Network Load Balancers angeben.
- Verwenden Sie die Annotation
Unabhängig von den verwendeten Annotationen und unabhängig davon, ob Sie oder der oci-cloud-controller-manager Sicherheitsregeln in einer Sicherheitsliste oder in einer NSG verwalten, können Sie auch die OCID einer oder mehrerer zusätzlicher NSGs angeben, denen der oci-cloud-controller-manager den Load Balancer oder Network Load Balancer hinzufügen soll. In diesem Fall verwenden Sie die Annotation oci.oraclecloud.com/oci-network-security-groups
oder oci-network-load-balancer.oraclecloud.com/oci-network-security-groups
. Beachten Sie, dass der oci-cloud-controller-manager die Sicherheitsregeln in den zusätzlichen NSGs, die in diesen Annotationen angegeben werden, nicht verwaltet. Daher liegt es in Ihrer Verantwortung, die Sicherheitsregeln zu verwalten. Weitere Informationen zur Verwendung der Annotationen oci.oraclecloud.com/oci-network-security-groups
oder oci-network-load-balancer.oraclecloud.com/oci-network-security-groups
finden Sie unter Netzwerksicherheitsgruppen angeben (empfohlen).
Mit der Annotation oci.oraclecloud.com/security-rule-management-mode
Sicherheitsregeln in NSGs und Sicherheitslisten verwalten
Erforderliche IAM-Policys zur Verwaltung von Sicherheitsregeln in NSGs
Damit der OCI-Cloud-Controller-Manager die Sicherheitsregeln für den Load Balancer eines Clusters in NSGs verwalten kann, müssen Sie dem Cluster die Berechtigung zum Verwalten von NSGs erteilen. Beispiel: So erteilen Sie diese Berechtigung in einem bestimmten Compartment:
ALLOW any-user to manage network-security-groups in compartment <compartment-name> where request.principal.type = 'cluster'
Um dem oci-cloud-controller-manager das Erstellen einer Netzwerksicherheitsgruppe zu ermöglichen, müssen Sie dem Cluster außerdem die Berechtigung erteilen, VCNs zu verwalten oder virtuelle Netzwerkfamilien zu verwalten. Beispiel: Geben Sie eine oder andere der folgenden Policy-Anweisungen an:
ALLOW any-user to manage vcns in compartment <compartment-name> where request.principal.type = 'cluster'
ALLOW any-user to manage virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
Annotation oci.oraclecloud.com/security-rule-management-mode
verwenden
Um anzugeben, dass der OCI-Cloud-Controller-Manager Sicherheitsregeln für einen Load Balancer oder Network Load Balancer in einer NSG verwalten soll (wie von Oracle empfohlen), müssen Sie zuerst die erforderlichen IAM-Policys einrichten. Siehe Erforderliche IAM-Policys zum Verwalten von Sicherheitsregeln in NSGs. Nachdem Sie die erforderlichen IAM-Policys eingerichtet haben, können Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzufügen:
oci.oraclecloud.com/security-rule-management-mode: "NSG"
Der oci-cloud-controller-manager verwaltet alle erforderlichen Sicherheitsregeln für den Ingress zum Load Balancer- oder Network Load Balancer-Service in einer NSG, die der oci-cloud-controller-manager für diesen Zweck erstellt. Diese NSG wird als Frontend-NSG bezeichnet und ermöglicht eingehenden Traffic zum Load Balancer oder Network Load Balancer von 0.0.0.0/0 oder aus dem Quell-CIDR-Block (und im Quellportbereich), wenn er in der Manifestdatei angegeben ist. Der oci-cloud-controller-manager erstellt die folgenden Sicherheitsregeln in der Frontend-NSG:
Richtung | Quelle | Protokoll/Ziel- Port | Beschreibung |
---|---|---|---|
Ingress | 0.0.0.0/0 (oder Quell-CIDR-Block, wenn in der Manifestdatei angegeben) | In der Manifestdatei angegebene Ports. | Eingehenden Traffic an OCI Load Balancer zulassen. |
Egress | Backend-NSG (wenn die OCID einer Backend-NSG in der Manifestdatei angegeben ist) | ALL/(Knotenport für Service) | Traffic für Worker-Knoten zulassen |
Egress | Backend-NSG (wenn die OCID einer Backend-NSG in der Manifestdatei angegeben ist) | TCP/Health-Check-Port (10256) Wenn die Quell-IP-Adresse beibehalten wird, wird der Health-Check-Port automatisch vom Service ausgewählt. |
Ermöglichen Sie dem OCI Load Balancer oder Network Load Balancer die Kommunikation mit Kube-Proxy auf Worker-Knoten für den Health-Check-Port. |
Wenn der OCI-Cloud-Controller-Manager Sicherheitsregeln für Ingress-Traffic zu den Worker-Knoten im Backend-Set zusammen mit Egress-Traffic vom Load Balancer oder Network Load Balancer-Service verwalten soll, müssen Sie die OCID einer vorhandenen NSG angeben, die zu diesem Zweck verwendet werden soll. Diese NSG wird als Backend-NSG bezeichnet. Der OCI-Cloud-Controller-Manager fügt der Frontend-NSG nur Egress-Regeln hinzu, wenn Sie eine Backend-NSG angeben. Um die NSG anzugeben, die als Backend-NSG verwendet werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/oci-backend-network-security-group: "<nsg-ocid>"
wobei <NSG-OCID> die OCID einer vorhandenen NSG ist, die sich sowohl im selben VCN wie das Cluster befindet, als auch eine NSG, der die Compute-Instanzen, die Worker-Knoten hosten, bereits hinzugefügt wurden. Beispiel:
oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex"
Sie können die OCIDs mehrerer Backend-NSGs in einer durch Komma getrennten Liste angeben. Beispiel:
oci.oraclecloud.com/oci-backend-network-security-group: "ocid1.networksecuritygroup.oc1.phx.aaaaaa....cwex,ocid1.networksecuritygroup.oc1.phx.aaaaaa....jfle,ocid1.networksecuritygroup.oc1.phx.aaaaaa....pkrj"
Beachten Sie, dass die Compute-Instanzen, die Worker-Knoten im Backend-Set hosten, bereits der Backend-NSG hinzugefügt wurden, die Sie als Wert der oci.oraclecloud.com/oci-backend-network-security-group
-Annotation angeben. Sie können die Compute-Instanzen der Backend-NSG auf eine der folgenden Arten hinzufügen:
- Durch Angabe der NSG beim Erstellen eines Knotenpools (bei verwalteten Knoten und virtuellen Knoten).
- Indem Sie die primären VNICs der Compute-Instanzen, die die Worker-Knoten hosten, manuell mit dem Compute-Service zur NSG hinzufügen (bei verwalteten Knoten). Beispiel: Verwenden Sie die Konsolenseiten des Compute-Service (oder die CLI oder API des Compute-Service).
Der OCI-cloud-controller-manager erstellt die folgenden Sicherheitsregeln in der Backend-NSG:
Richtung | Quelle | Protokoll/Ziel- Port | Beschreibung |
---|---|---|---|
Ingress | Frontend-NSG-OCID | TCP/Health-Check-Port (10256) Wenn die Quell-IP-Adresse beibehalten wird, wird der Health-Check-Port automatisch vom Service ausgewählt. |
Ermöglichen Sie OCI Load Balancer oder Network Load Balancer die Kommunikation mit Kube-Proxy auf Worker-Knoten für Health Checks. |
Ingress | Frontend-NSG-OCID | ALL/(Knotenport für Service) | Kommunikation zwischen OCI Load Balancer oder Network Load Balancer und Worker-Knoten zulassen. |
Wenn Sie keine OCID für die Backend-NSG angeben, verwaltet der OCI-Cloud-Controller-Manager weder die Sicherheitsregeln für Ingress-Traffic zu den Worker-Knoten im Backend-Set noch die Sicherheitsregeln für Egress-Traffic vom Load Balancer oder Network Load Balancer.
Sie können die Annotation oci.oraclecloud.com/security-rule-management-mode
auch auf andere Werte setzen, um anzugeben, dass Sie Sicherheitsregeln selbst verwalten möchten, oder ob der OCI-Cloud-Controller-Manager Sicherheitsregeln in Sicherheitslisten verwalten soll. Die vollständige Syntax für die Annotation lautet wie folgt:
oci.oraclecloud.com/security-rule-management-mode: <value>
Hierbei ist <value>
einer der folgenden Werte:
"NSG"
: (empfohlen) Der oci-cloud-controller-manager verwaltet alle erforderlichen Sicherheitsregeln für den Ingress zum Load Balancer oder Network Load Balancer Service in einer Netzwerksicherheitsgruppe (NSG), die er zu diesem Zweck erstellt."None"
: (Standard für Network Load Balancer) Keine Sicherheitslistenverwaltung ist aktiviert, und der OCI-Cloud-Controller-Manager verwaltet keine Sicherheitsregeln. Es liegt in Ihrer Verantwortung, eine Sicherheitsregel einzurichten, die eingehenden Traffic an die entsprechenden Ports für Knotenportbereiche, den Port für den Zustand des kube-proxy und die Health-Check-Portbereiche zulässt. Außerdem müssen Sie Sicherheitsregeln einrichten, um eingehenden Traffic an Load Balancer und Network Load Balancer zuzulassen (siehe Sicherheitsregeln für Load Balancer und Network Load Balancer). Dies entspricht der Einstellung vonservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
oderoci-network-load-balancer.oraclecloud.com/security-list-management-mode
auf"None"
."SL-All"
: (Standard für Load Balancer) Der OCI-Cloud-Controller-Manager verwaltet alle erforderlichen Sicherheitsregeln für Ingress und Egress zum und vom Load Balancer oder Network Load Balancer Service in einer Sicherheitsliste. Dies entspricht der Einstellung vonservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
oderoci-network-load-balancer.oraclecloud.com/security-list-management-mode
auf"All"
."SL-Frontend"
: Der OCI-Cloud-Controller-Manager verwaltet nur Sicherheitsregeln für Ingress-Traffic zu Load-Balancer- und Network Load-Balancer-Services in einer Sicherheitsliste. Es liegt in Ihrer Verantwortung, eine Sicherheitsregel einzurichten, die eingehenden Traffic an die entsprechenden Ports für Knotenportbereiche, den Port für den Zustand des kube-proxy und die Health-Check-Portbereiche zulässt. Dies entspricht der Einstellung vonservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
oderoci-network-load-balancer.oraclecloud.com/security-list-management-mode
auf"Frontend"
.
Wenn Sie in Clustern mit verwalteten Knoten keinen Managementmodus explizit angeben oder einen ungültigen Wert angeben, verwaltet der oci-cloud-controller-manager alle erforderlichen Sicherheitsregeln für Ingress und Egress zum und vom Load Balancer- oder Network Load Balancer-Service in einer Sicherheitsliste (entspricht "SL-All"
). Beachten Sie, dass in diesem Fall der oci-cloud-controller-manager eine Sicherheitsregel erstellt, die eingehenden Traffic von 0.0.0.0/0 (oder von den in der Manifestdatei angegebenen Quellportbereichen) zu Listener-Ports zulässt. In Clustern mit virtuellen Knoten ist die Sicherheitslistenverwaltung nie aktiviert, und Sie müssen Sicherheitsregeln immer manuell konfigurieren (entspricht "None"
).
Beachten Sie Folgendes:
- Wenn Sie sowohl die Annotation
oci.oraclecloud.com/security-rule-management-mode
als auch eine der Annotationenservice.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
oderoci-network-load-balancer.oraclecloud.com/security-list-management-mode
in das Manifest aufnehmen, verwendet der oci-cloud-controller-manager immer die Annotationoci.oraclecloud.com/security-rule-management-mode
und ignoriert die andere Annotation. - Die Anzahl der Ingress- und Egress-Regeln, die in Sicherheitslisten und Netzwerksicherheitsgruppen zulässig sind, ist begrenzt (siehe Limits für Sicherheitslisten und Limits für Netzwerksicherheitsgruppen). Wenn die Anzahl der Ingress- oder Egress-Regeln das Limit überschreitet, verläuft das Erstellen oder Aktualisieren des Load Balancers oder der Netzwerksicherheitsgruppe nicht erfolgreich.
- Ein Load Balancer oder Network Load Balancer kann maximal fünf NSGs hinzugefügt werden. Wenn die Anzahl der NSGs das Limit überschreitet, wird ein Fehler zurückgegeben.
- Wenn der Kubernetes-Service vom Typ LoadBalancer gelöscht wird, werden die OCI-Ressourcen, die vom OCI-Cloud-Controller-Manager (der Frontend-NSG und in der Frontend-NSG oder der Backend-NSG erstellte Sicherheitsregeln) erstellt wurden, entfernt. Die Backend-NSG und alle Sicherheitsregeln, die der OCI-Cloud-Controller-Manager nicht erstellt hat, werden nicht entfernt.
- Beim Provisioning eines Network Load Balancers für einen Kubernetes-Service des Typs LoadBalancer können Sie mit der Annotation
is-preserve-source: "true"
die Beibehaltung der Client-IP-Adresse in den Headern von IP-Paketen angeben (nur gültig, wenn die AnnotationexternalTrafficPolicy
auf"Local"
gesetzt ist). In diesem Fall erstellt der oci-cloud-controller-manager Sicherheitsregeln in der Backend-NSG, um den Zugriff auf die Worker-Knoten im Backend-Set aus den CIDR-Blöcken zuzulassen, die mitloadBalancerSourceRanges
im Servicemanifest LoadBalancer angegeben werden. Wenn CIDR-Blöcke nicht vonloadBalancerSourceRanges
angegeben werden, erstellt der oci-cloud-controller-manager eine Sicherheitsregel, die den Zugriff über das Internet (0.0.0.0/0) auf die mitnodePort
angegebene Portnummer zulässt. - Die Backend-NSG, die Sie als Wert der Annotation
oci.oraclecloud.com/oci-backend-network-security-group
angeben, muss sich im selben VCN wie das Cluster befinden. - Die Compute-Instanzen, die Worker-Knoten im Backend-Set hosten, müssen der Backend-NSG, die Sie als Wert der
oci.oraclecloud.com/oci-backend-network-security-group
-Annotation angeben, bereits hinzugefügt worden sein.
Beispiele für Anmerkungen zur Verwaltung von Sicherheitsregeln
Beispiel 1: Erstellen Sie eine neue Frontend-NSG mit verwalteten Sicherheitsregeln, und verwalten Sie Sicherheitsregeln in einer vorhandenen Backend-NSG
In diesem Beispiel:
- Der OCI-Cloud-Controller-Manager soll eine Frontend-NSG für einen Load Balancer erstellen und die Sicherheitsregeln in dieser NSG verwalten.
- Sie möchten, dass der OCI-Cloud-Controller-Manager eine vorhandene Backend-NSG verwendet und die Sicherheitsregeln in dieser NSG verwaltet.
Sie geben "NSG"
als Wert der oci.oraclecloud.com/security-rule-management-mode
-Annotation an und geben die OCID der vorhandenen NSG als Wert der oci.oraclecloud.com/oci-backend-network-security-group
-Annotation an:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/security-rule-management-mode: "NSG"
oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid>
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
In diesem Fall:
- Der OCI-Cloud-Controller-Manager erstellt die Frontend-NSG für den Load Balancer und verwaltet die zugehörigen Sicherheitsregeln.
- Der oci-cloud-controller-manager verwaltet die Sicherheitsregeln der Backend-NSG, für die die OCID in der Annotation
oci-backend-network-security-group
angegeben ist.
Beachten Sie Folgendes:
- Die Backend-NSG, die Sie als Wert der Annotation
oci.oraclecloud.com/oci-backend-network-security-group
angeben, muss sich im selben VCN wie das Cluster befinden. - Die Compute-Instanzen, die Worker-Knoten im Backend-Set hosten, müssen der Backend-NSG, die Sie als Wert der
oci.oraclecloud.com/oci-backend-network-security-group
-Annotation angeben, bereits hinzugefügt worden sein.
Beispiel 2: Neue Frontend-NSG mit verwalteten Sicherheitsregeln erstellen und Sicherheitsregeln in einer vorhandenen Backend-NSG manuell verwalten
In diesem Beispiel:
- Der OCI-Cloud-Controller-Manager soll eine Frontend-NSG für einen Load Balancer erstellen und die Sicherheitsregeln in dieser NSG verwalten.
- Sie möchten Sicherheitsregeln manuell definieren, um den Traffic vom Frontend des Load Balancers zum Backend in einer von Ihnen erstellten und verwalteten NSG zu kontrollieren. Beispiel: Sie möchten Sicherheitsregeln erstellen, um zu verhindern, dass Traffic von der LB an die Worker-Knoten weitergeleitet wird.
Sie geben "NSG"
als Wert der Annotation oci.oraclecloud.com/security-rule-management-mode
an:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/security-rule-management-mode: "NSG"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
In diesem Fall:
- Der OCI-Cloud-Controller-Manager erstellt die Frontend-NSG für den Load Balancer und verwaltet die zugehörigen Sicherheitsregeln.
- Sie sind für die Erstellung und Verwaltung von Sicherheitsregeln in einer Backend-NSG verantwortlich, um den Traffic von der Frontend-NSG zur Backend-NSG zu kontrollieren.
Beispiel 3: Erstellen Sie eine neue Frontend-NSG mit verwalteten Sicherheitsregeln, und verwalten Sie Sicherheitsregeln in einer vorhandenen Backend-NSG (aber Anmerkungen werden falsch verwendet).
In diesem Beispiel:
- Der OCI-Cloud-Controller-Manager soll eine Frontend-NSG für einen Load Balancer erstellen und die Sicherheitsregeln in dieser NSG verwalten.
- Sie möchten, dass der OCI-Cloud-Controller-Manager eine vorhandene Backend-NSG verwendet und die Sicherheitsregeln in dieser NSG verwaltet. Sie geben die Anmerkungen jedoch falsch an.
Sie geben "NSG"
korrekt als Wert der Annotation oci.oraclecloud.com/security-rule-management-mode
an. Sie nehmen jedoch versehentlich die Annotation service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
auf und lassen die Annotation oci.oraclecloud.com/oci-backend-network-security-group
weg:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/security-rule-management-mode: "NSG"
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "All"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
In diesem Fall:
- Der OCI-Cloud-Controller-Manager erstellt die Frontend-NSG für den Load Balancer und verwaltet die zugehörigen Sicherheitsregeln.
- Der OCI-Cloud-Controller-Manager ignoriert die Annotation
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode
(weil die Annotationoci.oraclecloud.com/security-rule-management-mode
vorhanden ist). - Sie sind für das Erstellen und Verwalten von Sicherheitsregeln in einer Backend-NSG verantwortlich, um den Traffic von der Frontend-NSG zur Backend-NSG zu steuern (weil die
oci.oraclecloud.com/oci-backend-network-security-group
-Annotation nicht vorhanden ist).
Beispiel 4: Erstellen Sie eine neue Frontend-NSG mit verwalteten Sicherheitsregeln, verwalten Sie Sicherheitsregeln in einer vorhandenen Backend-NSG, und fügen Sie den Load Balancer einer vorhandenen NSG hinzu
In diesem Beispiel:
- Der OCI-Cloud-Controller-Manager soll eine Frontend-NSG für einen Load Balancer erstellen und die Sicherheitsregeln in dieser NSG verwalten.
- Sie möchten, dass der OCI-Cloud-Controller-Manager eine vorhandene Backend-NSG verwendet und die Sicherheitsregeln in dieser NSG verwaltet.
- Sie möchten, dass der OCI-Cloud-Controller-Manager den Load Balancer zu einer vorhandenen NSG mit von Ihnen verwalteten Sicherheitsregeln hinzufügt.
Sie angeben:
"NSG"
als Wert der Annotationoci.oraclecloud.com/security-rule-management-mode
.- Die OCID der vorhandenen NSG, die der OCI-Cloud-Controller-Manager verwenden soll, als Wert der Annotation
oci.oraclecloud.com/oci-backend-network-security-group
. - Die OCID der vorhandenen NSG, der der der OCI-Cloud-Controller-Manager den Load Balancer hinzufügen soll.
Das Manifest lautet wie folgt:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/security-rule-management-mode: "NSG"
oci.oraclecloud.com/oci-backend-network-security-group: <nsg_ocid>
oci.oraclecloud.com/oci-network-security-groups: "<nsg-ocid>"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
In diesem Fall:
- Der OCI-Cloud-Controller-Manager erstellt die Frontend-NSG für den Load Balancer und verwaltet die zugehörigen Sicherheitsregeln.
- Der oci-cloud-controller-manager verwaltet die Sicherheitsregeln der Backend-NSG, für die die OCID in der Annotation
oci.oraclecloud.com/oci-backend-network-security-group
angegeben ist. - Der OCI-Cloud-Controller-Manager fügt den Load Balancer zur NSG hinzu, die in der Annotation
oci.oraclecloud.com/oci-network-security-groups
angegeben wird.
Health-Check-Parameter angeben
Oracle Cloud Infrastructure-Load Balancer und Network Load Balancer wenden eine Health Check Policy an, um Backend-Server kontinuierlich zu überwachen. Ein Health Check ist ein Test zur Bestätigung der Verfügbarkeit des Backend-Servers und kann eine Anforderung oder ein Verbindungsversuch sein. Wenn ein Server die Health-Check-Bedingungen nicht erfüllt, nimmt der Load Balancer oder Network Load Balancer den Server vorübergehend aus der Rotation. Wenn der Server die Health-Check-Bedingungen erfüllt, lässt ihn der Load Balancer oder Network Load Balancer wieder in die Rotation zurück.
Health Check Policys enthalten eine Reihe von Parametern mit jeweils einem Standardwert. Wenn die Kubernetes-Engine einen OCI-Load Balancer oder Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie Standardwerte für Health-Check-Parameter außer Kraft setzen, indem Sie Annotationen in den Metadatenabschnitt der Manifestdatei aufnehmen. Sie können diese Anmerkungen später hinzufügen, ändern und löschen. Wenn Sie eine Anmerkung löschen, die einen Wert für einen Health-Check-Parameter angegeben hat, verwendet der Load Balancer oder Network Load Balancer stattdessen den Standardwert des Parameters.
Um Health Check-Parameter zu konfigurieren, wenn die Kubernetes Engine einen Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgenden Annotationen im Metadatenabschnitt der Manifestdatei hinzu:
-
Wenn Sie angeben möchten, wie viele nicht erfolgreiche Health-Check-Anforderungen versucht werden sollen, bevor ein Backend-Server als fehlerhaft betrachtet wird, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "<value>"
Dabei ist
<value>
die Anzahl nicht erfolgreicher Health-Check-Anforderungen. -
Wenn Sie das Intervall zwischen Health-Check-Anforderungen angeben möchten, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "<value>"
Dabei ist
<value>
ein numerischer Wert in Millisekunden. Der Mindestwert ist 1000. -
Wenn Sie die maximale Zeit angeben möchten, in der auf eine Antwort auf eine Health-Check-Anforderung gewartet werden soll, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "<value>"
Dabei ist
<value>
ein numerischer Wert in Millisekunden. Ein Health Check ist nur erfolgreich, wenn der Load Balancer innerhalb dieses Timeoutzeitraums eine Antwort erhält.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-health-check-retries: "5"
service.beta.kubernetes.io/oci-load-balancer-health-check-interval: "15000"
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout: "4000"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Um Health Check-Parameter zu konfigurieren, wenn Kubernetes Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgenden Annotationen im Metadatenabschnitt der Manifestdatei hinzu:
-
Wenn Sie angeben möchten, wie viele nicht erfolgreiche Health-Check-Anforderungen versucht werden sollen, bevor ein Backend-Server als fehlerhaft betrachtet wird, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
oci-network-load-balancer.oraclecloud.com/health-check-retries: "<value>"
Dabei ist
<value>
die Anzahl nicht erfolgreicher Health-Check-Anforderungen. -
Wenn Sie das Intervall zwischen Health-Check-Anforderungen angeben möchten, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/health-check-interval: "<value>"
Dabei ist
<value>
ein numerischer Wert in Millisekunden. Der Mindestwert ist 1000. -
Wenn Sie die maximale Zeit angeben möchten, in der auf eine Antwort auf eine Health-Check-Anforderung gewartet werden soll, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
oci-network-load-balancer.oraclecloud.com/health-check-timeout: "<value>"
Dabei ist
<value>
ein numerischer Wert in Millisekunden. Ein Health Check ist nur erfolgreich, wenn der Network Load Balancer innerhalb dieses Timeoutzeitraums eine Antwort erhält.
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/health-check-retries: "5"
oci-network-load-balancer.oraclecloud.com/health-check-interval: "15000"
oci-network-load-balancer.oraclecloud.com/health-check-timeout: "4000"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Beachten Sie, dass die folgenden Standardwerte verwendet werden, wenn Sie keine Health-Check-Parameterwerte explizit angeben, indem Sie Annotationen in den Metadatenabschnitt der Manifestdatei aufnehmen:
Load Balancer-Annotation | Network Load Balancer-Annotation |
Standardwert wurde verwendet |
---|---|---|
service.beta.kubernetes.io/oci-load-balancer-health-check-retries |
oci-network-load-balancer.oraclecloud.com/health-check-retries |
"3" |
service.beta.kubernetes.io/oci-load-balancer-health-check-interval |
oci-network-load-balancer.oraclecloud.com/health-check-interval |
"10.000" |
service.beta.kubernetes.io/oci-load-balancer-health-check-timeout |
oci-network-load-balancer.oraclecloud.com/health-check-timeout |
"3.000" |
Weitere Informationen zu den Health Check Policys von Oracle Cloud Infrastructure-Load Balancer und Network Load Balancer finden Sie unter:
In Backend-Sets einzuschließende Worker-Knoten auswählen
Eingehender Traffic zu einem Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer wird zwischen den Backend-Servern in einem Backend-Set verteilt. Wenn Kubernetes Engine einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellt, sind standardmäßig alle Worker-Knoten im Cluster im Backend-Set enthalten.
Sie können jedoch nur eine Teilmenge von Worker-Knoten in einem Cluster auswählen, die in das Backend-Set eines bestimmten Load Balancers oder Network Load Balancers aufgenommen werden sollen. Wenn Sie Teilmengen der Worker-Knoten eines Clusters in die Backend-Sets verschiedener Load Balancer und Network Load Balancer aufnehmen, können Sie ein einzelnes Kubernetes-Cluster als mehrere logische Cluster (Services) darstellen.
Um die Worker-Knoten auszuwählen, die in das Backend-Set aufgenommen werden sollen, wenn die Kubernetes-Engine einen Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/node-label-selector: <label>
wobei <label>
ein oder mehrere Labelschlüssel und -werte ist, die mit der Standardnotation des Kubernetes-Labelselektors identifiziert werden. Beispiel: lbset=set1
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/node-label-selector: lbset=set1
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Um die Worker-Knoten auszuwählen, die in das Backend-Set aufgenommen werden sollen, wenn die Kubernetes-Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/node-label-selector: <label>
wobei <label>
ein oder mehrere Labelschlüssel und -werte ist, die mit der Standardnotation des Kubernetes-Labelselektors identifiziert werden. Beispiel: lbset=set1
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/node-label-selector: lbset=set1
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Verwenden Sie die standardmäßige Kubernetes-Labelselektornotation, um die Labelschlüssel und -werte in den Annotationen im Metadatenabschnitt der Manifestdatei anzugeben. Weitere Informationen zur standardmäßigen Kubernetes-Labelselektornotation finden Sie unter Labelselektoren in der Kubernetes-Dokumentation.
Die Tabelle enthält einige Beispiele für die standardmäßige Kubernetes-Labelauswahl.
Load Balancer-Annotation | Network Load Balancer-Annotation |
In das Backend-Set aufnehmen: |
---|---|---|
oci.oraclecloud.com/node-label-selector: lbset=set1 |
oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset=set1 |
Alle Worker-Knoten mit dem Labelschlüssel |
oci.oraclecloud.com/node-label-selector: lbset in (set1, set3) |
oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset in (set1, set3) |
Alle Worker-Knoten mit dem Labelschlüssel |
oci.oraclecloud.com/node-label-selector: lbset |
oci-network-load-balancer.oraclecloud.com/node-label-selector: lbset |
Alle Worker-Knoten mit dem Labelschlüssel lbset , unabhängig von ihrem Wert. |
oci.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3) |
oci-network-load-balancer.oraclecloud.com/node-label-selector: env=prod,lbset in (set1, set3) |
Alle Worker-Knoten mit dem Labelschlüssel |
oci.oraclecloud.com/node-label-selector: env!=test |
oci-network-load-balancer.oraclecloud.com/node-label-selector: env!=test |
Alle Worker-Knoten mit dem Labelschlüssel |
Backend-Set-Policys angeben
Wenn die Kubernetes-Engine einen Load Balancer oder 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 auf die Backend-Server verteilt werden soll.
Weitere Informationen:
- Informationen zu Load Balancern und Backend-Set-Policys finden Sie unter Load-Balancer-Policys.
- Informationen zu Network Load Balancern und Backend-Set-Policys finden Sie unter Network Load Balancer Policys
Um eine Policy für das Backend-Set anzugeben, wenn die Kubernetes-Engine einen Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/loadbalancer-policy: <value>
Hierbei ist <value>
einer der folgenden Werte:
"ROUND_ROBIN"
: Leitet den eingehenden Traffic nacheinander an die einzelnen Server in einer Backend-Setliste weiter."LEAST_CONNECTIONS"
: Leitet eingehenden Nicht-Sticky-Anforderungstraffic an den Backend-Server mit den wenigsten aktiven Verbindungen weiter."IP_HASH"
: Leitet eingehenden Nicht-Sticky-Anforderungstraffic vom selben Client an denselben Backend-Server weiter, solange dieser Server verfügbar ist. Dabei wird die Quell-IP-Adresse der eingehenden Anforderung als Hashing-Schlüssel verwendet.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/loadbalancer-policy: "LEAST_CONNECTIONS"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Wenn Sie keine Policy für das Backend-Set explizit angeben, wird "ROUND_ROBIN" als Standardwert verwendet.
Um eine Policy für das Backend-Set anzugeben, wenn die Kubernetes-Engine einen Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/backend-policy: <value>
Hierbei ist <value>
einer der folgenden Werte:
"TWO_TUPLE"
: Leitet eingehenden Traffic basierend auf dem 2-Tupel-Hash (Quell-IP, Ziel-IP) weiter."THREE_TUPLE"
: Leitet eingehenden Traffic basierend auf dem 3-Tupel-Hash (Quell-IP, Ziel-IP, Protokoll) weiter."FIVE_TUPLE"
: Leitet eingehenden Traffic basierend auf dem 5-Tupel-Hash (Quell-IP und Quellport, Ziel-IP und Zielport, Protokoll) weiter.
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/backend-policy: "THREE_TUPLE"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Wenn Sie keine Policy für das Backend-Set explizit angeben, wird "FIVE_TUPLE" als Standardwert verwendet.
Podbereitschafts-Gates angeben
Sie können Podreife-Gates für Cluster mit virtuellen Knoten angeben, jedoch nicht für Cluster mit verwalteten Knoten.
Wenn Kubernetes Engine einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie mit einem Pod Readiness Gate sicherstellen, dass Traffic nur an Pods weitergeleitet wird, die erfolgreich zum Backend-Set hinzugefügt wurden und Traffic empfangen können. Beachten Sie, dass Sie Podbereitschaftsgates für Pods angeben können, die auf virtuellen Knoten ausgeführt werden, aber nicht für Pods, die auf verwalteten Knoten ausgeführt werden. Definieren Sie keine Podbereitschaftsgates für Pods, die auf verwalteten Knoten ausgeführt werden.
Podbereitschaftsgates sind zusätzliche Bedingungen, um anzuzeigen, dass ein Pod für den Empfang von Traffic bereit ist. Mit Podbereitschaftsgates können Sie komplexe benutzerdefinierte Bereitschaftsprüfungen implementieren und bei rollierenden Deployments Ausfallzeiten vermeiden. Weitere Informationen finden Sie unter Details zur Podbereitschaft in der Kubernetes-Dokumentation.
Beim Provisioning eines Load Balancers oder eines Network Load Balancers umfasst das Backend-Set die IP-Adressen der Podreplikate eines Deployments mit der Bedingung Ready
. Wenn Sie das Deployment aktualisieren (z.B. um ein neues Image zu verwenden), werden vorhandene Podreplikate durch neue Podreplikate ersetzt. Das Ersetzen aller Podreplikate kann jedoch einige Zeit in Anspruch nehmen und zu einer Nichtverfügbarkeit des Backends führen, da:
- Die vorhandenen Podreplikate können beendet werden, bevor das Backend-Set mit den IP-Adressen der neuen Podreplikate aktualisiert wurde.
- Das Backend-Set kann mit den IP-Adressen der neuen Podreplikate aktualisiert werden, bevor die neuen Podreplikate für den Empfang von Traffic bereit sind.
Durch die Angabe der Verwendung eines Podbereitschaftsgate wird sichergestellt, dass Backends immer für den Load Balancer oder Network Load Balancer verfügbar sind. Vorhandene Pods werden erst beendet, wenn dem Backend-Set neue Pods hinzugefügt wurden und die neuen Pods bereit sind, Traffic zu empfangen.
Um anzugeben, dass die Kubernetes-Engine ein Podbereitschaftsgate in die Podspezifikation jedes in einem bestimmten Namespace erstellten Pods einfügen soll, fügen Sie das Label loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled
dem Namespace hinzu, indem Sie Folgendes eingeben:
kubectl label ns <namespace> loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled
Im folgenden Beispiel wird gezeigt, wie Sie einen Load Balancer mit einem Pod Readiness Gate erstellen.
Beschriften Sie zunächst den pdr
-Namespace, um das Podreife-Gate für den Namespace anzugeben, indem Sie Folgendes eingeben:
kubectl label ns pdr loadbalancer.oci.oraclecloud.com/pod-readiness-gate-inject=enabled
Die Ausgabe des Befehls bestätigt, dass der Namespace beschriftet wurde:
namespace/pdr labeled
Stellen Sie dann Nginx im Namespace pdr
bereit, indem Sie Folgendes eingeben:
kubectl apply -f https://raw.githubusercontent.com/oracle-devrel/oci-oke-virtual-nodes/main/nginx-svc/nginx.yaml -n pdr
Listen Sie die Pods im Namespace pdr
auf, indem Sie Folgendes eingeben:
kubectl get pods -n pdr
Jetzt können Sie die Verwendung des Podreife-Gate demonstrieren, indem Sie die Imageversion im Nginx-Manifest aktualisieren und das Manifest erneut anwenden, sodass vorhandene Pods durch neue Pods ersetzt werden.
nginx:1.25.1
, wie dargestellt:apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25.1
...
Wenden Sie das Manifest erneut an, indem Sie Folgendes eingeben:
kubectl apply -f ./nginx.yaml -n pdr
Beobachten Sie die neuen Pods, die eingeführt werden, indem Sie Folgendes eingeben:
kubectl get pods -o wide -n pdr
Beispiel:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-678976847c-8bqs7 1/1 Running 0 44m 10.0.10.153 10.0.10.253 <none> 1/1
nginx-678976847c-ttqms 1/1 Running 0 47m 10.0.10.201 10.0.10.253 <none> 1/1
Beobachten Sie den Status eines der neuen Pods, indem Sie Folgendes eingeben:
kubectl describe pod <pod-name> -n pdr
Beispiel:
kubectl describe pod nginx-678976847c-ttqms -n pdr
Die Ausgabe des Befehls bestätigt den Status des podreadiness.loadbalancer.oraclecloud.com
-Bereitschaftsgate. Beispiel:
...
Readiness Gates:
Type Status
podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f True
Conditions:
Type Status
podreadiness.loadbalancer.oraclecloud.com/f913fe603a9be9b5d51f True
PodScheduled True
Initialized True
Ready True
ContainersReady True
IPMode zur Anpassung des Trafficrouting angeben
Wenn die Kubernetes-Engine einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie angeben, wie Traffic, der aus einem Cluster stammt, an die IP-Adresse des Load Balancers oder Network Load Balancers weitergeleitet wird.
In Clustern, auf denen Kubernetes-Version 1.30 oder höher ausgeführt wird, ist das Kubernetes-Feature-Gate LoadBalancerIPMode
aktiviert, und das Feld ipMode
eines Service vom Typ LoadBalancer hat den Standardwert "VIP". Wenn ipMode
den Wert "VIP" aufweist, wird der Traffic, der von einem Pod innerhalb des Clusters an die IP-Adresse eines Service des Typs LoadBalancer gesendet wird, direkt an Anwendungspods weitergeleitet, um die Performance zu optimieren, wobei der LoadBalancer-Service umgangen wird. Weitere Informationen finden Sie unter IPMode des Load-Balancer-Status angeben in der Kubernetes-Dokumentation.
In einigen Situationen können Sie jedoch entscheiden, dass das Routing des Traffics direkt an Anwendungspods nicht geeignet ist. Beispiel: Wenn Traffic, der aus einem Cluster stammt, direkt an Anwendungspods weitergeleitet wird, können Sie die SSL-Beendigung nicht auf Load-Balancer-Ebene implementieren.
Um anzugeben, wie Traffic, der an die IP-Adresse des Load Balancers oder Network Load Balancers gesendet wird, aus dem Cluster heraus weitergeleitet werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/ingress-ip-mode: <value>
Hierbei ist <value>
einer der folgenden Werte:
"VIP"
: Der gesamte Traffic, der aus dem Cluster stammt und an die IP-Adresse eines Service des Typs LoadBalancer gesendet wird, wird direkt an die Anwendungspods weitergeleitet, um die Performance zu optimieren. Dabei wird der LoadBalancer-Service umgangen."proxy"
: Der gesamte Traffic, der aus dem Cluster stammt und an die IP-Adresse eines Service des Typs LoadBalancer gesendet wird, wird an den Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer weitergeleitet, der für den LoadBalancer-Service bereitgestellt wurde. Der Load Balancer oder Network Load Balancer leitet den Traffic dann an die Anwendungspods weiter.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/ingress-ip-mode: "proxy"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Wenn Sie die oci.oraclecloud.com/ingress-ip-mode
-Annotation nicht angeben oder die Annotation anschließend entfernen, hat die Eigenschaft ipMode
eines Service vom Typ LoadBalancer den Standardwert "VIP"
.
Beachten Sie außerdem, dass der Network Load Balancer bei Verwendung eines privaten Network Load Balancers, bei dem die Annotation oci-network-load-balancer.oraclecloud.com/is-preserve-source
auf true
gesetzt ist, eine bekannte Einschränkung aufweist, die keinen Traffic zulässt, bei dem der Quellknoten und der Ziel-Backend-Knoten denselben Knoten aufweisen. Diese Einschränkung verhindert die Kommunikation zwischen Pods auf demselben Knoten über den Network Load Balancer, wenn die folgenden Bedingungen erfüllt sind:
- Die
oci.oraclecloud.com/ingress-ip-mode
-Annotation ist aufproxy
gesetzt. - Die
oci-network-load-balancer.oraclecloud.com/is-preserve-source
-Annotation ist auftrue
gesetzt. - Der Network Load Balancer ist privat.
IP-Adressfamilien für Load Balancer und Network Load Balancer angeben
Wenn die Kubernetes-Engine einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, bestimmt das Load-Balancer-Subnetz die Kontrolle über die IP-Adressfamilie der IP-Adresse, über die der Load Balancer oder Network Load Balancer Traffic empfängt.
- Wenn das Subnetz ein IPv4-Einzelstacksubnetz ist, ist das Subnetz nur für die IPv4-Adressierung konfiguriert. Dem Load Balancer oder Network Load Balancer wird nur eine IPv4-Adresse zugewiesen, für die externer Traffic empfangen werden soll. Sie können die IP-Adressfamilie der IP-Adresse, an der der Load Balancer oder Network Load Balancer externen Traffic empfängt, nicht ändern.
- Wenn das Subnetz ein IPv4/IPv6-Subnetz mit dualem Stack ist, ist das Subnetz sowohl für die IPv4- als auch für die IPv6-Adressierung konfiguriert. Dem Load Balancer oder Network Load Balancer kann entweder eine IPv4-Adresse oder eine IPv6-Adresse zugewiesen werden, an die der externe Traffic gesendet werden soll. In diesem Fall können Sie mit den Kubernetes-Feldern
spec.ipFamilyPolicy
undspec.ipFamilies
im Servicemanifest angeben, ob der Load Balancer oder Network Load Balancer externen Traffic nur an der IPv4-Adresse oder nur an der IPv6-Adresse oder sowohl an der IPv4-Adresse als auch an der IPv6-Adresse empfängt.
Beachten Sie, dass die IP-Adressfamilie, die für den Traffic zwischen dem Listener und dem Backend-Set verwendet wird, für Load Balancer und Network Load Balancer unterschiedlich bestimmt wird:
- Load Balancer: Der Traffic zwischen einem Load Balancer Listener und dem Backend-Set verwendet immer IPv4-Adressen.
- Network Load Balancer: Der Traffic zwischen einem Network Load Balancer Listener und dem Backend-Set verwendet dieselbe IP-Adressfamilie wie die IP-Adresse, an der der Network Load Balancer Listener externen Traffic empfängt.
Die Tabelle zeigt die Interaktion zwischen der IP-Adressfamilie des Load-Balancer-Subnetzes, den Einstellungen von spec.ipFamilyPolicy
und spec.ipFamilies
, der IP-Adressfamilie, aus der IP-Adressen dem Load Balancer oder Network Load Balancer zugewiesen werden, und dem IP-Protokoll zwischen dem Listener und dem Backend-Set. Beachten Sie, dass nur gültige Kombinationen angezeigt werden.
Subnetz-IP-Adressfamilie | ipFamilyPolicy gesetzt auf: |
ipFamilies gesetzt auf: |
IP-Adressfamilie des Network Load Balancer-Endpunkts | IP-Adressfamilie des Load Balancers | Network Load Balancer Listener für Backend-Settraffic | Load Balancer Listener an Backend-Settraffic |
---|---|---|---|---|---|---|
IPv4 | SingleStack |
IPv4 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4/IPv6 | SingleStack |
IPv4 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4/IPv6 | SingleStack |
IPv6 |
IPv6 | nicht unterstützt | IPv6 | nicht unterstützt |
IPv4 | PreferDualStack |
IPv4 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4 | PreferDualStack |
IPv6 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4 | PreferDualStack |
IPv4,IPv6 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4 | PreferDualStack |
IPv6,IPv4 |
IPv4 | IPv4 | IPv4 | IPv4 |
IPv4/IPv6 | PreferDualStack |
IPv4 |
IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4 |
IPv4/IPv6 | PreferDualStack |
IPv6 |
IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv4 |
IPv4/IPv6 | PreferDualStack |
IPv4,IPv6 |
IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4 |
IPv4/IPv6 | PreferDualStack |
IPv6,IPv4 |
IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv4 |
IPv4/IPv6 | RequireDualStack |
IPv4,IPv6 |
IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4(primär) und IPv6 | IPv4 |
IPv4/IPv6 | RequireDualStack |
IPv6,IPv4 |
IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv6(primär) und IPv4 | IPv4 |
Wenn Sie mit der service.beta.kubernetes.io/oci-load-balancer-subnet1
-Annotation ein alternatives Subnetz zum Subnetz angeben, das bei der Erstellung des Clusters für Load Balancer angegeben wurde, stellen Sie sicher, dass die Adressfamilie des alternativen Subnetzes mit den Feldern spec.ipFamilyPolicy
und spec.ipFamilies
im Servicemanifest kompatibel ist.
Weitere Informationen zur Unterstützung von IPv4 und IPv6 in Kubernetes finden Sie in der Kubernetes-Dokumentation unter IPv4/IPv6 dual-stack.
Beispiel 1:
In diesem Beispiel gilt:
- Sie möchten das Subnetz verwenden, das beim Erstellen des Clusters für Load Balancer angegeben wurde.
- Sie möchten den Service vom Typ LoadBalancer nur bereitstellen, wenn ihm sowohl eine IPv4- als auch eine IPv6-Adresse zugewiesen werden kann. Legen Sie daher
ipFamilyPolicy: RequireDualStack
fest. - Sie möchten, dass die primäre IP-Adresse des Load Balancers eine IPv6-Adresse ist (und die sekundäre Adresse eine IPv4-Adresse), also legen Sie
spec.ipFamilies: IPv6,IPv4
fest.
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
spec:
type: LoadBalancer
ipFamilyPolicy: RequireDualStack
ipFamilies:
- IPv6
- IPv4
ports:
- name: http
port: 80
targetPort: 80
selector:
app: nginx
In diesem Beispiel ist das Load-Balancer-Subnetz des Clusters ein Dual-Stack-Subnetz IPv4/IPv6, sodass das Deployment erfolgreich verläuft. Dem Load Balancer wird eine IPv6-Adresse als primäre Adresse und eine IPv4-Adresse als sekundäre Adresse zugewiesen.
Beispiel 2:
In diesem Beispiel gilt:
- Sie möchten den Service vom Typ LoadBalancer in einem alternativen Subnetz als den Service hosten, der beim Erstellen des Clusters für Load Balancer angegeben wurde. Daher geben Sie mit der
service.beta.kubernetes.io/oci-load-balancer-subnet1
-Annotation die OCID des alternativen Subnetzes an. - Sie möchten dem Service des Typs LoadBalancer sowohl IPv4- als auch IPv6-Adressen zuweisen, wenn der Service in einem Subnetz des doppelten Stacks IPv4/IPv6 gehostet wird. Wenn der Service in einem einzelnen Stack-Subnetz IPv4 gehostet wird, soll andernfalls eine IP-Adresse dem Service aus dieser IP-Adressfamilie zugewiesen werden. Stellen Sie also
ipFamilyPolicy: PreferDualStack
ein. - Sie möchten, dass die primäre IP-Adresse des Load Balancers eine IPv4-Adresse ist (und die sekundäre Adresse eine IPv6-Adresse ist, sofern sie vom Subnetz unterstützt wird), also legen Sie
spec.ipFamilies: IPv4,IPv6
fest.
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-subnet1: "ocid1.subnet.oc1..aaaaaa....vdfw"
spec:
type: LoadBalancer
ipFamilyPolicy: PreferDualStack
ipFamilies:
- IPv4
- IPv6
ports:
- name: http
port: 80
targetPort: 80
selector:
app: nginx
In diesem Beispiel ist das alternative Subnetz ein Dual-Stack-Subnetz IPv4/IPv6, sodass das Deployment erfolgreich verläuft. Dem Load Balancer wird eine IPv4-Adresse als primäre Adresse und eine IPv6-Adresse als sekundäre Adresse zugewiesen.
Bestimmte IPv4- und IPv6-Adressen zu Network Load Balancern zuweisen
Wenn Kubernetes Engine einen Oracle Cloud Infrastructure-Network Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer
bereitstellt, weist der Network Load Balancer-Service dem Network Load Balancer mindestens eine IP-Adresse zu.
Der Network Load Balancer-Service weist eine private IPv4-Adresse zu und weist im Fall eines externen Network Load Balancers außerdem eine zusätzliche öffentliche IPv4-Adresse zu. Wenn das Subnetz des Network Load Balancers kompatibel ist, kann der Network Load Balancer-Service auch eine IPv6-Adresse zuweisen (siehe IP-Adressfamilien für Load Balancer und Network Load Balancer angeben).
In Clustern, auf denen Kubernetes-Version 1.29 oder höher ausgeführt wird, können Sie die IP-Adresse angeben, die dem Network Load Balancer zugewiesen werden soll, anstatt dass der Network Load Balancer-Service die zuzuweisende IP-Adresse wählt. Die IP-Adresse, die Sie zuweisen können, hängt wie folgt von der IP-Adressfamilie des Network Load Balancer-Subnetzes ab:
- IPv4: Wenn das Subnetz des Network Load Balancers ein IPv4-Einzelstapelsubnetz oder ein IPv4/IPv6-Dual-Stack-Subnetz ist, können Sie dem Network Load Balancer eine private IPv4-Adresse zuweisen.
- IPv4 und IPv6: Wenn das Subnetz des Network Load Balancers ein Dual-Stack-Subnetz IPv4/IPv6 ist, können Sie dem Network Load Balancer entweder eine private IPv4-Adresse und eine IPv6-Adresse zuweisen.
Um eine private IPv4-Adresse anzugeben, die einem Network Load Balancer zugewiesen werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "<ipv4-address>"
wobei <ipv4-address>
eine gültige IPv4-Adresse aus dem IPv4 CIDR-Block ist, der für das Subnetz des Network Load Balancers angegeben wurde. Beispiel:
oci-network-load-balancer.oraclecloud.com/assigned-private-ipv4: "10.0.0.1"
Um eine IPv6-Adresse anzugeben, die einem Network Load Balancer zugewiesen werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "<ipv6-address>"
wobei <ipv6-address>
eine gültige ULA- oder GUA-Adresse IPv6 aus dem IPv6-CIDR-Block ist, der für das Subnetz des Network Load Balancers angegeben wurde. Beispiel:
oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "2607:9b80:9a0a:9a7e:abcd:ef01:2345:6789"
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/assigned-private-ipv4: "10.0.0.1"
oci-network-load-balancer.oraclecloud.com/assigned-ipv6: "fd8a:4b3c:7d91:abcd::1"
spec:
type: LoadBalancer
ipFamilyPolicy: RequireDualStack
ipFamilies:
- IPv6
- IPv4
ports:
- port: 80
selector:
app: nginx
Es liegt in Ihrer Verantwortung, eine gültige IP-Adresse anzugeben. Damit eine IP-Adresse gültig ist, müssen die folgenden Bedingungen erfüllt sein:
- Die IP-Adresse muss das richtige Format für die von Ihnen verwendete Anmerkung aufweisen (IPv4 oder IPv6).
- Die IP-Adresse muss aus dem entsprechenden CIDR-Block stammen, der für das Subnetz des Network Load Balancers angegeben ist.
- Die IP-Adresse darf nicht bereits von einer anderen Ressource verwendet werden.
Beachten Sie Folgendes:
- Wenn die IP-Adresse nicht das richtige Format hat oder nicht aus dem entsprechenden CIDR-Block stammt, wird die Anforderung zum Erstellen des Network Load Balancers nicht akzeptiert.
- Wenn die IP-Adresse das richtige Format und den entsprechenden CIDR-Block aufweist, die IP-Adresse jedoch bereits von einer anderen Ressource verwendet wird, wird die Anforderung zum Erstellen des Network Load Balancers akzeptiert. Die verknüpfte Arbeitsanforderung ist jedoch nicht erfolgreich, und das Compartment enthält einen Network Load Balancer mit dem Status "Nicht erfolgreich".
- Wenn die IP-Adresse gültig ist, wird der Network Load Balancer mit der angegebenen IP-Adresse erstellt, die ihm zugewiesen ist.
Private IP-Adresse eines Network Load Balancers verbergen
Wenn Kubernetes Engine einen öffentlichen Oracle Cloud Infrastructure-Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, weist der Network Load Balancer-Service dem Network Load Balancer sowohl eine öffentliche IP-Adresse als auch eine private IP-Adresse zu. Die private IP-Adresse wird für Health Checks und Port Address Translation (PAT) verwendet, kann jedoch keinen externen Traffic von außerhalb des VCN (einschließlich aus dem öffentlichen Internet) empfangen.
Um die öffentlichen und privaten IP-Adressen anzuzeigen, die der Network Load Balancer-Service dem Network Load Balancer zugewiesen hat, geben Sie den Befehl kubectl get service
(oder Ähnliches) ein. Beispiel:
kubectl get service my-nginx-svc -o json | jq .status
{
"loadBalancer": {
"ingress": [
{
"ip": "203.0.113.2"
},
{
"ip": "10.30.3.24"
}
]
}
}
In einigen Situationen möchten Sie möglicherweise nur die öffentliche IP-Adresse des Network Load Balancers angeben und die private IP-Adresse ausblenden. Beispiel:
- Sie können einen benutzerfreundlichen DNS-Namen für den Network Load Balancer angeben, wenn Sie das Add-on ExternalDNS verwenden, indem Sie die Annotation
external-dns.alpha.kubernetes.io/hostname
in das Manifest des Kubernetes-Service vom Typ LoadBalancer aufnehmen. ExternalDNS erstellt einen DNS-Datensatz für den Network Load Balancer im externen DNS-Provider, den Sie für das Cluster konfiguriert haben. Der DNS-Datensatz ordnet den DNS-Namen sowohl der öffentlichen IP-Adresse als auch der privaten IP-Adresse zu. Wenn also externer Traffic den DNS-Namen verwendet, besteht die Möglichkeit, dass Traffic an die private IP-Adresse des Network Load Balancers weitergeleitet wird, obwohl die private IP-Adresse keinen externen Traffic empfangen kann. - Sie können eine Automatisierung einrichten, die den Befehl
kubectl get service
(oder ähnliches) verwendet, um die IP-Adresse des Network Load Balancers abzurufen. Wenn Ihr Anwendungsfall das Routing von externem Traffic enthält, möchten Sie nur die öffentliche IP-Adresse des Network Load Balancers. Standardmäßig gibt der Befehlkubectl get service
jedoch sowohl die öffentliche IP-Adresse des Network Load Balancers als auch die zugehörige private IP-Adresse zurück.
Um anzugeben, dass der Befehl kubectl get service
(oder ein ähnliches) nur die öffentliche IP-Adresse des Network Load Balancers zurückgibt, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"
Beachten Sie, dass "false"
der Standardwert der oci-network-load-balancer.oraclecloud.com/external-ip-only
-Annotation ist. Wenn Sie die Annotation nicht explizit in die Servicedefinition aufnehmen, gibt der Befehl kubectl get service
(oder ähnlich) sowohl die öffentliche IP-Adresse des Network Load Balancers als auch die private IP-Adresse zurück.
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/external-ip-only: "true"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx
Wenn Sie die oci-network-load-balancer.oraclecloud.com/external-ip-only: "true"
-Annotation in das Manifest aufnehmen und den Befehl kubectl get service
(oder ähnlich) eingeben, wird nur die öffentliche IP-Adresse zurückgegeben. Beispiel:
kubectl get service my-nginx-svc -o json | jq .status
{
"loadBalancer": {
"ingress": [
{
"ip": "203.0.113.2"
}
]
}
}
Verhindern, dass Knoten Traffic verarbeiten
Sie können bestimmte Worker-Knoten aus der Liste der Backend-Server im Backend-Set eines Oracle Cloud Infrastructure-Load-Balancers oder Network Load Balancers ausschließen. Weitere Informationen finden Sie unter node.kubernetes.io/exclude-from-external-load-balancers.
Load Balancer und Network Load Balancer taggen
Sie können einem Load Balancer oder Network Load Balancer Tags hinzufügen, die von der Kubernetes-Engine für einen Kubernetes-Service des Typs LoadBalancer bereitgestellt werden. Mit Tagging können Sie verschiedene Ressourcen über Compartments hinweg gruppieren. Außerdem können Sie Ressourcen mit Ihren eigenen Metadaten annotieren. Siehe Tags auf Load Balancer anwenden.
Proxyprotokoll aktivieren
Wenn Kubernetes Engine einen Oracle Cloud Infrastructure-Load Balancer oder Network Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, können Sie angeben, ob das Proxyprotokollfeature mit TCP-basierten Listenern aktiviert werden soll. Wenn Sie das Proxyprotokoll aktivieren, können Transportverbindungsinformationen wie die IP-Adresse eines Clients sicher über mehrere Proxylayer an den Backend-Server übertragen werden. Die folgenden Proxyprotokollversionen sind verfügbar:
- Version 1, die einen textbasierten Header verwendet, um Informationen über Proxys weiterzuleiten, und ist am besten für kleine Implementierungen geeignet.
- Version 2, die einen textbasierten und binären Header für mehr Effizienz beim Erstellen und Parsen verwendet und am besten für größere Implementierungen geeignet ist.
Load Balancer, die von der Kubernetes Engine bereitgestellt werden, unterstützen Proxyprotokollversion 1 und Version 2. Network Load Balancer, die von der Kubernetes Engine bereitgestellt werden, unterstützen Proxyprotokollversion 2.
Weitere Informationen:
- Informationen zu Load Balancern und dem Proxyprotokollfeature finden Sie unter Proxyprotokoll für Load Balancer.
- Informationen zu Network Load Balancern und der Proxyprotokollfunktion finden Sie unter Proxy Protocol für Network Load Balancer.
Um das Proxyprotokoll für Load Balancer zu aktivieren, die von Kubernetes Engine bereitgestellt werden, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-connection-proxy-protocol-version: "<value>"
Hierbei ist "<value>"
einer der folgenden Werte:
"1"
, um anzugeben, dass Sie Proxyprotokollversion 1 auf allen Listenern des Load Balancers aktivieren möchten."2"
, um anzugeben, dass Sie Proxyprotokollversion 2 auf allen Listenern des Load Balancers aktivieren möchten.
Nachdem Sie die Proxyprotokollfunktion für Load Balancer aktiviert haben, beachten Sie Folgendes:
- Sie können das Proxyprotokollfeature in Load Balancer Listenern nicht deaktivieren.
- Sie können zwischen Proxyprotokollversion 1 und Proxyprotokollversion 2 wechseln, indem Sie die Annotation aktualisieren.
- Wenn Sie anschließend die Annotation aus dem Manifest entfernen oder die Annotation aufheben (indem Sie
"<value>"
auf""
setzen), wird die zuletzt erfolgreich angewendete Einstellung für"<value>"
in allen Listenern beibehalten.
Um das Proxyprotokoll für Network Load Balancer zu aktivieren, die von Kubernetes Engine bereitgestellt werden, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci-network-load-balancer.oraclecloud.com/is-ppv2-enabled: "<value>"
Hierbei ist "<value>"
einer der folgenden Werte:
"true"
, um anzugeben, dass Sie Proxyprotokollversion 2 auf allen Listenern des Network Load Balancers aktivieren möchten."false"
, um anzugeben, dass Sie Proxyprotokollversion 2 auf allen Listenern des Network Load Balancers deaktivieren möchten.
Nachdem Sie die Proxyprotokollfunktion für Network Load Balancer aktiviert haben, beachten Sie Folgendes:
- Sie können das Proxyprotokollfeature in Network Load Balancer Listenern deaktivieren, indem Sie
"<value>"
auf"false"
setzen. - Wenn Sie anschließend die Annotation aus dem Manifest entfernen oder die Annotation aufheben (indem Sie
"<value>"
auf""
setzen) oder einen ungültigen Wert (z.B."enable"
) für die Annotation angeben, wird die zuletzt erfolgreich angewendete Einstellung für"<value>"
auf allen Listenern beibehalten.