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

Um einen Oracle Cloud Infrastructure-Load Balancer für einen Kubernetes-Service des Typs LoadBalancer bereitzustellen, definieren Sie einen Service des Typs LoadBalancer, der die folgende Annotation im Metadatenabschnitt der Manifestdatei enthält:
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: nginx

Der 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.yaml

Nach 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 all

Die 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:

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: 80

Die 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 --watch

In 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.1

    Aufgrund 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:

  1. 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.
  2. 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
    
  3. Ändern Sie die Servicedefinition so, dass das neue Kubernetes-Secret referenziert wird, indem Sie die Annotation service.beta.kubernetes.io/oci-load-balancer-tls-secret in 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
  4. 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.

  1. ConfigMap erstellen: Erstellen Sie eine ConfigMap im 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.

    Beispiel:
    apiVersion:v1
    kind:ConfigMap
    metadata:
      name:lb-tls-mapping
    data:
      "443":"[\"ocid1.certificate.oc1.iad.example_leaf_ocid\"]"
  2. Service mit Hinweis versehen: Fügen Sie die Annotation oci-load-balancer.oraclecloud.com/tls-certificate-map zum Manifest des Service vom Typ LoadBalancer hinzu, um sie mit der Annotation ConfigMap zu 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:

  1. Generieren Sie einen Private Key, indem Sie Folgendes eingeben:

    openssl genrsa -out ca.key 2048
  2. 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
  3. 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
  4. 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.
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
---
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: nginx

In 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: nginx

Load-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: nginx

Wenn 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ßer 0), 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: 80

Beachten Sie Folgendes:

  • Die Zahl, die Sie für die Annotation angeben, wird nicht nur als Wert der Eigenschaft backendMaxConnections des Backend-Sets verwendet, sondern wird auch von jedem einzelnen Backend-Server als Wert der Eigenschaft maxConnections geerbt. 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: nginx

Diese 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-sets anwenden, 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 Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets enthä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 die oci.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 um 8, 16, 32 oder 64.

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: nginx

Um 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-sets anwenden, 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 Annotation oci.oraclecloud.com/oci-load-balancer-rule-sets enthä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 die oci.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: nginx

Wenn Sie GRPC als Protokoll angeben, müssen Sie Folgendes konfigurieren:

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: 50051

Verwaltungsoptionen für Sicherheitslisten beim Provisioning eines OCI Load Balancers angeben

Hinweis

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