Nativen OCI-Ingress-Controller konfigurieren

Erfahren Sie, wie Sie den nativen OCI-Ingress-Controller konfigurieren und anpassen, um eingehenden Traffic zu laden und an Service-Pods weiterzuleiten, die auf Worker-Knoten in einem Kubernetes-Cluster ausgeführt werden.

Wenn Sie den nativen OCI-Ingress-Controller (entweder als Standalone-Programm oder als Cluster-Add-on) installiert und die erforderlichen Kubernetes-Ingress-bezogenen Ressourcen für die Verwendung erstellt haben, können Sie den nativen OCI-Ingress-Controller wie folgt konfigurieren:

Routingregeln für den OCI Native Ingress Controller angeben

Um anzugeben, wie der OCI-Load Balancer, der vom nativen OCI-Ingress-Controller (als Standalone-Programm oder als Cluster-Add-on installiert) erstellt wurde, eingehende Anforderungen weiterleitet, geben Sie Routingregeln im Manifest Ingress an.

Anforderungen basierend auf Host weiterleiten

Sie können den nativen OCI-Ingress-Controller so konfigurieren, dass eine eingehende Anforderung basierend auf dem Domainnamen im Hostheader der Anforderung (dem Host, an den die Anforderung ursprünglich gesendet wurde) weitergeleitet wird.

Um eine Anforderung basierend auf dem Host an einen bestimmten Backend-Service und -Port weiterzuleiten, erstellen Sie eine Routingregel im Manifest Ingress. Wenn der Host mit der Routingregel übereinstimmt, leitet der native OCI-Ingress-Controller die Anforderung an den zugehörigen Backend-Service und -Port weiter.

Beispiel: Sie können die folgende Regel definieren, um Anforderungen, die ursprünglich an http://foo.bar.com gesendet wurden, an einen Backend-Service namens ServiceA auf Port 80 weiterzuleiten. Der gesamte eingehende Traffic, der ursprünglich an http://foo.bar.com gesendet wurde, wird an Port 80 an ServiceA weitergeleitet.

kind: Ingress
...
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
        - pathType: Prefix
          path: /
          backend:
            serviceName: ServiceA
            servicePort: 80

Anforderungen basierend auf Pfad an verschiedene Backend-Services weiterleiten

Sie können den nativen OCI-Ingress-Controller so konfigurieren, dass eingehende Anforderungen basierend auf Elementen im Pfad, an den die Anforderungen ursprünglich gesendet wurden, an verschiedene Backend-Services weitergeleitet werden.

Um eine Anforderung basierend auf dem Pfad an einen bestimmten Backend-Service und -Port weiterzuleiten, erstellen Sie eine Routingregel im Manifest Ingress. Wenn der Pfad mit der Routingregel übereinstimmt, leitet der native Ingress-Controller von OCI die Anforderung an den zugehörigen Backend-Service und -Port weiter. Sie können mehrere Pfade in derselben Regel angeben, um Anforderungen an verschiedene Backends weiterzuleiten.

Beispiel: Sie können die folgende Regel definieren, um Anforderungen basierend auf dem Pfad weiterzuleiten, an den die Anforderung ursprünglich gesendet wurde:

  • Wenn der Pfad mit /app1 beginnt, leitet der native OCI-Ingress-Controller die Anforderung an einen Backend-Service namens ServiceA auf Port 80 weiter.
  • Wenn der Pfad mit /app2 beginnt, leitet der native OCI-Ingress-Controller die Anforderung an einen Backend-Service namens ServiceB auf Port 443 weiter.

Da die Regel keinen Host angibt, gilt die Regel für den gesamten eingehenden Datenverkehr.

kind: Ingress
...
spec:
  rules:
    - http:
      paths:
        - pathType: Prefix
          path: /app1
          backend:
            serviceName: ServiceA
            servicePort: 80
        - pathType: Prefix
          path: /app2
          backend:
            serviceName: ServiceB
            servicePort: 443

Anforderungen basierend auf Host und Pfad weiterleiten

Sie können den nativen OCI-Ingress-Controller so konfigurieren, dass eine eingehende Anforderung basierend auf dem Domainnamen im Hostheader der Anforderung (dem Host, an den die Anforderung ursprünglich gesendet wurde) und den Elementen im Pfad, an den die ursprüngliche Anforderung gesendet wurde, weitergeleitet wird.

Um eine Anforderung basierend auf Host und Pfad an einen bestimmten Backend-Service und -Port weiterzuleiten, erstellen Sie eine Routingregel im Manifest Ingress. Wenn Host und Pfad mit der Routingregel übereinstimmen, leitet der native OCI-Ingress-Controller die Anforderung an den zugehörigen Backend-Service und -Port weiter.

Beispiel: Sie können die folgende Regel definieren, um Anforderungen, die ursprünglich an http://foo.bar.com/app1 gesendet wurden, an einen Backend-Service namens foo auf Port 80 weiterzuleiten:

kind: Ingress
...
spec:
  rules:
  - host: "foo.bar.com"
    http:
      paths:
        - pathType: Prefix
          path: /app1
          backend:
            serviceName: foo
            servicePort: 80

Anforderungen an ein Standard-Backend weiterleiten

Sie können den nativen OCI-Ingress-Controller so konfigurieren, dass eingehende Anforderungen an ein Standard-Backend weitergeleitet werden. Sie können ein Standard-Backend konfigurieren, um Anforderungen zu verarbeiten, die mit keinen Routingregeln übereinstimmen.

Beispiel: Sie können die folgende defaultBackend definieren, um Anforderungen, die nicht mit anderen Regeln im Manifest Ingress übereinstimmen, an einen Backend-Service mit dem Namen ServiceC auf Port 8080 weiterzuleiten.

Wenn Sie keine anderen Regeln in einem Ingress-Manifest angeben, müssen Sie eine defaultBackend angeben.

kind: Ingress
...
spec:
  rules:
    - http:
      paths:
        - pathType: Prefix
          path: /app1
          backend:
            serviceName: ServiceA
            servicePort: 80
        - pathType: Prefix
          path: /app2
          backend:
            serviceName: ServiceB
            servicePort: 443
  defaultBackend:
    service:
      name: ServiceC
      port:
        number: 8080

Verhalten von OCI Native Ingress Controller mit Annotationen anpassen

Sie können Annotationen zu den Ressourcenmanifesten IngressClass oder Ingress hinzufügen, um das Verhalten des nativen Ingress-Controllers von OCI anzupassen (als Standalone-Programm oder als Cluster-Add-on installiert).

Allgemeines Verhalten mit Anmerkungen anpassen

