OCI Load Balancer für Kubernetes-Services vom Typ LoadBalancer bereitstellen
Erfahren Sie, wie Sie mit der Kubernetes-Engine (OKE) einen OCI-Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellen.
Ein Oracle Cloud Infrastructure-(OCI-)Load Balancer ist ein OSI-Layer-4-(TCP-) und Layer-7-(HTTP-)Proxy, der Features wie SSL-Beendigung und erweiterte HTTP-Routing-Policys unterstützt. Es bietet höchste Flexibilität und eine reaktionsschnelle Skalierung nach oben und unten. Sie wählen eine benutzerdefinierte minimale Bandbreite und eine optionale maximale Bandbreite, sowohl zwischen 10 Mbps und 8.000 Mbps. Die minimale Bandbreite ist immer verfügbar und bietet sofortige Bereitschaft für Ihre Workloads.
Weitere Informationen zu OCI-Load Balancer finden Sie unter Überblick über Load Balancer.
Durch das Provisioning eines OCI Load Balancers für einen Kubernetes-Service vom Typ LoadBalancer können Sie:
- Lastausgleich Transport Layer 4 und Layer 7 (TCP und HTTP) Verkehr
- SSL/TLS am Load Balancer beenden
Wenn die Kubernetes-Engine einen OCI-Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, werden standardmäßig automatisch Sicherheitsregeln erstellt, um eingehenden und ausgehenden Traffic zum und vom Subnetz des Load Balancers zuzulassen. Siehe Sicherheitsregeln für Load Balancer und Network Load Balancer.
Mit OCI Load Balancer-Metriken können Sie den Zustand eines OCI Load Balancers überwachen, der für einen Kubernetes-Service vom Typ LoadBalancer bereitgestellt wird (siehe Load Balancer-Metriken).
Annotation für einen OCI Load Balancer angeben
oci.oraclecloud.com/load-balancer-type: "lb"
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.
Beispiel: Beachten Sie die folgende Konfigurationsdatei: nginx_lb.yaml. Sie definiert ein Deployment (kind: Deployment) für die nginx-App, gefolgt von einer Definition eines Service vom Typ LoadBalancer (type: LoadBalancer), der HTTP-Traffic an Port 80 für die nginx-App verteilt.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: my-nginx-svc
labels:
app: nginx
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxDer erste Teil der Konfigurationsdatei definiert ein Nginx-Deployment, wobei angefordert wird, dass es auf 3 Pods gehostet wird, auf denen das nginx:latest-Image ausgeführt wird. Außerdem muss der Traffic zu den Containern an Port 80 akzeptiert werden.
Der zweite Teil der Konfigurationsdatei definiert den Nginx-Service, der mit dem LoadBalancer-Typ den Nginx-Traffic an Port 80 auf die verfügbaren Pods verteilt.
Um bei bestehender Verbindung mit dem Kubernetes-Cluster das Deployment und den Service zu erstellen, die in nginx_lb.yaml definiert sind, geben Sie folgenden Befehl ein:
kubectl apply -f nginx_lb.yamlNach erfolgreicher Erstellung des Deployments und des Load Balancers gibt dieser Befehl Folgendes aus:
deployment "my-nginx" created
service "my-nginx-svc" created
Es kann einige Minuten dauern, bis der Load Balancer vom Status "Ausstehend" zur vollständigen Betriebsbereitschaft wechselt. Sie können den aktuellen Status Ihres Clusters anzeigen, indem Sie Folgendes eingeben:
kubectl get allDie Ausgabe des obigen Befehls zeigt den aktuellen Status an:
NAME READY STATUS RESTARTS AGE
po/my-nginx-431080787-0m4m8 1/1 Running 0 3m
po/my-nginx-431080787-hqqcr 1/1 Running 0 3m
po/my-nginx-431080787-n8125 1/1 Running 0 3m
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
svc/kubernetes 203.0.113.1 <NONE> 443/TCP 3d
svc/my-nginx-svc 203.0.113.7 192.0.2.22 80:30269/TCP 3m
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deploy/my-nginx 3 3 3 3 3m
NAME DESIRED CURRENT READY AGE
rs/my-nginx-431080787 3 3 3 3m
Die Ausgabe zeigt, dass das my-nginx-Deployment auf 3 Pods (den po/my-nginx-Einträgen) ausgeführt wird, dass der Load Balancer ausgeführt wird (svc/my-nginx-svc) und über eine externe IP (192.0.2.22) verfügt, mit der Clients eine Verbindung zu der auf den Pods bereitgestellten App herstellen können.
SSL/TLS beim Load Balancer beenden (Frontend SSL)
Wenn Sie einen Oracle Cloud Infrastructure-(OCI-)Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellen, können Sie ihn so konfigurieren, dass er SSL-/TLS-Traffic beendet. Diese Konfiguration, die oft als Frontend-SSL bezeichnet wird, stellt sicher, dass verschlüsselter Datenverkehr aus dem Internet beim Load Balancer entschlüsselt wird, bevor er an Worker-Knoten weitergeleitet wird.
Durch die Implementierung einer SSL-Beendigung auf Load-Balancer-Ebene wird der intensive Entschlüsselungsprozess von Anwendungspods ausgelagert, wodurch die Zertifikatsverwaltung vereinfacht und die Backend-Performance verbessert wird.
Beachten Sie, dass Sie die vollständige Point-to-Point-SSL-Verschlüsselung zwischen Clients und Anwendungspods implementieren können, die auf Worker-Knoten ausgeführt werden. Dazu konfigurieren Sie die SSL-Beendigung am Load Balancer (wie in diesem Abschnitt beschrieben) und implementieren Backend-SSL zwischen dem Load Balancer und den Worker-Knoten (siehe SSL/TLS zwischen Load Balancer und Worker-Knoten implementieren (Backend-SSL)).
Zertifikatverwaltungsmethode für Frontend-SSL auswählen
Je nach Ihren Sicherheitsanforderungen und der Art und Weise, wie Sie Ihren Zertifikatslebenszyklus verwalten, wählen Sie eine der folgenden Methoden, um Frontend SSL zu implementieren:
-
Kubernetes-Secrets: Am besten für Zertifikate, die im Cluster oder von Drittanbietern (wie Let's Encrypt) verwaltet werden. Ausführliche Implementierungsschritte finden Sie unter SSL/TLS beim Load Balancer mit Kubernetes-Secrets beenden.
-
OCI Certificates-Service: Diese Methode wird für Produktionsumgebungen empfohlen und nutzt das native Zertifikatsmanagement von OCI, um Features wie die automatische Zertifikatsrotation zu aktivieren, ohne Manifestupdates zu benötigen. Weitere Informationen finden Sie unter SSL/TLS beim Load Balancer mit OCI Certificates-Service beenden.
Beachten Sie, dass sich diese Methoden für einen bestimmten Service des Typs LoadBalancer gegenseitig ausschließen. Sie müssen entweder ein Kubernetes-Secret oder eine native OCI-Zertifikatszuordnung auswählen, um Konfigurationskonflikte zu vermeiden.
Cipher Suites und Protokolle für Listener konfigurieren
Unabhängig von der gewählten Zertifikatsverwaltungsmethode können Sie die Cipher Suite und die SSL-Protokolle angeben, die der Load Balancer für den Frontend Listener verwendet.
Cipher Suites bestimmen die Sicherheit, Kompatibilität und Geschwindigkeit des HTTPS-Traffics (weitere Informationen finden Sie unter Cipher Suites für Load Balancer). Um die Cipher Suite anzugeben, die mit dem Frontend Listener des Load Balancers verwendet werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/oci-load-balancer-ssl-config: '{"CipherSuiteName":"<cipher-suite-name>", "Protocols":["<tls-version>"]}'Hierbei gilt:
-
"CipherSuiteName":"<cipher-suite-name>"ist der Name einer vordefinierten Cipher Suite, die von Oracle Cloud Infrastructure vorkonfiguriert ist (siehe Vordefinierte Cipher Suites für Load Balancer) oder einer Cipher Suite, die Sie selbst erstellt haben. Beispiel:"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1" -
"Protocols":["<tls-version>"]gibt eine oder mehrere TLS-Versionen in einer durch Komma getrennten Liste an. Beispiel:"Protocols":["TLSv1.2", "TLSv1.3"]
Beispiel:
oci.oraclecloud.com/oci-load-balancer-ssl-config: '{"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1", "Protocols":["TLSv1.2", "TLSv1.3"]}'
Wenn Sie die Annotation oci.oraclecloud.com/oci-load-balancer-ssl-config nicht einschließen, aber die Annotation service.beta.kubernetes.io/oci-load-balancer-tls-secret einschließen, wird die Cipher-Suite oci-default-ssl-cipher-suite-v1 verwendet.
SSL/TLS im Load Balancer mit Kubernetes-Secrets beenden
Mit Kubernetes-Secrets können Sie SSL-/TLS-Zertifikate lokal im Cluster verwalten. Diese Methode ist Standard für Zertifikate, die manuell oder von Drittanbietern (z. B. Let's Encrypt) verwaltet werden. Diese Methode bietet zwar direkte Kontrolle über die Zertifikatsdaten in Kubernetes, erfordert jedoch manuelle Updates des Secrets, wenn ein Zertifikat abläuft.
Dieses Beispiel bietet eine Schritt-für-Schritt-Anleitung der Konfiguration und Erstellung eines Load Balancers mit SSL-Unterstützung.
Mit der Konfigurationsdatei nginx-demo-svc-ssl.yaml wird ein Nginx-Deployment definiert und über einen Load Balancer bereitgestellt, der HTTP auf Port 80 und HTTPS auf Port 443 verwendet. Dieses Beispiel erstellt einen Oracle Cloud Infrastructure-Load Balancer, indem ein Service mit dem Typ LoadBalancer (type: LoadBalancer) definiert wird.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
kind: Service
apiVersion: v1
metadata:
name: nginx-service
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
oci.oraclecloud.com/oci-load-balancer-listener-ssl-config: '{"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1", "Protocols":["TLSv1.3"]}'
service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 80Die Annotationen des Load Balancers sind von besonderer Bedeutung, wie hier beschrieben.
Die Ports, auf denen https-Traffic unterstützt werden soll, werden durch den Wert der service.beta.kubernetes.io/oci-load-balancer-ssl-ports-Annotation definiert. Sie können mehrere SSL-Ports deklarieren, indem Sie eine durch Komma getrennte Liste für den Wert der Annotation verwenden. Beispiel: Sie können den Wert der Annotation auf "443, 3000" setzen, um SSL auf den Ports 443 und 3000 zu unterstützen.
Die Cipher Suite, die mit dem Load Balancer verwendet werden soll, wird durch den Wert der oci.oraclecloud.com/oci-load-balancer-listener-ssl-config-Annotation definiert.
Das erforderliche TLS-Secret ssl-certificate-secret muss in Kubernetes erstellt werden. In diesem Beispiel wird ein selbstsigniertes Zertifikat erstellt und verwendet. Das häufigste Szenario in einer Produktionsumgebung besteht jedoch darin, ein öffentliches Zertifikat zu verwenden, das von einer Certificate Authority signiert wurde.
Der folgende Befehl erstellt ein selbstsigniertes Zertifikat tls.crt mit dem entsprechenden Schlüssel tls.key:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"
Nachdem Sie das Zertifikat erstellt haben, müssen Sie es mit seinem Schlüssel als Secret in Kubernetes speichern. Der Name des Secrets muss mit dem Namen aus der service.beta.kubernetes.io/oci-load-balancer-tls-secret-Annotation der Load-Balancer-Definition übereinstimmen. Mit dem folgenden Befehl kann ein TLS-Secret in Kubernetes erstellt werden, dessen Schlüssel- und Zertifikatwerte durch --key bzw. --cert festgelegt werden.
kubectl create secret tls ssl-certificate-secret --key tls.key --cert tls.crt
Sie müssen das Kubernetes-Secret erstellen, bevor Sie den Service erstellen können, da der Service in seiner Definition auf das Secret verweist. Erstellen Sie den Service mit dem folgenden Befehl:
kubectl create -f manifests/demo/nginx-demo-svc-ssl.yaml
Sie können den Service beobachten und warten, bis dem Nginx-Service (nginx-service) eine öffentliche IP-Adresse (EXTERNAL-IP) zugewiesen wird. Geben Sie dazu Folgendes ein:
kubectl get svc --watchIn der Ausgabe des obigen Befehls wird die Load-Balancer-IP angezeigt, mit der die Verbindung zum Service hergestellt werden soll.
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-service 192.0.2.1 198.51.100.1 80:30274/TCP 5m
Der Load Balancer wird jetzt ausgeführt, d.h. der Service kann jetzt wie folgt aufgerufen werden:
- Mit HTTP, indem Sie Folgendes eingeben:
curl http://198.51.100.1 - Mit HTTPS, indem Sie Folgendes eingeben:
curl --insecure https://198.51.100.1Aufgrund der Verwendung von selbstsignierten Zertifikaten in diesem Beispiel wird mit dem "
--insecure"-Kennzeichen über HTTPS auf den Service zugegriffen. Verwenden Sie dieses Kennzeichen nicht in einer Produktionsumgebung, in der das öffentliche Zertifikat von einer Certificate Authority signiert wurde.
Hinweis: Wenn ein Cluster gelöscht wird, wird ein beim Erstellen eines Service dynamisch erstellter Load Balancer nicht entfernt. Bevor Sie ein Cluster löschen, löschen Sie den Service. Dadurch wird der Load Balancer wiederum entfernt. Die Syntax für diesen Befehl lautet:
kubectl delete svc SERVICE_NAME
Beispiel: Um den Service aus dem vorherigen Beispiel zu löschen, geben Sie Folgendes ein:
kubectl delete svc nginx-service
TLS-Zertifikate vorhandener Load Balancer mit Kubernetes-Secrets aktualisieren
So aktualisieren Sie das TLS-Zertifikat eines vorhandenen Load Balancers:
- Rufen Sie ein neues TLS-Zertifikat ab. Das häufigste Szenario in einer Produktionsumgebung besteht darin, ein öffentliches Zertifikat zu verwenden, das von einer Certificate Authority signiert wurde.
-
Erstellen Sie ein neues Kubernetes-Secret. Beispiel: Geben Sie Folgendes ein:
kubectl create secret tls new-ssl-certificate-secret --key new-tls.key --cert new-tls.crt - Ändern Sie die Servicedefinition so, dass das neue Kubernetes-Secret referenziert wird, indem Sie die Annotation
service.beta.kubernetes.io/oci-load-balancer-tls-secretin der Servicekonfiguration ändern. Beispiel:apiVersion: v1 kind: Service metadata: name: nginx-service annotations: service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443" service.beta.kubernetes.io/oci-load-balancer-tls-secret: new-ssl-certificate-secret spec: selector: app: nginx type: LoadBalancer ports: - name: http port: 80 targetPort: 80 - name: https port: 443 targetPort: 80 - Aktualisieren Sie den Service. Beispiel: Geben Sie Folgendes ein:
kubectl apply -f new-nginx-demo-svc-ssl.yaml
SSL/TLS beim Load Balancer mit OCI Certificates-Service beenden
Mit dem OCI Certificates-Service können Sie SSL-/TLS-Zertifikate nativ in Oracle Cloud Infrastructure verwalten. Diese Methode wird für Produktionsumgebungen empfohlen, da der OCI-Load Balancer erneuerte Zertifikate automatisch konsumieren kann und mehrere Vorteile der Unternehmensklasse bietet:
- Rotation ohne Ausfallzeit: Wenn ein Zertifikat in OCI erneuert wird, nimmt der Load Balancer die neue Version automatisch auf, ohne dass eine Manifestanwendung erforderlich ist.
- Zentralisiertes Management: Verwalten Sie alle Frontend-Zertifikate über ein einziges OCI-Dashboard und nicht über mehrere Kubernetes-Namespaces hinweg.
- Verbesserte Sicherheit: Private Schlüssel werden sicher in OCI gespeichert und nie als Klartext im Kubernetes-Cluster angezeigt.
Voraussetzungen für die Integration von OCI Certificates
Um diese native Integration verwenden zu können, müssen Sie sicherstellen, dass Folgendes vorhanden ist:
-
IAM-Policy: Erteilen Sie dem Resource Principal des Clusters die Berechtigung zur Verwaltung von Zertifikaten im Compartment:
Allow any-user to manage certificate-authority-family in compartment <compartment-name> where ALL {request.principal.type = 'cluster'} -
Zertifikats-OCID: Sie müssen die OCID des Blattzertifikats haben, das der Load Balancer Clients bereitstellen soll. Das Zertifikat muss sich in derselben Region wie der Load Balancer befinden.
- Ressourcenstatus: Das Zertifikat muss erstellt oder in den OCI Certificates-Service importiert werden und den Status Aktiv aufweisen.
Zertifikatszuordnung konfigurieren
Da ein OCI-Load Balancer mehrere Zertifikate für verschiedene Listener unterstützen kann, müssen Sie eine ConfigMap verwenden, um Listener-Ports ihren jeweiligen OCI Certificates-Zertifikatsressourcen zuzuordnen. Wenn Sie die ConfigMap anwenden, wird sofort ein Update des OCI-Load Balancers ausgelöst.
ConfigMap erstellen: Erstellen Sie eine
Beispiel:ConfigMapim selben Namespace wie der Service vom Typ LoadBalancer, und definieren Sie eine Zuordnung, bei der der der Schlüssel der Listener-Port ist und der Wert ein JSON-Array ist, das die OCID des Blattzertifikats enthält.apiVersion:v1 kind:ConfigMap metadata: name:lb-tls-mapping data: "443":"[\"ocid1.certificate.oc1.iad.example_leaf_ocid\"]"-
Service mit Hinweis versehen: Fügen Sie die Annotation
oci-load-balancer.oraclecloud.com/tls-certificate-mapzum Manifest des Service vom Typ LoadBalancer hinzu, um sie mit der AnnotationConfigMapzu verknüpfen.
Hinweis: Die Annotationen tls-certificate-map und oci-load-balancer-tls-secret schließen sich gegenseitig aus. Wenn beide angegeben sind, kann der Load Balancer keinen sslConfiguration violation-Fehler bereitstellen.
Beispiel für Frontend-SSL-Manifest
apiVersion: v1
kind: Service
metadata:
name: secure-frontend-service
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
oci-load-balancer.oraclecloud.com/tls-certificate-map: "lb-tls-mapping"
spec:
selector:
app: my-app
type: LoadBalancer
ports:
- name: https
port: 443
targetPort: 8080
---
apiVersion: v1
kind: ConfigMap
metadata:
name: lb-tls-mapping
data:
"443": "[\"ocid1.certificate.oc1.iad.example_leaf_ocid\"]"
SSL/TLS zwischen Load Balancer und Worker-Knoten implementieren (Backend-SSL)
Wenn Kubernetes Engine einen Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellt, können Sie angeben, dass Sie SSL zwischen dem Load Balancer und den Backend-Servern (Worker-Knoten) im Backend-Set implementieren möchten. Diese Konfiguration wird als Backend-SSL bezeichnet. Um Backend-SSL zu implementieren, verknüpfen Sie ein SSL-Zertifikat mit dem Backend-Set des Load Balancers.
Beachten Sie, dass Sie die vollständige Point-to-Point-SSL-Verschlüsselung zwischen Clients und Anwendungspods implementieren können, die auf Worker-Knoten ausgeführt werden. Dazu verknüpfen Sie ein SSL-Zertifikat mit dem Backend-Set des Load Balancers (wie in diesem Abschnitt beschrieben), und erstellen einen Load Balancer mit SSL-Beendigung (siehe SSL/TLS beim Load Balancer beenden (Frontend-SSL)).
Während die Frontend-SSL-Beendigung die Verbindung zwischen dem Client und dem Load Balancer sichert, sichert Backend-SSL die Verbindung zwischen dem Load Balancer und den Worker-Knoten. Diese Konfiguration stellt sicher, dass der Datenverkehr auch während der Übertragung durch das interne virtuelle Cloud-Netzwerk (VCN) verschlüsselt bleibt. Dadurch erhalten Sie eine zusätzliche Verteidigungsebene.
Wenn Sie Backend-SSL implementieren, entschlüsselt der Load Balancer eingehenden Traffic mit einem Frontend-Zertifikat, führt alle erforderlichen Layer-7-Inspektionen oder -Routing aus und verschlüsselt den Traffic dann erneut, bevor er an die Zielpods gesendet wird. Dies ist eine gängige Anforderung für Umgebungen mit hoher Sicherheit, bei denen der Klartextverkehr bei jedem Hop eingeschränkt wird.
Zertifikatsverwaltungsmethode für Backend-SSL
Wenn Sie Backend-SSL implementieren, verwenden Sie Kubernetes-Secrets, um die Backend-Verschlüsselung mit Zertifikaten zu verwalten, die im Cluster gespeichert sind. Diese Methode erfordert manuelle Aktualisierungen des Secrets und Manifests, wenn Zertifikate ablaufen. Implementierungsdetails finden Sie unter SSL/TLS mit Kubernetes-Secrets zwischen Load Balancer und Worker-Knoten implementieren.
Beachten Sie, dass Anwendungspods so konfiguriert werden müssen, dass SSL-/TLS-Verbindungen auf ihren Zielports akzeptiert und beendet werden.
Cipher Suites und Protokolle für Backend-Sets konfigurieren
Sie können die Cipher Suite und die SSL-Protokolle angeben, die der Load Balancer für das Backend-Set verwendet.
Cipher Suites bestimmen die Sicherheit, Kompatibilität und Geschwindigkeit des HTTPS-Traffics (weitere Informationen finden Sie unter Cipher Suites für Load Balancer). Um die Cipher Suite anzugeben, die mit dem Backend-Set des Load Balancers verwendet werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
oci.oraclecloud.com/oci-load-balancer-backendset-ssl-config: '{"CipherSuiteName":"<cipher-suite-name>", "Protocols":["<tls-version>"]}'Hierbei gilt:
-
"CipherSuiteName":"<cipher-suite-name>"ist der Name einer vordefinierten Cipher Suite, die von Oracle Cloud Infrastructure vorkonfiguriert ist (siehe Vordefinierte Load-Balancer-Cipher-Suites) oder einer Cipher Suite, die Sie selbst erstellt haben. Beispiel:"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1" -
"Protocols":["<tls-version>"]gibt eine oder mehrere TLS-Versionen in einer kommagetrennten Liste an. Beispiel:"Protocols":["TLSv1.2", "TLSv1.3"]
Beispiel:
oci.oraclecloud.com/oci-load-balancer-backendset-ssl-config: '{"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1", "Protocols":["TLSv1.2", "TLSv1.3"]}'
Wenn Sie die oci.oraclecloud.com/oci-load-balancer-backendset-ssl-config-Annotation nicht einschließen, aber die service.beta.kubernetes.io/oci-load-balancer-tls-backendset-secret-Annotation einschließen, wird die Cipher Suite "oci-wider-compatible-ssl-cipher-suite-v1" verwendet.
SSL/TLS zwischen Load Balancer und Worker-Knoten mit Kubernetes-Secrets implementieren
Mit Kubernetes-Secrets können Sie SSL-/TLS-Zertifikate lokal im Cluster für die Backend-Kommunikation verwalten. Diese Methode wird verwendet, wenn Sie Ihre eigenen Zertifikate verwalten oder eine Drittanbieter-Certificate-Authority verwenden, um den Link zwischen dem Load Balancer und den Worker-Knoten zu sichern. Es stellt sicher, dass der interne Datenverkehr verschlüsselt ist, erfordert jedoch eine manuelle Rotation des im Secret gespeicherten CA-Zertifikats.
Um das Zertifikat anzugeben, das mit dem Backend-Set verknüpft werden soll, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-tls-backendset-secret: <value>Dabei ist <value> der Name eines Kubernetes-Secrets, das Sie zur Aufnahme eines signierten Zertifikats und des Private Keys für das Zertifikat erstellt haben. Beachten Sie, dass Sie das Kubernetes-Secret erstellen müssen, bevor Sie den Service erstellen können, da der Service in seiner Definition auf das Secret verweist.
Im folgenden Beispiel wird ein selbstsigniertes Zertifikat erstellt und verwendet, das in der Regel für die interne Kommunikation zwischen dem Load Balancer und dem Backend-Set akzeptabel ist. Auf Wunsch können Sie jedoch ein öffentliches Zertifikat verwenden, das von einer Certificate Authority signiert wurde.
Beispiel:
-
Generieren Sie einen Private Key, indem Sie Folgendes eingeben:
openssl genrsa -out ca.key 2048 -
Generieren Sie ein Zertifikat, indem Sie Folgendes eingeben:
openssl req -x509 -new -nodes -key ca.key -subj "/CN=nginxsvc/O=nginxsvc" -days 10000 -out ca.crt -
Speichern Sie das Zertifikat und den Schlüssel als Secret in Kubernetes, indem Sie Folgendes eingeben:
kubectl create secret generic ca-ser-secret --from-file=tls.crt=tls.crt --from-file=tls.key=tls.key --from-file=ca.crt=ca.crt - Definieren Sie ein Nginx-Deployment, und stellen Sie es über einen Load Balancer bereit, der HTTP auf Port 80 und HTTPS auf Port 443 bedient.
(type: LoadBalancer) definiert wird. apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
metadata:
name: nginx-service
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
oci.oraclecloud.com/oci-load-balancer-backendset-ssl-config: '{"CipherSuiteName":"oci-default-http2-tls-12-13-ssl-cipher-suite-v1", "Protocols":["TLSv1.2", "TLSv1.3"]}'
service.beta.kubernetes.io/oci-load-balancer-tls-backendset-secret: ca-ser-secret
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80
- name: https
port: 443
targetPort: 443
Die Kommunikation zwischen dem Load Balancer und den Worker-Knoten im Backend-Set wird mit dem Schlüssel und Zertifikat verschlüsselt, das im zuvor erstellten Kubernetes-Secret ca-ser-secret gespeichert ist.
Alternative Load-Balancer-Ausprägungen angeben
Die Ausprägung eines Oracle Cloud Infrastructure Load Balancers gibt die maximale Gesamtbandbreite an (d.h. Ingress plus Egress). Standardmäßig werden Load Balancer mit einer Ausprägung von 100 Mbit/s erstellt. Andere Ausprägungen sind verfügbar, einschließlich 400 Mbit/s und 8000 Mbit/s.
Um eine alternative Ausprägung für einen Load Balancer anzugeben, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-shape: <value>Hierbei ist value die Bandbreite der Ausprägung (Beispiel: 100 Mbit/s, 400 Mbit/s, 8000 Mbit/s).
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-shape: 400Mbps
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxIn der Region für die angegebene Ausprägung muss eine ausreichende Quota für den Load Balancer verfügbar sein. Geben Sie den folgenden kubectl-Befehl ein, um sicherzustellen, dass das erfolgreiche Erstellen des Load Balancers nicht aufgrund einer unzureichenden Quota verhindert wurde:
kubectl describe service <service-name>Beachten Sie, dass Oracle empfiehlt, Kubernetes-Services des Typs LoadBalancer als kosteneffiziente flexible Load Balancer und nicht als (dynamische) Load Balancer mit fester Ausprägung zu implementieren (siehe Flexible Load Balancer-Ausprägungen angeben).
Flexible Load-Balancer-Ausprägungen angeben
Die Ausprägung eines Oracle Cloud Infrastructure Load Balancers gibt die maximale Gesamtbandbreite an (d.h. Ingress plus Egress). Wie unter Alternative Load-Balancer-Ausprägungen angeben beschrieben, können Sie verschiedene Ausprägungen für Load Balancer angeben.
Darüber hinaus können Sie eine flexible Ausprägung für einen Oracle Cloud Infrastructure Load Balancer angeben, indem Sie eine minimale und eine maximale Bandbreite für den Load Balancer definieren.
Um eine flexible Ausprägung für einen Load Balancer anzugeben, fügen Sie die folgenden Annotationen im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "<min-value>"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "<max-value>"Hierbei gilt:
-
"<min-value>"ist die minimale Bandbreite für den Load Balancer in Mbps (z.B. "10") -
"<max-value>"ist die maximale Bandbreite für den Load Balancer in Mbps (z.B. "100")
Hinweis: Die Angabe von Bandbreitenwerten für flexible Load-Balancer-Ausprägungen enthält keine Maßeinheit (im Gegensatz zu vordefinierten Ausprägungen). Geben Sie beispielsweise die minimale Bandbreite als 10 und nicht als 10Mbps an.
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-shape: "flexible"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxLoad-Balancer-Verbindungstimeout angeben
Beim Provisioning eines Oracle Cloud Infrastructure-Load Balancers für einen Kubernetes-Service des Typs LoadBalancer können Sie die maximal zulässige Leerlaufzeit (in Sekunden) zwischen zwei aufeinanderfolgenden Empfangsvorgängen oder zwei aufeinanderfolgenden Sendevorgängen zwischen Client- und Backend-Servern angeben.
Um explizit eine maximale Leerlaufzeit anzugeben, fügen Sie die folgende Annotation im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-connection-idle-timeout: <value>Hierbei gibt value die Anzahl der Sekunden an.
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-connection-idle-timeout: 100
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxWenn Sie nicht explizit eine maximale Leerlaufzeit angeben, wird ein Standardwert verwendet. Der Standardwert hängt vom Listener-Typ ab:
- Für TCP-Listener beträgt die standardmäßige maximale Leerlaufzeit 300 Sekunden.
- Für HTTP-Listener beträgt die maximale Standardleerlaufzeit 60 Sekunden.
Maximale Anzahl zulässiger Load-Balancer-Verbindungen zu Backend-Servern angeben
Beim Provisioning eines Oracle Cloud Infrastructure-Load Balancers für einen Kubernetes-Service vom Typ LoadBalancer können Sie die maximale Anzahl gleichzeitiger Verbindungen angeben, die der Load Balancer für Backend-Server (Worker-Knoten) im Backend-Set herstellen darf.
Um die maximale Anzahl gleichzeitiger Verbindungen, die zwischen dem Load Balancer und jedem einzelnen Backend-Server im Backend-Set zulässig sind, explizit anzugeben, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Anmerkung hinzu:
oci-load-balancer.oraclecloud.com/backendset-backend-max-connections: "<value>"wobei <value> wie folgt ein gültiger Wert für die Anzahl der zulässigen Verbindungen ist:
- Eine Zahl zwischen
"256"und"65535"(einschließlich). Wenn Sie eine Zahl außerhalb dieses Bereichs angeben (außer0), wird ein Fehler zurückgegeben. "0". Wenn Sie 0 als maximale Anzahl zulässiger Verbindungen angeben, ist eine unbegrenzte Anzahl von Verbindungen zwischen dem Load Balancer und jedem einzelnen Backend-Server im Backend-Set zulässig.
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: nginx-service
annotations:
oci-load-balancer.oraclecloud.com/backendset-backend-max-connections: "256"
spec:
selector:
app: nginx
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 80Beachten Sie Folgendes:
- Die Zahl, die Sie für die Annotation angeben, wird nicht nur als Wert der Eigenschaft
backendMaxConnectionsdes Backend-Sets verwendet, sondern wird auch von jedem einzelnen Backend-Server als Wert der EigenschaftmaxConnectionsgeerbt. Daher wird die angegebene Anzahl als die Anzahl der Verbindungen verwendet, die zwischen dem Load Balancer und jedem einzelnen Backend-Server im Backend-Set zulässig sind, und nicht als die Gesamtzahl der Verbindungen, die zwischen dem Load Balancer und dem Backend-Set zulässig sind. - Wenn Sie die Annotation nicht in das Manifest aufnehmen (oder anschließend die Annotation entfernen), ist eine unbegrenzte Anzahl von Verbindungen zwischen dem Load Balancer und jedem Backend-Server zulässig.
- Zugehörige Informationen zur Angabe der maximalen Anzahl gleichzeitiger Verbindungen zum Listener des Load Balancers, die von derselben Ursprungs-IP-Adresse zulässig sind, finden Sie unter Maximale Listener-Verbindungsregeln angeben.
Regeln für maximale Anzahl Listener-Verbindungen festlegen
Wenn Kubernetes Engine einen Oracle Cloud Infrastructure-Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellt, können Sie die maximale Anzahl gleichzeitiger Verbindungen zum Listener des Load Balancers angeben, die von derselben Ursprungs-IP-Adresse zulässig sind. Mit einer Annotation definieren Sie einen standardmäßigen maximalen Listener-Verbindungswert, der für alle IP-Adressen gilt. Die Annotation definiert eine Regel für die maximale Listener-Verbindung für den Load Balancer. Wenn Sie diesen Standardhöchstwert nicht festlegen, gibt es keinen Grenzwert für die Anzahl der Verbindungen, die eine IP-Adresse an den Listener herstellen kann.
Weitere Informationen zu den Regeln für die maximale Listener-Verbindung finden Sie unter Max. Listener-Verbindungsregeln in der OCI Load Balancer-Dokumentation.
Um die maximale Anzahl gleichzeitiger Listener-Verbindungen anzugeben, die von derselben Ursprungs-IP-Adresse zulässig sind, fügen Sie die Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets im Metadatenabschnitt der Manifestdatei hinzu. Beachten Sie, dass Sie den Wert der Annotation wie folgt als formatierte JSON angeben:
oci.oraclecloud.com/oci-load-balancer-rule-sets: |
{
"<rule-set-name>": {
"items": [
{
"action": "IP_BASED_MAX_CONNECTIONS",
"maxConnectionsPerIp": <value>
}
]
}
}
Hierbei gilt:
-
<rule-set-name>ist die von Ihnen gewählte Bezeichnung für das Regelset (zwischen 1 und 32 Zeichen). Beispiel:IpLimitRuleSet. -
<value>ist die maximale Anzahl gleichzeitiger Listener-Verbindungen, die von derselben Ursprungs-IP-Adresse zulässig sind.
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-load-balancer-rule-sets: |
{
"IpLimitRuleSet": {
"items": [
{
"action": "IP_BASED_MAX_CONNECTIONS",
"maxConnectionsPerIp": 20
}
]
}
}
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxDiese Konfiguration erstellt ein Regelset für die maximale Listener-Verbindung namens IpLimitRuleSet, das jede ursprüngliche IP-Adresse auf maximal 20 nebenläufige Verbindungen beschränkt.
Um anschließend die maximale Anzahl gleichzeitiger Verbindungen zu ändern, aktualisieren Sie die Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets, und wenden Sie das Manifest erneut an.
Beachten Sie bei der Verwendung der Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets Folgendes:
-
Wenn Sie ein Manifest mit der Annotation
oci.oraclecloud.com/oci-load-balancer-rule-setsanwenden, beachten Sie, dass Kubernetes Engine die Verwaltung aller Regelsets des Load Balancers übernimmt. Kubernetes Engine fügt nicht nur das von der Annotation angegebene Regelset hinzu, sondern löscht auch alle anderen Regelsets, die derzeit mit dem Load Balancer verknüpft sind. -
Wenn Sie ein Regelset später löschen möchten, geben Sie wie folgt ein leeres JSON-Objekt als Wert der
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation an:oci.oraclecloud.com/oci-load-balancer-rule-sets: "{}"Wenn Sie ein leeres JSON-Objekt als Wert der Annotation angeben, löscht die Kubernetes-Engine alle Regelsets, die mit dem Load Balancer verknüpft sind, und gibt die Verwaltung der Regelsets des Load Balancers auf.
-
Wenn Sie die
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation einfach aus dem Manifest entfernen und das Manifest anwenden, gibt die Kubernetes-Engine die Verwaltung der Regelsets des Load Balancers auf. Wenn Sie die Annotation entfernen, löscht die Kubernetes-Engine keine der Regelsets, die mit dem Load Balancer verknüpft sind. -
Wenn Sie direkte Änderungen an den Regelsets des Load Balancers vornehmen (was nicht empfohlen wird), anstatt die
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation zu verwenden, beachten Sie den folgenden Punkt. Wenn Sie anschließend ein Manifest anwenden, das die Annotationoci.oraclecloud.com/oci-load-balancer-rule-setsenthält, fügt die Kubernetes-Engine das von der Annotation angegebene Regelset hinzu und löscht alle anderen Regelsets, die mit dem Load Balancer verknüpft sind. Wenn Sie also direkte Änderungen an den Regelsets des Load Balancers beibehalten möchten, nehmen Sie dieoci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation nicht in das Manifest auf.
HTTP-Headerregeln angeben
Wenn Kubernetes Engine einen Load Balancer für einen Kubernetes-Service vom Typ LoadBalancer bereitstellt, können Sie die maximale Größe des HTTP-Headers angeben, der von den Listenern des Load Balancers akzeptiert wird. Sie geben die maximale Größe des HTTP-Headers an, indem Sie mit einer Annotation die Größe (in KB) des Buffers angeben, der zum Lesen des Headers verwendet wird. Die zulässigen Werte für die Puffergröße sind 8, 16, 32 und 64. Die Annotation definiert eine HTTP-Headerregel für den Load Balancer. Die HTTP-Headerregel gilt für alle Listener des Load Balancers auf allen Ports.
Weitere Informationen zu HTTP-Headerregeln finden Sie unter HTTP-Headerregeln in der OCI Load Balancer-Dokumentation.
Um die maximale Größe des HTTP-Headers anzugeben, der von den Listenern des Load Balancers akzeptiert wird, fügen Sie die Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets im Metadatenabschnitt der Manifestdatei hinzu. Beachten Sie, dass Sie den Wert der Annotation wie folgt als formatierte JSON angeben:
oci.oraclecloud.com/oci-load-balancer-rule-sets: |
{
"<rule-set-name>": {
"items": [
{
"action": "HTTP_HEADER",
"httpLargeHeaderSizeInKB": <value>
}
]
}
}Hierbei gilt:
-
<rule-set-name>ist der Name Ihrer Wahl für das Regelset (zwischen 1 und 32 Zeichen). Beispiel:header-size. -
<value>ist die maximale Größe des HTTP-Headers in KB. Dabei handelt es sich um8,16,32oder64.
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-load-balancer-rule-sets: |
{
"header-size": {
"items": [
{
"action": "HTTP_HEADER",
"httpLargeHeaderSizeInKB": 16
}
]
}
}
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxUm anschließend die maximale Größe des HTTP-Headers zu ändern, aktualisieren Sie die Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets, und wenden Sie das Manifest erneut an.
Beachten Sie bei der Verwendung der Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets Folgendes:
-
Wenn Sie ein Manifest mit der Annotation
oci.oraclecloud.com/oci-load-balancer-rule-setsanwenden, beachten Sie, dass Kubernetes Engine die Verwaltung aller Regelsets des Load Balancers übernimmt. Kubernetes Engine fügt nicht nur das von der Annotation angegebene Regelset hinzu, sondern löscht auch alle anderen Regelsets, die derzeit mit dem Load Balancer verknüpft sind. -
Wenn Sie ein Regelset später löschen möchten, geben Sie wie folgt ein leeres JSON-Objekt als Wert der
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation an:oci.oraclecloud.com/oci-load-balancer-rule-sets: "{}"Wenn Sie ein leeres JSON-Objekt als Wert der Annotation angeben, löscht Kubernetes Engine alle Regelsets, die mit dem Load Balancer verknüpft sind, und gibt die Verwaltung der Regelsets des Load Balancers auf.
-
Wenn Sie die
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation einfach aus dem Manifest entfernen und das Manifest anwenden, gibt Kubernetes Engine die Verwaltung der Regelsets des Load Balancers auf. Wenn Sie die Annotation entfernen, löscht Kubernetes Engine keine Regelsets, die mit dem Load Balancer verknüpft sind. -
Wenn Sie direkte Änderungen an den Regelsets des Load Balancers vornehmen (was nicht empfohlen wird), anstatt die
oci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation zu verwenden, beachten Sie den folgenden Punkt. Wenn Sie anschließend ein Manifest anwenden, das die Annotationoci.oraclecloud.com/oci-load-balancer-rule-setsenthält, fügt die Kubernetes-Engine das von der Annotation angegebene Regelset hinzu und löscht alle anderen Regelsets, die mit dem Load Balancer verknüpft sind. Wenn Sie also direkte Änderungen an den Regelsets des Load Balancers beibehalten möchten, nehmen Sie dieoci.oraclecloud.com/oci-load-balancer-rule-sets-Annotation nicht in das Manifest auf.
Listener-Protokolle angeben
Wenn die Kubernetes-Engine einen 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 Load Balancer Listener-Protokoll explizit anzugeben, wenn Kubernetes Engine einen Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie die folgende Anmerkung im Metadatenabschnitt der Manifestdatei hinzu:
service.beta.kubernetes.io/oci-load-balancer-backend-protocol: <value>Hierbei ist <value> das Protokoll, das den Traffictyp definiert, der vom Listener akzeptiert wird. Beispiel: "HTTP". Gültige Protokolle sind "HTTP", "TCP" und "GRPC".
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-backend-protocol: "HTTP"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginxWenn Sie GRPC als Protokoll angeben, müssen Sie Folgendes konfigurieren:
- Frontend SSL mit den Annotationen
service.beta.kubernetes.io/oci-load-balancer-ssl-ports,oci.oraclecloud.com/oci-load-balancer-ssl-listener-configundservice.beta.kubernetes.io/oci-load-balancer-tls-secret. Weitere Informationen finden Sie unter SSL/TLS beim Load Balancer beenden (Frontend-SSL). - Backend-SSL mit den Annotationen
oci.oraclecloud.com/oci-load-balancer-backendset-ssl-configundservice.beta.kubernetes.io/oci-load-balancer-tls-backendset-secret. Weitere Informationen finden Sie unter SSL/TLS zwischen Load Balancer und Worker-Knoten implementieren (Backend-SSL).
Beispiel:
apiVersion: v1
kind: Service
metadata:
name: hello-grpc-service
annotations:
oci.oraclecloud.com/load-balancer-type: "lb"
service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
service.beta.kubernetes.io/oci-load-balancer-tls-secret: ssl-certificate-secret
service.beta.kubernetes.io/oci-load-balancer-backend-protocol: "GRPC"
oci.oraclecloud.com/oci-load-balancer-listener-ssl-config: '{"CipherSuiteName":"oci-default-http2-ssl-cipher-suite-v1", "Protocols":["TLSv1.2"]}'
oci.oraclecloud.com/oci-load-balancer-backendset-ssl-config: '{"CipherSuiteName":"oci-default-http2-ssl-cipher-suite-v1", "Protocols":["TLSv1.2"]}'
service.beta.kubernetes.io/oci-load-balancer-tls-backendset-secret: ca-ser-secret
spec:
type: LoadBalancer
selector:
app: hello-grpc
ports:
- port: 443
name: grpc
targetPort: 50051Verwaltungsoptionen für Sicherheitslisten beim Provisioning eines OCI 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-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 Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitstellt, fügen Sie im Metadatenabschnitt der Manifestdatei die folgende Annotation hinzu:
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: <value>Hierbei ist <value> einer der folgenden Werte:
-
"None": (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, damit eingehender Traffic an Load Balancer zulässig ist (siehe Sicherheitsregeln für Load Balancer und Network Load Balancer). -
"All": (Standard) Alle erforderlichen Sicherheitslistenregeln für Load-Balancer-Services werden verwaltet. -
"Frontend": Nur Sicherheitslistenregeln für Ingress für 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 service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode explizit auf None setzen.
Wenn Sie in Clustern mit verwalteten Knoten nicht explizit einen Verwaltungsmodus angeben oder einen ungültigen Wert angeben, werden alle Sicherheitslistenregeln verwaltet (entspricht "All"). Beachten Sie, dass in diesem Fall die Kubernetes-Engine 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, 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: "lb"
service.beta.kubernetes.io/oci-load-balancer-security-list-management-mode: "Frontend"
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: nginx