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
- Verhalten von OCI Native Ingress Controller mit Annotationen anpassen
- Podbereitschaftstor einrichten
- TCP-Listener einrichten
- Unterstützung für HTTPS-/TLS-Anforderungen hinzufügen
- HTTP/HTTPS-Listener-Ports aggregieren
- Load Balancer nach dem Löschen von IngressClass beibehalten
- Tags auf den Load Balancer anwenden
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. | 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. | 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 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 |
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
kubectl get pods -o wide -w
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:
- Definieren Sie eine neue Ingress-Ressource in einer YAML-Datei. Siehe Ingress-Ressource erstellen.
- Fügen Sie im Abschnitt
metadata:
einannotations:
-Element hinzu, und setzen Sie dieoci-native-ingress.oraclecloud.com/protocol
-Annotation in folgendem Format aufTCP
: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: ...
- Fügen Sie im Abschnitt
rules:
des RessourcenmanifestsIngress
eine Regel für jeden Listener hinzu, der TCP-Traffic empfangen soll:- (empfohlen) Setzen Sie
paths.pathType
aufImplementationSpecific
. - 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 anmy-second-svc:8081
weiterleitet, können Sie wie folgt einIngress
-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
- (empfohlen) Setzen Sie
-
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:
- Option 1: OCI Native Ingress Controller ruft das Zertifikat vom Certificates-Service mit einem Kubernetes-Secret ab: Sie erstellen ein Kubernetes-Secret und geben den Namen des Secrets in einem
Ingress
-Ressourcenmanifest an. Der native Ingress-Controller von OCI verwendet das Kubernetes-Secret, um ein Zertifikat und ein CA-Bundle (Certificate Authority-Bundle) vom OCI Certificates-Service abzurufen. Der native OCI-Ingress-Controller verknüpft das Zertifikat und das CA-Bundle mit dem Listener und dem Backend-Set. - Option 2: Sie erhalten ein Zertifikat vom Certificates-Service: Sie erstellen manuell ein Zertifikat im OCI Certificates-Service selbst. Anschließend geben Sie die OCID des Zertifikats im Ressourcenmanifest
Ingress
als Annotation an. Der native OCI-Ingress-Controller verknüpft das Zertifikat mit dem Listener und dem Backend-Set.
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 deroci-native-ingress.oraclecloud.com/id
-Annotation angegeben wird (es sei denn, Sie habenoci-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 RessourcenmanifestIngress
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 dieoci-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:
- 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):
-
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
-
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.
-
- 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
:-
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 Sieca.cert
weglassen können, vorausgesetzt, Sie nehmen die gesamte Zertifikatskette als Wert vontls.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
-
Erstellen Sie die Secret-Ressource, indem Sie
kubectl create -f <filename>.yaml
eingeben
-
-
- Fügen Sie das Kubernetes-Secret zu einem
Ingress
-Ressourcenmanifest hinzu:- Definieren Sie eine neue Ingress-Ressource in einer YAML-Datei. Siehe Ingress-Ressource erstellen.
- Fügen Sie im Abschnitt
spec:
des Manifests eintls:
-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
- 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
-
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:
- 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.
- Notieren Sie sich die OCID des Zertifikats.
- Fügen Sie die OCID des Zertifikats zu einem
Ingress
-Ressourcenmanifest hinzu:- Definieren Sie eine neue Ingress-Ressource in einer .yaml-Datei. Siehe Ingress-Ressource erstellen.
- Fügen Sie im Abschnitt
metadata:
einannotations:
-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: ...
- Fügen Sie im Abschnitt
rules:
des RessourcenmanifestsIngress
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
-
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
undoci-native-ingress.oraclecloud.com/https-listener-port
unabhängig voneinander festlegen, sodass Sie nicht beide Annotationen festlegen müssen. -
Wenn das Ressourcenmanifest
Ingress
die Annotationoci-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 RessourcenmanifestIngress
vorhanden) - wendet die
oci-native-ingress.oraclecloud.com/https-listener-port
-Annotation (falls im RessourcenmanifestIngress
vorhanden) an, um einen einzelnen Listener für den gesamten Traffic zu erstellen
- ignoriert die
- Unabhängig von den Annotationen
oci-native-ingress.oraclecloud.com/http-listener-port
undoci-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 einIngress
-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 einIngress
-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 auchoci-native-ingress.oraclecloud.com/https-listener-port
-Annotationen in einIngress
-Ressourcenmanifest aufnehmen, das nur HTTP-Backends definiert, ignoriert der native OCI-Ingress-Controller dieoci-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 auchoci-native-ingress.oraclecloud.com/https-listener-port
-Annotationen in einIngress
-Ressourcenmanifest aufnehmen, das nur HTTPS-Backends definiert, ignoriert der native OCI-Ingress-Controller dieoci-native-ingress.oraclecloud.com/http-listener-port
-Annotation und erstellt keinen HTTP-Listener.
- Wenn Sie die
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.