Sie können Annotationen zu den Ressourcenmanifesten IngressClass oder Ingress hinzufügen, um das allgemeine Verhalten des nativen Ingress-Controllers von OCI anzupassen.

Anmerkung Beschreibung Anmerkung zu diesem Ressourcenmanifest hinzufügen Beispiel
oci-native-ingress.oraclecloud.com/id OCID eines vorhandenen OCI-Load Balancers, der verwendet werden soll, anstatt einen neuen zu erstellen.

Wenn Sie einen vorhandenen Load Balancer angeben, verwaltet der native OCI-Ingress-Controller den Load Balancer und aktualisiert seine Eigenschaften nach Bedarf, um sie an Werten in den Manifesten IngressClassParameters, IngressClass und Ingress-Ressourcen auszurichten.

IngressClass oci-native-ingress.oraclecloud.com/id: ocid1.loadbalancer.oc1.iad.aaaaaaaan___u7a
oci-native-ingress.oraclecloud.com/defined-tags Ein oder mehrere definierte Tags, die auf den Load Balancer im JSON-Format angewendet werden sollen.

Siehe Definierte Tags auf den Load Balancer anwenden.

IngressClass oci-native-ingress.oraclecloud.com/defined-tags: '{"tag-namespace-1": {"key1": "value1", "key2": "value2"}, "tag-namespace-2": {"key1": "value1"}}'
oci-native-ingress.oraclecloud.com/freeform-tags Mindestens ein Freiformtag, das auf den Load Balancer im JSON-Format angewendet werden soll.

Siehe Freiformtags auf den Load Balancer anwenden.

IngressClass oci-native-ingress.oraclecloud.com/freeform-tags: '{"key1": "value1", "key2": "value2"}'
oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true" Gibt an, ob der Load Balancer beibehalten werden soll, wenn IngressClass gelöscht wird.

Bei true wird der Load Balancer beibehalten. Wenn keine Angabe gemacht wird, ist false der Standardwert, und der Load Balancer wird gelöscht, wenn IngressClass gelöscht wird.

Siehe Load Balancer nach dem Löschen von IngressClass reservieren.

IngressClass oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true"
oci-native-ingress.oraclecloud.com/network-security-group-ids Eine oder mehrere OCIDs von Netzwerksicherheitsgruppen (NSGs), denen der Load Balancer hinzugefügt werden soll, in einer durch Komma getrennten Liste. Wenn keine Angabe gemacht wird, wird der Load Balancer keinen NSGs hinzugefügt. IngressClass oci-native-ingress.oraclecloud.com/network-security-group-ids: 'ocid1.networksecuritygroup.oc1.iad.agx___kby, ocid1.networksecuritygroup.oc1.iad.ahr___mlo'
oci-native-ingress.oraclecloud.com/waf-policy-ocid OCID einer vorhandenen Web Application Firewall-(WAF-)Policy. Siehe Web Application Firewall-Policys. IngressClass oci-native-ingress.oraclecloud.com/waf-policy-ocid: ocid1.webappfirewallpolicy.oc1.iad.ama___aqq
oci-native-ingress.oraclecloud.com/protocol Für Listener auf dem Load Balancer zu verwendendes Protokoll. Einer von HTTP2 oder TCP.

(Wenn Sie HTTP2 als Protokoll angeben, ist ein TLS-konfigurierter Listener erforderlich.)

Ingress oci-native-ingress.oraclecloud.com/protocol: "HTTP2"
oci-native-ingress.oraclecloud.com/backend-tls-enabled Gibt an, ob Backend-Servicepods TLS-Anforderungen empfangen können.

Wenn dieser Wert auf false gesetzt ist, werden TLS-Anforderungen am Load Balancer Listener beendet, und Anforderungen zwischen dem Backend-Set und den Backends werden in Klartext ausgetauscht.

Ingress oci-native-ingress.oraclecloud.com/backend-tls-enabled: "false"
oci-native-ingress.oraclecloud.com/http-listener-port

Erstellen Sie einen einzelnen Listener-Port für alle HTTP-Pfade unter diesem Ingress, anstatt einen Listener-Port für jeden Service-Port zu erstellen. Die Routingrichtlinien werden entsprechend konfiguriert.

Ingress oci-native-ingress.oraclecloud.com/http-listener-port: "100"
oci-native-ingress.oraclecloud.com/https-listener-port Erstellen Sie einen einzelnen Listener-Port für alle HTTPS-Pfade unter diesem Ingress, anstatt einen Listener-Port für jeden Service-Port zu erstellen. Die Routingrichtlinien werden entsprechend konfiguriert. Ingress oci-native-ingress.oraclecloud.com/https-listener-port: "500"
oci-native-ingress.oraclecloud.com/policy Policy, die vom Load-Balancer-Backend-Set für die Trafficverteilung verwendet wird. Ingress oci-native-ingress.oraclecloud.com/policy: "ROUND_ROBIN"

Health-Check-Verhalten mit Annotationen anpassen

Sie können dem Ressourcenmanifest Ingress Annotationen hinzufügen, um die Health Checks anzupassen, die vom vom nativen OCI-Ingress-Controller erstellten Load Balancer ausgeführt werden. Weitere Informationen zu Load Balancer Health Checks finden Sie unter Health Checks für Load Balancer.

Anmerkung Beschreibung Anmerkung zu diesem Ressourcenmanifest hinzufügen Beispiel
oci-native-ingress.oraclecloud.com/healthcheck-protocol Protokoll, das für Health Checks des Load Balancers-Backend-Sets verwendet wird. Ingress oci-native-ingress.oraclecloud.com/healthcheck-protocol: "HTTP"
oci-native-ingress.oraclecloud.com/healthcheck-port Port für Health Checks des Load-Balancer-Backend-Sets. Ingress oci-native-ingress.oraclecloud.com/healthcheck-port: "80"
oci-native-ingress.oraclecloud.com/healthcheck-path Pfad, der für Health Checks des Load Balancers-Backend-Sets verwendet wird. Ingress oci-native-ingress.oraclecloud.com/healthcheck-path: "/test"
oci-native-ingress.oraclecloud.com/healthcheck-interval-milliseconds Intervall zwischen Health Checks des Load-Balancer-Backend-Sets. Ingress oci-native-ingress.oraclecloud.com/healthcheck-interval-milliseconds: "1000"
oci-native-ingress.oraclecloud.com/healthcheck-timeout-milliseconds Zeitraum, nach dem der Health Check des Load Balancer Backend-Sets als nicht erfolgreich betrachtet wird. Ingress oci-native-ingress.oraclecloud.com/healthcheck-timeout-milliseconds: "750"
oci-native-ingress.oraclecloud.com/healthcheck-retries Anzahl der Wiederholungen, nach denen der Health Check des Load Balancer Backend-Sets als nicht erfolgreich betrachtet wird. Ingress oci-native-ingress.oraclecloud.com/healthcheck-retries: "5"
oci-native-ingress.oraclecloud.com/healthcheck-return-code Statuscode, den das Load-Balancer-Backend-Set als Antwort auf einen Health Check zurückgeben muss, um als fehlerfrei zu gelten. Ingress oci-native-ingress.oraclecloud.com/healthcheck-return-code: "200"
oci-native-ingress.oraclecloud.com/healthcheck-response-regex Regulärer Ausdruck zum Parsen des Antwortbodys aus dem Load-Balancer-Backend-Set. Sie können einen beliebigen regulären Ausdruck (z.B. * oder / ) oder einen leeren Wert angeben. Ingress oci-native-ingress.oraclecloud.com/healthcheck-response-regex: "*"
oci-native-ingress.oraclecloud.com/healthcheck-force-plaintext Gibt an, ob ein Health Check ohne SSL an das Load Balancer Backend gesendet wird (nur HTTP). Wenn keine Angabe gemacht wird, wird standardmäßig false verwendet. Ingress oci-native-ingress.oraclecloud.com/healthcheck-force-plaintext: "true"

Podbereitschaftstor einrichten

Podbereitschaftsgates sind zusätzliche Bedingungen, die in einem Podmanifest enthalten sind, um anzuzeigen, dass ein Pod für den Empfang von Traffic bereit ist. Mit Podbereitschaftsgates können Sie komplexe benutzerdefinierte Bereitschaftsprüfungen implementieren und bei rollierenden Deployments Ausfallzeiten vermeiden. Weitere Informationen finden Sie unter Details zur Podbereitschaft in der Kubernetes-Dokumentation.

Wenn Sie den nativen OCI-Ingress-Controller (entweder als Standalone-Programm oder als Cluster-Add-on) mit einem Cluster verwenden, das natives VCN-Podnetzwerk als Netzwerktyp enthält, können Sie angeben, dass der native OCI-Ingress-Controller ein Podbereitschaftsgate in die Podspezifikation jedes in einem bestimmten Namespace erstellten Pods einfügen soll. Beachten Sie, dass Sie den nativen OCI-Ingress-Controller nicht verwenden können, um Podbereitschaftsgates in Podspezifikationen zu injizieren, wenn das Cluster Flannel-Overlay als Netzwerktyp aufweist.

Geben Sie an, dass der native OCI-Ingress-Controller ein Podbereitschaftsgate in die Podspezifikation jedes Pods einfügt, der in einem bestimmten Namespace erstellt wird, indem Sie Folgendes eingeben:

kubectl label ns <namespace> podreadiness.ingress.oraclecloud.com/pod-readiness-gate-inject=enabled

Der native OCI-Ingress-Controller fügt eine Bedingung in die Podspezifikation jedes im Namespace erstellten Pods ein. Beispiel:


kind: Pod
...
    spec:
      readinessGates:
      - conditionType: podreadiness.ingress.oraclecloud.com/k8s_6b5b1b3a38
Sie können den Status der Podbereitschafts-Gates prüfen, indem Sie Folgendes eingeben:
kubectl get pods -o wide -w
Beispielausgabe:
NAME                                             READY   STATUS    RESTARTS   AGE   IP            NODE          NOMINATED NODE   READINESS GATES
testecho-7cdcfff87f-b6xt4                        1/1     Running   0          35s   10.0.10.242   10.0.10.135   <none>           0/1
testecho-7cdcfff87f-b6xt4                        1/1     Running   0          72s   10.0.10.242   10.0.10.135   <none>           1/1

TCP-Listener einrichten

Mit dem nativen OCI-Ingress-Controller (entweder als Standalone-Programm oder als Cluster-Add-on) können Sie Load Balancer Listener als TCP-Listener einrichten. Jeder TCP-Listener leitet den an einem bestimmten Port empfangenen TCP-Traffic einfach an den Backend-Service weiter, der für diesen Port in einem Ingress-Ressourcenmanifest angegeben ist, ohne dass ein Routing der Transportschicht 7 ausgeführt wird.

Sie legen die Annotation oci-native-ingress.oraclecloud.com/protocol fest, um anzugeben, dass der native OCI-Ingress-Controller einen TCP-Listener für jeden eindeutigen Port erstellen soll, der in Routingregeln in einem Ingress-Ressourcenmanifest enthalten ist.

So geben Sie an, dass der native OCI-Ingress-Controller TCP-Listener erstellen soll:

  1. Definieren Sie eine neue Ingress-Ressource in einer YAML-Datei. Siehe Ingress-Ressource erstellen.
  2. Fügen Sie im Abschnitt metadata: ein annotations:-Element hinzu, und setzen Sie die oci-native-ingress.oraclecloud.com/protocol-Annotation in folgendem Format auf TCP:
    kind: Ingress
    metadata:
      name: <i-name>
      annotations:
        oci-native-ingress.oraclecloud.com/protocol: TCP
    spec:
    ...

    Dabei ist name: <i-name> der Name Ihrer Wahl für die Ingress-Ressource.

    Beispiel:

    kind: Ingress
    metadata:
      name: ingress-pass-through
      annotations:
        oci-native-ingress.oraclecloud.com/protocol: TCP
    spec:
    ...
  3. Fügen Sie im Abschnitt rules: des Ressourcenmanifests Ingress eine Regel für jeden Listener hinzu, der TCP-Traffic empfangen soll:
    • (empfohlen) Setzen Sie paths.pathType auf ImplementationSpecific.
    • Setzen Sie paths.backend.service.name auf den Namen des Backend-Service.
    • Legen Sie paths.backend.service.port.number auf den Port fest, auf dem der TCP-Traffic überwacht werden soll und an den der TCP-Traffic weitergeleitet werden soll.

    Beispiel: Wenn ein TCP-Listener, der auf Port 8080 horcht, TCP-Traffic an my-first-svc:8080 weiterleitet und ein TCP-Listener, der auf Port 8081 horcht, TCP-Traffic an my-second-svc:8081 weiterleitet, können Sie wie folgt ein Ingress-Ressourcenmanifest einrichten:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: ingress-pass-through
      annotations:
        oci-native-ingress.oraclecloud.com/protocol: TCP
    spec:
      rules:
        - http:
            paths:
              - pathType: ImplementationSpecific
                backend:
                  service:
                    name: my-first-svc
                    port:
                      number: 8080
        - http:
            paths:
              - pathType: ImplementationSpecific
                backend:
                  service:
                    name: my-second-svc
                    port:
                      number: 8081 
    
  4. Erstellen Sie die Ressource, indem Sie kubectl create -f <filename>.yaml eingeben.

Unterstützung für HTTPS-/TLS-Anforderungen hinzufügen

Sie können den nativen OCI-Ingress-Controller (entweder als Standalone-Programm oder als Cluster-Add-on) zur Unterstützung der sicheren HTTPS-Kommunikation verwenden. Mit dem nativen OCI-Ingress-Controller können Sie OCI-Load-Balancer-Listener und Backend-Sets so einrichten, dass der mit TLS (früher SSL) verschlüsselte Traffic verarbeitet wird.

Wenn Sie den nativen OCI-Ingress-Controller zur Unterstützung der HTTPS-Kommunikation verwenden, stehen Ihnen zwei Optionen zur Verfügung:

Bei der Verarbeitung von HTTPS-Traffic implementiert der vom nativen OCI-Ingress-Controller erstellte OCI-Load Balancer standardmäßig End-to-End-TLS. Der Load Balancer verwendet Zertifikate, um eine TLS-verschlüsselte Anforderung von einem Client zu akzeptieren. Anschließend leitet er die Anforderung mit Routingregeln an das entsprechende Backend-Set weiter. Das Backend-Set erstellt eine neue TLS-Verbindung mit Backends, die im Cluster ausgeführt werden (mit dem CA-Bundle als Trust Authority für die neue Verbindung).

Beachten Sie Folgendes:

  • Wenn Sie eine IngressClass-Ressource löschen, löscht der native OCI-Ingress-Controller den erstellten Load Balancer oder den vorhandenen Load Balancer, der mit der oci-native-ingress.oraclecloud.com/id-Annotation angegeben wird (es sei denn, Sie haben oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true" festgelegt). Beachten Sie jedoch, dass der Ingress-Controller keine Ressourcen löscht, die im OCI Certificates-Service erstellt wurden. Sie sind für das Löschen solcher Certificates-Serviceressourcen verantwortlich. Insbesondere wenn Sie ein Kubernetes-Secret im Ressourcenmanifest Ingress angegeben haben, müssen Sie alle Certificates-Serviceressourcen löschen, die der native OCI-Ingress-Controller für Sie erstellt hat.
  • Zertifikate, die vom OCI Certificates-Service des Typs Importiert abgerufen werden, können nicht automatisch rotiert werden. Wenn Zertifikate automatisch rotiert werden sollen, rufen Sie selbst manuell ein Zertifikat im OCI Certificates-Service ab, indem Sie angeben, dass das Zertifikat von einer internen CA des Certificates-Service ausgegeben werden soll (die Zertifikate weisen den Typ Von interner CA ausgestellt auf). Sie können Zertifikate des Typs Von interner CA ausgegeben so konfigurieren, dass sie automatisch rotiert werden.
  • Wenn Sie ein Kubernetes-Secret im Ressourcenmanifest Ingress angeben, weisen die Zertifikate, die der native OCI-Ingress-Controller aus dem Certificates-Service bezieht, den Typ Importiert auf und werden daher nicht automatisch rotiert. Sie können das vom Certificates-Service erhaltene Zertifikat jedoch manuell erneuern, indem Sie die Details des aktuellen Serverzertifikats ändern, das im vorhandenen Kubernetes-Secret angegeben ist. Wenn Sie die Details des Serverzertifikats ändern, aktualisiert der native OCI-Ingress-Controller die entsprechenden Details des Zertifikats, das vom Certificates-Service abgerufen wird.

    Beachten Sie, dass das Ändern von Subject-Informationen im aktuellen Serverzertifikat (Allgemeiner Name, Organisationsname, Subject Alternative Names) vom Certificates-Service nicht unterstützt wird. Wenn Sie Betreffinformationen ändern möchten, löschen Sie das ursprüngliche Kubernetes-Secret, und erstellen Sie ein neues Secret mit demselben Namen. Der native OCI-Ingress-Controller ruft ein neues Zertifikat des Typs Importiert und ein neues CA-Bundle aus dem Certificates-Service ab und verknüpft sie mit dem Listener und dem Backend-Set (ersetzt das vorherige Zertifikat und das CA-Bundle).

  • Ein Listener kann nur mit einem Zertifikat verknüpft werden. Erstellen Sie daher nicht mehrere Ingress-Ressourcen, die jeweils Regeln enthalten, die dieselbe Backend-Service-/Portkombination angeben, sondern bei denen die Ingress-Ressourcen unterschiedliche Zertifikate verwenden.
  • Standardmäßig implementiert der vom OCI-nativen Ingress-Controller erstellte OCI-Load Balancer End-to-End-TLS. Der Load Balancer beendet die TLS-Anforderung auf dem Listener, und es wird eine neue TLS-Verbindung zwischen dem Backend-Set und den Backends hergestellt. Wenn die Backends jedoch keinen HTTPS-Server ausführen und daher die Verbindung zwischen dem Backend-Set und den Backends im Klartext erfolgen soll, setzen Sie die oci-native-ingress.oraclecloud.com/backend-tls-enabled-Annotation auf "false". Wenn die oci-native-ingress.oraclecloud.com/backend-tls-enabled-Annotation auf "false" gesetzt ist, kann der Load Balancer verschlüsselten Traffic von einem Client akzeptieren, der Traffic zwischen dem Load Balancer und den Backends ist jedoch nicht verschlüsselt.

Option 1: OCI Native Ingress Controller ruft das Zertifikat vom Certificates-Service mit einem Kubernetes-Secret ab

So konfigurieren Sie den nativen Ingress-Controller von OCI, um ein Zertifikat vom OCI Certificates-Service abzurufen:

  1. Rufen Sie ein TLS-Public- und Private-Key-Paar sowie ein Zertifikat ab.

    In Produktionsumgebungen erhalten Sie ein TLS-Zertifikat von der ausgewählten Certificate Authority, indem Sie eine Zertifikatssignieranforderung weiterleiten. Während des Zertifikatsanforderungsprozesses werden ein Public Key und ein entsprechender Private Key generiert.

    In Entwicklungs- und Testumgebungen können Sie ein selbstsigniertes Zertifikat erstellen und mit einem Tool wie OpenSSL selbst einen Private Key generieren. Beispiel (mit OpenSSL 3.0 oder höher):

    1. Generieren Sie ein Public/Private-Key-Paar, indem Sie die folgenden Befehle eingeben:

      openssl genrsa -out rootCA.key 4096
      openssl req -x509 -addext basicConstraints=critical,CA:TRUE -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt -subj /CN=RootCA
    2. Generieren Sie ein Zertifikat, indem Sie die folgenden Befehle eingeben:

      openssl genrsa -out server.key 4096
      openssl req -new -sha256 -key server.key -subj /C=US/ST=CA/O=MyOrg,Inc./CN=my.example.com -out server.csr
      openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256

    In diesem Beispiel:

    • rootCA.key enthält das Schlüsselpaar für die Root-CA.
    • rootCA.crt enthält das Root-CA-Zertifikat.
    • server.key enthält das Schlüsselpaar zum Generieren des Serverzertifikats.
    • server.csr enthält die Zertifikatssignieranforderung für das Serverzertifikat.
    • server.crt enthält das generierte Serverzertifikat.
  2. Erstellen Sie eine Kubernetes-Secret-Ressource auf eine der folgenden Arten:
    • Geben Sie mit dem Befehl kubectl create secret generic Folgendes ein:

      kubectl create secret generic <k8s-secret-name> --type=kubernetes.io/tls --from-file=ca.crt=<path-and-filename>.crt --from-file=tls.crt=<path-and-filename>.crt --from-file=tls.key=<path-and-filename>.key

      Hierbei gilt:

      • <k8s-secret-name> ist der Name Ihrer Wahl für das Kubernetes-Secret
      • --from-file=ca.crt=<path-and-filename>.crt gibt den Pfad zu der Datei an, die das Root-CA-Zertifikat enthält. Beispiel: --from-file=ca.crt=rootCA.crt
      • --from-file=tls.crt=<path-and-filename>.crt gibt den Pfad zu der Datei an, die das generierte Serverzertifikat enthält. Beispiel: --from-file=tls.crt=server.crt
      • --from-file=tls.key=<path-and-filename>.key gibt den Pfad zu der Datei an, die den generierten Private Key enthält. Beispiel: --from-file=tls.key=server.key

      Beispiel:

      kubectl create secret generic example-tls-secret --type=kubernetes.io/tls --from-file=ca.crt=rootCA.crt --from-file=tls.crt=server.crt --from-file=tls.key=server.key
    • Verwenden Sie eine Ressourcenmanifestdatei Secret:
      1. Definieren Sie das Kubernetes-Secret in einer .yaml-Datei im folgenden Format:

        apiVersion: v1
        kind: Secret
        metadata:
          name: <k8s-secret-name>
        type: kubernetes.io/tls
        data:
          ca.crt: <base64-encoded-certificate-chain>
          tls.crt: <base64-encoded-server-certificate>
          tls.key: <base64-encoded-private-key>

        Hierbei gilt:

        • name: <k8s-secret-name> ist der Name Ihrer Wahl für die Kubernetes-Secret-Ressource.
        • ca.crt: <base64-encoded-certificate-chain> ist der Inhalt der Datei (oder Dateien) mit Zwischenzertifikaten, die eine Zertifikatskette vom Leaf-Zertifikat zurück zur Certificate Authority bilden. Beachten Sie, dass Sie ca.cert weglassen können, vorausgesetzt, Sie nehmen die gesamte Zertifikatskette als Wert von tls.cert auf (in diesem Fall starten Sie die Zertifikatskette mit dem Inhalt der Datei, die das generierte Serverzertifikat enthält, gefolgt von den restlichen Zertifikaten).
        • tls.crt: <base64-encoded-server-certificate> ist der Inhalt der Datei, die das generierte Serverzertifikat enthält.
        • tls.key: <base64-encoded-private-key> ist der Inhalt der Datei, die den generierten Private Key enthält.

        Beispiel:

        apiVersion: v1
        kind: Secret
        metadata:
          name: example-tls-secret
        type: kubernetes.io/tls
        data:
          ca.crt : MIIFGERTegcDFRTuSDGfghREdE______Jre
          tls.crt: MIIC2DCCAcCgAwIBAgIBATANBg______kqh
          tls.key: MIIEpgIBAAKCAQEA7yn3bRHQ5F______HMQ
      2. Erstellen Sie die Secret-Ressource, indem Sie kubectl create -f <filename>.yaml eingeben

  3. Fügen Sie das Kubernetes-Secret zu einem Ingress-Ressourcenmanifest hinzu:
    1. Definieren Sie eine neue Ingress-Ressource in einer YAML-Datei. Siehe Ingress-Ressource erstellen.
    2. Fügen Sie im Abschnitt spec: des Manifests ein tls:-Element hinzu, das sowohl den Host, der HTTPS-Traffic empfangen soll, als auch den Namen des Kubernetes-Secrets im folgenden Format angibt:
      kind: Ingress
      ...
      spec:
        tls:
        - hosts:
            - <host-name>
          secretName: <k8s-secret-name>

      Beispiel:

      kind: Ingress
      ...
      spec:
        tls:
        - hosts:
            - my.example.com
          secretName: example-tls-secret
    3. Fügen Sie im Abschnitt rules: des Manifests eine Regel für den Host hinzu, der HTTPS-Datenverkehr empfangen soll, und geben Sie 443 als Port an, auf dem HTTPS-Datenverkehr abgehört werden soll.

      Beispiel:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: acme-tls-secret-ingress
      spec:
        tls:
        - hosts:
            - my.example.com
          secretName: example-tls-secret
        rules:
        - host: "my.example.com"
          http:
            paths:
            - pathType: Prefix
              path: "/TLSPath"
              backend:
                service:
                  name: tls-test
                  port:
                    number: 443
    4. Erstellen Sie die Ressource, indem Sie kubectl create -f <filename>.yaml eingeben.

Wenn Sie die Ingress-Ressource erstellen, verwendet der native Ingress-Controller von OCI das Kubernetes-Secret, um ein Zertifikat des Typs Importiert und ein CA-Bundle (Certificate Authority-Bundle) vom OCI Certificates-Service abzurufen. Der native OCI-Ingress-Controller verknüpft das Zertifikat mit dem Listener und das CA-Bundle mit dem Backend-Set.

Wenn der Listener, der auf Port 443 horcht, eine HTTPS-Anforderung an den angegebenen Host empfängt, verwendet der Listener das Zertifikat für die TLS-Beendigung. Der Listener leitet die Anforderung dann mit der Routingregel an das Backend-Set weiter. Das Backend-Set erstellt eine neue TLS-Verbindung mit den im Cluster ausgeführten Backends (mit dem CA-Bundle als Trust Authority für die neue Verbindung).

Option 2: Sie erhalten das Zertifikat vom Certificates-Service

So konfigurieren Sie den nativen Ingress-Controller von OCI so, dass er ein Zertifikat verwendet, das Sie vom OCI Certificates-Service erhalten haben:

  1. Erstellen Sie ein Zertifikat im OCI Certificates-Service auf eine der folgenden Arten:
    • durch Importieren eines Zertifikats, das von einer Drittanbieter-CA ausgestellt wurde (das Zertifikat hat den Typ Importiert)
    • indem Sie das Zertifikat intern von einer CA des Certificates-Service ausstellen (das Zertifikat hat den Typ Von interner CA ausgestellt)

    Erstellen Sie kein Zertifikat für die externe Verwaltung (vom Typ Von interner CA ausgegeben, extern verwaltet). Weitere Informationen finden Sie unter Zertifikat erstellen.

  2. Notieren Sie sich die OCID des Zertifikats.
  3. Fügen Sie die OCID des Zertifikats zu einem Ingress-Ressourcenmanifest hinzu:
    1. Definieren Sie eine neue Ingress-Ressource in einer .yaml-Datei. Siehe Ingress-Ressource erstellen.
    2. Fügen Sie im Abschnitt metadata: ein annotations:-Element hinzu, das die OCID des Zertifikats angibt, das Sie im OCI Certificates-Service erstellt haben, im folgenden Format:
      kind: Ingress
      metadata:
        name: <i-name>
        annotations:
          oci-native-ingress.oraclecloud.com/certificate-ocid: <certificate-ocid>
      spec:
      ...

      Hierbei gilt:

      • name: <i-name> ist Ihr Name für die Ingress-Ressource.
      • oci-native-ingress.oraclecloud.com/certificate-ocid: <certificate-ocid> ist die OCID des Zertifikats, das Sie im OCI Certificates-Service erstellt haben.

      Beispiel:

      kind: Ingress
      metadata:
        name: acme-tls-certificate-ingress
        annotations:
          oci-native-ingress.oraclecloud.com/certificate-ocid: ocid1.certificate.oc1.iad.amaaaaaa______gabc
      spec:
      ...
    3. Fügen Sie im Abschnitt rules: des Ressourcenmanifests Ingress eine Regel für den Host hinzu, der HTTPS-Traffic empfangen soll, und geben Sie 443 als Port an, auf dem HTTPS-Traffic abgehört werden soll.

      Beispiel:

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: acme-tls-certificate-ingress
        annotations:
          oci-native-ingress.oraclecloud.com/certificate-ocid: ocid1.certificate.oc1.iad.amaaaaaa______gabc
      spec:
        rules:
        - host: "my.example.com"
          http:
            paths:
            - pathType: Prefix
              path: "/TLSPath"
              backend:
                service:
                  name: tls-test
                  port:
                    number: 443
    4. Erstellen Sie die Ressource, indem Sie kubectl create -f <filename>.yaml eingeben.

Was beim Erstellen der Ingress-Ressource geschieht, hängt davon ab, wie Sie das Zertifikat im OCI Certificates-Service erstellt haben:

  • Wenn Sie das Zertifikat durch Importieren eines Zertifikats erstellt haben, das von einer Drittanbieter-CA ausgestellt wurde, hat das Zertifikat den Typ Importiert. Der native OCI-Ingress-Controller verknüpft das Zertifikat mit dem Listener, erstellt ein CA-Bundle aus der Zertifikatskette und verknüpft das CA-Bundle mit dem Backend-Set. Beachten Sie, dass Sie Zertifikate des Typs Importiert nicht so konfigurieren können, dass sie automatisch rotiert werden.
  • Wenn Sie das Zertifikat erstellt haben, indem Sie das Zertifikat intern von einer CA des Certificates-Service ausstellen, hat das Zertifikat den Typ Von interner CA ausgestellt. Der native OCI-Ingress-Controller verknüpft das Zertifikat mit dem Listener, ruft die OCID der CA ab und verknüpft diese OCID mit dem Backend-Set. Beachten Sie, dass Sie Zertifikate des Typs Von interner CA ausgegeben so konfigurieren können, dass sie automatisch rotiert werden.

Wenn der Listener, der auf Port 443 horcht, eine HTTPS-Anforderung an den angegebenen Host empfängt, verwendet der Listener das Zertifikat für die TLS-Beendigung. Der Listener leitet die Anforderung dann mit der Routingregel an das Backend-Set weiter. Das Backend-Set erstellt eine neue TLS-Verbindung mit den im Cluster ausgeführten Backends (mit dem CA-Bundle oder der mit seiner OCID identifizierten CA als Vertrauensstelle für die neue Verbindung).

HTTP/HTTPS-Listener-Ports aggregieren

Wenn Sie den nativen OCI-Ingress-Controller (entweder als Standalone-Programm oder als Cluster-Add-on) verwenden, können Sie den gesamten HTTP-Traffic in einem einzigen Listener-Port aggregieren. Ebenso können Sie den gesamten HTTPS-Traffic in einem einzigen Port aggregieren.

Standardmäßig erstellt der native OCI-Ingress-Controller einen OCI-Load-Balancer-Listener für jeden Backend-Serviceport, der in einem Ingress-Manifest definiert ist. Der native OCI-Ingress-Controller erstellt auch eine Routing-Policy für jeden Listener-Port. Sie können jedoch die oci-native-ingress.oraclecloud.com/http-listener-port-Annotation und/oder die oci-native-ingress.oraclecloud.com/https-listener-port-Annotation verwenden, um einen einzelnen Listener und eine Routing-Policy für alle HTTP-Anforderungen und/oder einen einzelnen Listener und eine Routing-Policy für alle HTTPS-Anforderungen zu erstellen.

Beispiel: Sie können einen Ingress mit Regeln für vier Backend-Services definieren, wobei jeder Service auf einem anderen Port horcht:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: sample-ingress
spec:
  tls:
    - hosts:
        - "foo.bar.com3"
        - "foo.bar.com4"
      secretName: secret_name
  rules:
    - host: "foo.bar.com1"
      http:
        paths:
          - pathType: Prefix
            path: "/testecho1"
            backend:
              service:
                name: testecho1
                port:
                  number: 80
    - host: "foo.bar.com2"
      http:
        paths:
          - pathType: Prefix
            path: "/testecho2"
            backend:
              service:
                name: testecho2
                port:
                  number: 81
    - host: "foo.bar.com3"
      http:
        paths:
          - pathType: Prefix
            path: "/testecho3"
            backend:
              service:
                name: testecho3
                port:
                  number: 443
    - host: "foo.bar.com4"
      http:
        paths:
          - pathType: Prefix
            path: "/testecho4"
            backend:
              service:
                name: testecho4
                port:
                  number: 444 

In diesem Beispiel definiert das Manifest Ingress vier Services:

  • testecho1, Listening auf Port 80 auf HTTP-Traffic
  • testecho2, Listening auf Port 81 auf HTTP-Traffic
  • testecho3, Listening auf Port 443 auf HTTPS-Traffic
  • testecho4, Listening auf Port 444 auf HTTPS-Traffic

Standardmäßig erstellt der native OCI-Ingress-Controller Folgendes:

  • Vier Listener im Load Balancer (zwei Listener, die an den Ports 80 und 81 für HTTP-Traffic horchen, und zwei Listener, die an den Ports 443 und 444 für HTTPS-Traffic horchen).
  • Vier Routing-Policys (eine für jeden Listener-Port).

Um die Administration zu vereinfachen, können Sie einen einzelnen Listener verwenden, der auf HTTP-Traffic horcht, und einen einzelnen Listener, der auf HTTPS-Traffic horcht, indem Sie Annotationen wie folgt festlegen:

oci-native-ingress.oraclecloud.com/http-listener-port: "100"
oci-native-ingress.oraclecloud.com/https-listener-port: "500"

Wenn die Annotationen wie dargestellt festgelegt sind, erstellt der native OCI-Ingress-Controller Folgendes:

  • einen einzelnen Listener, der auf HTTP-Traffic auf Port 100 horcht, und eine Routing-Policy für Port 100 mit Pfaden für Backends auf Ports testecho1:80 und testecho2:81
  • einen einzelnen Listener, der auf HTTPS-Traffic an Port 500 horcht, und eine einzelne Routing-Policy für Port 500 mit Pfaden für Backends an Ports testecho3:443 und testecho4:444

Beachten Sie Folgendes:

  • Sie können die Annotationen oci-native-ingress.oraclecloud.com/http-listener-port und oci-native-ingress.oraclecloud.com/https-listener-port unabhängig voneinander festlegen, sodass Sie nicht beide Annotationen festlegen müssen.

  • Wenn das Ressourcenmanifest Ingress die Annotation oci-native-ingress.oraclecloud.com/certificate-ocid enthält, berücksichtigt der native OCI-Ingress-Controller alle Hosts, die für TLS konfiguriert werden. In diesem Fall führt der native OCI-Ingress-Controller Folgendes aus:

    • ignoriert die oci-native-ingress.oraclecloud.com/http-listener-port-Annotation (falls im Ressourcenmanifest Ingress vorhanden)
    • wendet die oci-native-ingress.oraclecloud.com/https-listener-port-Annotation (falls im Ressourcenmanifest Ingress vorhanden) an, um einen einzelnen Listener für den gesamten Traffic zu erstellen
  • Unabhängig von den Annotationen oci-native-ingress.oraclecloud.com/http-listener-port und oci-native-ingress.oraclecloud.com/https-listener-port erstellt der native OCI-Ingress-Controller nur HTTP- und/oder HTTPS-Listener (und entsprechende Routing-Policys), wenn dies für Backend-Services erforderlich ist, die im Ingress-Ressourcenmanifest definiert sind. Beispiel:
    • Wenn Sie die oci-native-ingress.oraclecloud.com/http-listener-port-Annotation in ein Ingress-Ressourcenmanifest aufnehmen, das kein HTTP-Backend definiert, erstellt der native OCI-Ingress-Controller keinen HTTP-Listener.
    • Wenn Sie die oci-native-ingress.oraclecloud.com/https-listener-port-Annotation in ein Ingress-Ressourcenmanifest aufnehmen, das kein HTTPS-Backend definiert, erstellt der native OCI-Ingress-Controller keinen HTTPS-Listener.
    • Wenn Sie sowohl oci-native-ingress.oraclecloud.com/http-listener-port- als auch oci-native-ingress.oraclecloud.com/https-listener-port-Annotationen in ein Ingress-Ressourcenmanifest aufnehmen, das nur HTTP-Backends definiert, ignoriert der native OCI-Ingress-Controller die oci-native-ingress.oraclecloud.com/https-listener-port-Annotation und erstellt keinen HTTPS-Listener.
    • Wenn Sie sowohl oci-native-ingress.oraclecloud.com/http-listener-port- als auch oci-native-ingress.oraclecloud.com/https-listener-port-Annotationen in ein Ingress-Ressourcenmanifest aufnehmen, das nur HTTPS-Backends definiert, ignoriert der native OCI-Ingress-Controller die oci-native-ingress.oraclecloud.com/http-listener-port-Annotation und erstellt keinen HTTP-Listener.

Load Balancer nach dem Löschen von IngressClass beibehalten

Sie können angeben, dass der native OCI-Ingress-Controller den Load Balancer für eine IngressClass-Ressource beibehalten soll, wenn Sie die IngressClass selbst löschen.

Mit der oci-native-ingress.oraclecloud.com/delete-protection-enabled-Annotation im Manifest IngressClass geben Sie an, ob der Load Balancer gelöscht wird. Setzen Sie die Annotation auf true, um den Load Balancer beizubehalten, wenn Sie IngressClass löschen. Setzen Sie die Annotation auf false (oder nehmen Sie die Annotation nicht in das Manifest auf), um den Load Balancer zu löschen, wenn Sie IngressClass löschen. Beispiel:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: <ic-name>
  annotations:
    oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true"
spec:
  ...

Wenn Sie eine IngressClass-Ressource löschen und die Annotation verwenden, um den Load Balancer beizubehalten, behält der native OCI-Ingress-Controller den Load Balancer selbst bei, löscht jedoch Verknüpfungen mit anderen unterstützenden Ressourcen (wie Netzwerksicherheitsgruppen, Tags, eine Web Application Firewall). Der native OCI-Ingress-Controller löscht auch das erstellte default_ingress BackendSet-Backend-Set.

Beachten Sie jedoch, dass der native OCI-Ingress-Controller OCI-Load-Balancer-Ressourcen (Listener, Backend-Sets) nicht löscht, die er für Ingress-Ressourcen erstellt hat, die derzeit die gelöschte IngressClass referenzieren. Löschen Sie daher vor dem Löschen einer IngressClass-Ressource zunächst eine beliebige Ingress-Ressource, die auf die IngressClass in ihrem Manifest verweist. Wenn Sie diese Ingress-Ressourcen nicht zuerst löschen, sind die für sie erstellten OCI-Ressourcen weiterhin im Load Balancer vorhanden.

Tags auf den Load Balancer anwenden

Sie können angeben, dass der native Ingress-Controller von OCI definierte Tags und Freiformtags auf einen Load Balancer anwenden soll, den er erstellt (für eine IngressClass-Ressource) oder verwaltet (sofern in der oci-native-ingress.oraclecloud.com/id-Annotation angegeben). Mit Tagging können Sie verschiedene Ressourcen über Compartments hinweg gruppieren. Außerdem können Sie Ressourcen mit Ihren eigenen Metadaten annotieren. Weitere Informationen zu Tags finden Sie unter Clusterbezogene Kubernetes-Ressourcen taggen.

Definierte Tags auf den Load Balancer anwenden

Definierte Tags werden von einem Tagadministrator eingerichtet und verwaltet. Ein definiertes Tag besteht aus einem Tag-Namespace, einem Schlüssel und einem Wert. Vor dem Anwenden eines definierten Tags auf eine Ressource müssen Sie in einem Mandanten den Tag-Namespace und die Tagschlüsseldefinition einrichten.

Um anzugeben, dass der native OCI-Ingress-Controller definierte Tags auf den Load Balancer anwenden soll, verwenden Sie die Annotation oci-native-ingress.oraclecloud.com/defined-tags im Manifest IngressClass im folgenden Format:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: <ic-name>
  annotations:
    oci-native-ingress.oraclecloud.com/defined-tags: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
spec:
  ...

Hierbei gilt:

  • <tag-namespace> ist der Tag-Namespace, zu dem das Tag gehört.
  • <tag-key> ist der Name eines definierten Tags, das auf den Load Balancer angewendet werden soll.
  • <tag-value> ist entweder ein Wert für das Tag aus einer vordefinierten Werteliste oder ein neuer Wert oder leer (je nachdem, wie das definierte Tag eingerichtet wurde).

Der Wert der oci-native-ingress.oraclecloud.com/defined-tags-Annotation ist eine JSON-Zeichenfolge, mit der Sie mehrere Tag-Namespaces, Tagschlüssel und Tagwerte im JSON-Format angeben können.

Beispiel:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: my-ingress-class
  annotations:
    oci-native-ingress.oraclecloud.com/defined-tags: '{"Operations": {"CostCenter": "42", "Department": "001"}, "Sales": {"Region": "US"}}'
spec:
  ...

Wenn Sie eines der Tags in der oci-native-ingress.oraclecloud.com/defined-tags-Annotation des Manifests IngressClass ändern, wird der native OCI-Ingress-Controller alle in der Annotation angegebenen definierten Tags erneut auf den Load Balancer anwenden. Wenn ein definiertes Tag jedoch eine Tagvariable enthält, wendet der native OCI-Ingress-Controller das definierte Tag nur dann erneut auf den Load Balancer an, wenn das Tag noch nicht vorhanden ist.

Damit der native Ingress-Controller von OCI definierte Tags auf einen Load Balancer anwenden kann, muss eine geeignete IAM-Policy vorhanden sein, damit der native Ingress-Controller von OCI den entsprechenden Tag-Namespace verwenden kann. Weitere Informationen finden Sie unter:

Freiformtags auf den Load Balancer anwenden

Freiformtags werden nicht von einem Tagadministrator verwaltet. Ein Freiformtag besteht aus einem Schlüssel und einem Wert. Im Gegensatz zu definierten Tags gehören Freiformtags nicht zu einem Tag-Namespace.

Um anzugeben, dass der native OCI-Ingress-Controller Freiformtags auf den Load Balancer anwenden soll, verwenden Sie die oci-native-ingress.oraclecloud.com/freeform-tags-Annotation im Manifest IngressClass im folgenden Format:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: <ic-name>
  annotations:
    oci-native-ingress.oraclecloud.com/freeform-tags: '{"<tag-key>": "<tag-value>"}'
spec:
  ...

Hierbei gilt:

  • <tag-key> ist ein Name für das Freiformtag, das auf den Load Balancer angewendet werden soll.
  • <tag-value> ist ein Wert für das Freiformtag, das auf den Load Balancer angewendet werden soll.

Der Wert der oci-native-ingress.oraclecloud.com/freeform-tags-Annotation ist eine JSON-Zeichenfolge, mit der Sie mehrere Tagschlüssel und Tagwerte im JSON-Format angeben können.

Beispiel:

apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: my-ingress-class
  annotations:
    oci-native-ingress.oraclecloud.com/freeform-tags: '{"Project": "Red", "Version": "Alpha"}'
spec:
  ...

Wenn Sie eines der Tags in der oci-native-ingress.oraclecloud.com/freeform-tags-Annotation des Manifests IngressClass ändern, wird der native OCI-Ingress-Controller alle in der Annotation angegebenen Freiformtags erneut auf den Load Balancer anwenden.

Tagstandardwerte auf den Load Balancer anwenden

Tagstandardwerte werden für ein bestimmtes Compartment eingerichtet. Tagstandardwerte sind Compartment-spezifisch. Tagstandards geben definierte Tags an, die automatisch auf alle Ressourcen angewendet werden, die zum Zeitpunkt der Erstellung in einem bestimmten Compartment erstellt wurden.

Wenn Sie den nativen OCI-Ingress-Controller der Version 1.4.0 (oder höher) verwenden, werden Tagstandardwerte automatisch auf Load Balancer angewendet, die der native OCI-Ingress-Controller erstellt. Anschließend behält der native Ingress-Controller von OCI einen Tagstandard bei, der auf einen Load Balancer angewendet wird, sofern eine der folgenden Bedingungen nicht erfüllt ist:

  • Sie entfernen manuell einen Tagstandardwert, der automatisch auf einen Load Balancer angewendet wurde.
  • Sie geben einen Tagstandardwert als definiertes Tag mit der oci-native-ingress.oraclecloud.com/defined-tags-Annotation an (in diesem Fall behandelt der native Ingress-Controller von OCI den Tagstandardwert wie jedes andere definierte Tag).

Beachten Sie, dass Tagstandardwerte mit vom Benutzer angewendeten Werten nicht unterstützt werden. Wenn ein Tagstandardwert mit einem vom Benutzer angewendeten Wert für ein Compartment eingerichtet wurde, in dem der native OCI-Ingress-Controller einen Load Balancer erstellen oder verwalten soll, müssen Sie mit der oci-native-ingress.oraclecloud.com/defined-tags-Annotation den Tagstandard als definiertes Tag angeben.

Für Load Balancer, die mit einer OCI-nativen Ingress-Controllerversion vor Version 1.4.0 erstellt wurden, oder wenn Sie mit der oci-native-ingress.oraclecloud.com/id-Annotation angeben, dass der OCI-native Ingress-Controller einen vorhandenen Load Balancer verwalten soll, beachten Sie, dass Tagstandardwerte nicht unterstützt werden. Um einen Tagstandardwert anzuwenden oder beizubehalten, verwenden Sie in beiden Fällen die Annotation oci-native-ingress.oraclecloud.com/defined-tags, um den Tagstandardwert stattdessen als definiertes Tag anzugeben.