Ingress
NCP erstellt einen Load Balancer auf Schicht 7 für Ingresses mit TLS-Spezifikation und einen Load Balancer auf Schicht 7 für Ingresses ohne TLS-Spezifikation. Sie können auch CRDs (CustomResourceDefinitions) für die Ingress-Skalierung erstellen.
Beachten Sie Folgendes:
- Alle Ingresses erhalten eine einzelne IP-Adresse.
- Der Ingress-Ressource wird eine IP-Adresse aus dem externen IP-Pool zugeteilt, der durch die Optionexternal_ip_poolsim Abschnitt[nsx_v3]inncp.iniangegeben ist. Der Load Balancer wird unter dieser IP-Adresse und auf den HTTP- und HTTPS-Ports (80 und 443) bereitgestellt.
- Der Ingress-Ressource wird eine IP-Adresse aus dem externen IP-Pool zugeteilt, der durch die Optionexternal_ip_pools_lbim Abschnitt[nsx_v3]inncp.iniangegeben ist. Wenn die Optionexternal_ip_pools_lbnicht vorhanden ist, wird der vonexternal_ip_poolsangegebene Pool verwendet. Der Load Balancer wird unter dieser IP-Adresse und auf den HTTP- und HTTPS-Ports (80 und 443) bereitgestellt.
- Sie können zu einem anderen IP-Pool wechseln, indem Sie die Konfiguration ändern und NCP neu starten.
- Sie können ein Standardzertifikat für TLS angeben. Informationen zum Erstellen eines Zertifikats sowie zum Mounten eines Zertifikats in den NCP-Pod finden Sie unten.
- Ingresses ohne TLS-Spezifikation werden auf dem virtuellen HTTP-Server (Port 80) gehostet.
- Ingresses mit TLS-Spezifikation werden auf dem virtuellen HTTPS-Server (Port 443) gehostet. Der Load Balancer fungiert als SSL-Server und beendet die SSL-Clientverbindung.
- Eine Ingress-Änderung durch Hinzufügen oder Entfernen des TLS-Abschnitts wird nicht unterstützt. Nach dem Entfernen destls-Schlüssels aus der Ingress-Spezifikation werden die Ingress-Regeln vom virtuellen HTTPS-Server (Port 443) auf den virtuellen HTTP-Server (Port 80) übertragen. Ebenso werden die Ingress-Regeln vom virtuellen HTTP-Server (Port 80) auf den virtuellen HTTPS-Server (Port 443) übertragen, wenn dertls-Schlüssel zur Ingress-Spezifikation hinzugefügt wird.
- Wenn in Ingress-Definitionen für einen einzelnen Cluster doppelte Regeln vorliegen, wird nur die erste Regel angewendet. Die anderen Ingresses mit den doppelten Regeln werden mit einem Fehler kommentiert. Wenn Sie zum Beispiel zwei Ingresses mit identischenhostundpatherstellen, ein Ingresses TLS und der andere nicht-TLS ist, dabeikubernetes.io/ingress.allow-httpgleichfalseist, werden die beiden Regeln auf verschiedenen virtuellen Servern erstellt und stehen nicht in Konflikt miteinander. Wennkubernetes.io/ingress.allow-httpjedochtrueist, wird der später angewendete Ingress mit einem Fehler kommentiert. Weitere Informationen finden Sie im Abschnitt "Fehler" unten.
- Pro Cluster wird nur ein einzelner Ingress mit einem Standard-Backend unterstützt. Datenverkehr, der mit keiner Ingress-Regel übereinstimmt, wird an das Standard-Backend weitergeleitet.
- Wenn mehrere Ingresses mit einem Standard-Backend vorhanden sind, wird nur der erste konfiguriert. Die anderen erhalten eine Fehleranmerkung. Weitere Informationen finden Sie im Abschnitt "Fehler" unten.
- (NCP 3.0.0 und 3.0.1) Die Regeln werden in der folgenden Reihenfolge angewendet:
- Regeln, bei denenhostundpathangegeben ist und die keine übereinstimmenden regulären Ausdrücke haben.
- Regeln, bei denenhostundpathangegeben ist und die übereinstimmende reguläre Ausdrücke haben (mit dem längsten Ingresspathzuerst).
- Regeln, bei denenhostoderpathangegeben ist und die keine übereinstimmenden regulären Ausdrücke haben.
- Regeln, bei denenhostoderpathangegeben ist und die übereinstimmende reguläre Ausdrücke haben (mit dem längsten Ingresspathzuerst).
- (NCP 3.0.2 und höher) Die Regeln werden in der folgenden Reihenfolge angewendet:
- Regeln sowohl mithostals auchpathangegeben.
- Regeln mit demExactpathType.
- Regeln mit demPrefixpathType.
- Regeln mit demRegexpathType.
- Regeln mithostoderpathangegeben.
- Regeln mit demExactpathType.
- Regeln mit demPrefixpathType.
- Regeln mit demRegexpathType.
Hinweis: Wenn mehrere Pfade einer Anforderung entsprechen, wird dem längsten übereinstimmenden Pfad Vorrang eingeräumt.Informationen zupathType:- ImplementationSpecificwird genauso behandelt wieExact.
- Zwei passende Pfade mit unterschiedlichenpathTypen können nebeneinander vorhanden sein.
- Für denPrefix-Typ stimmt/foomit/foo/überein,/foo/bar, aber nicht/foobzw. /foobar. Um mit/fooübereinzustimmen, fügen Sie denExact-Pfad/foozur Ingress-Regel hinzu.
- (Dies ist anwendbar, wenn Sie den Richtlinienmodus verwenden.) Wenn ein TLS-Ingress mit einem standardmäßigen Backend erstellt wird, sollten Sie aus folgenden Gründen das standardmäßige Backend so einrichten, dass es sowohl auf HTTP als auch auf HTTPS-Anforderungen reagiert:
- Der Load Balancer beendet TLS und sendet HTTP-Anforderungen an den standardmäßigen Backend-Server, wenn TLS-Ingress (im Cluster für das Anwendungsbeispiel „Kubernetes/PKS“ oder im selben Namespace für das Anwendungsbeispiel „Project Pacific“) mit dem Host vorhanden ist, der dem Host in der Anforderung entspricht.
- Der Load Balancer verschlüsselt die HTTPS-Anforderung neu und sendet sie an den standardmäßigen Backend-Server, wenn kein TLS-Ingress (im Cluster für das Anwendungsbeispiel „Kubernetes/PKS“ oder im selben Namespace für das Anwendungsbeispiel „Project Pacific“) mit dem Host vorhanden ist, der dem Host in der Anforderung entspricht.
- (NCP 3.0.0 und 3.0.1) DieIngressClass-Ressource wird nicht unterstützt.
- (NCP 3.0.2 und höher) DieIngressClass-Ressource wird unterstützt.
- (NCP 3.0.0 und 3.0.1) DaspathType-Attribut wird nicht unterstützt.
- (NCP 3.0.2 und höher) DaspathType-Attribut wird unterstützt.
- (NCP 3.0.2 und höher) Die Clientauthentifizierung JWT (JSON Web Token) wird unterstützt. Für diese Funktion ist NSX-T Data Center 3.0.0 oder höher erforderlich.
Ab Kubernetes 1.18 ist die
kubernetes.io/ingress.class
-Anmerkung veraltet und wird durch die IngressClass-Ressource ersetzt. Um NSX-T als Ingress-Controller in der IngressClass-Ressource anzugeben, legen Sie den Controller-Parameter auf k8s.io/nsx
fest. Beispiel:kind: IngressClass metadata: name: nsx-lb annotations: ingressclass.kubernetes.io/is-default-class: true spec: controller: k8s.io/nsx
Um einen Ingress-Controller eines Drittanbieters anzugeben, legen Sie den Controller-Parameter auf
k8s.io/<controller name>
. Beispiel:kind: IngressClass metadata: name: nginx-lb annotations: ingressclass.kubernetes.io/is-default-class: false spec: controller: k8s.io/ingress-nginx
Um die IngressClass als Standardeinstellung für den Cluster festzulegen, legen Sie die Anmerkung
ingressclass.kubernetes.io/is-default-class
auf true
fest. Weitere Informationen finden Sie im obigen Beispiel.Sie dürfen nicht sowohl die
kubernetes.io/ingress.class
-Anmerkung als auch die IngressClass-Ressource verwenden.Funktions Anmerkungen
In der folgenden Tabelle sind die von NCP unterstützten Anmerkungen aufgeführt:
Anmerkung | Beschreibung | Unterstützte Werte | Standardwert | NCP-Version |
---|---|---|---|---|
kubernetes.io/ingress.allow-http | Aktiviert HTTP-Anforderungen zusätzlich zu HTTPS | true, false | true | 2.5 und höher |
ncp/use-regex | Aktiviert Pfad Musterübereinstimmung | true, false | false | 2.5.1 und höher |
ingress.kubernetes.io/rewrite-target | Der Pfad der eingehenden Anforderung wird neu geschrieben |
| Kein Standardwert | Siehe Spalte „Unterstützte Werte“ |
ncp/http-redirect | Leitet HTTP-Anforderungen an HTTPS weiter | true, false | false | 2.5.1 und höher |
kubernetes.io/ingress.class | Gibt an, welche Ingress-Steuerung für diesen Ingress verantwortlich ist | nsx, nginx usw. | nsx | 2.5 und höher |
nsx/loadbalancer | Platziert einen Ingress auf einem dedizierten Load Balancer | Name einer LoadBalancer-CRD | Kein Standardwert | 2.5.1 und höher |
ncp/whitelist-source-range | Begrenzt den Ingress-Zugriff nach IP der Anforderungsquelle | Kommagetrennte Liste der CIDRs, IP-Adressen oder IP-Bereiche. | Kein Standardwert | 3.0.0 und höher |
ncp/ssl-mode | Legt den SSL-Modus für alle Regeln in einem Ingress fest. | offload, reencrypt, passthrough | offload | 3.0.1 und höher |
ncp/jwt-alg | Legt fest, welcher Algorithmus zum Validieren der JWT-Signatur verwendet werden soll. Aktiviert die JWT-Clientauthentifizierung, wenn mit ncp/jwt-secret festgelegt. | HS256, RS256 | Kein Standardwert | 3.0.2 und höher |
ncp/jwt-secret | Gibt den Namen des Kubernetes-Geheimnisses an, der den für die Signaturvalidierung verwendeten JWT- oder öffentlichen Schlüssel enthält. Aktiviert die JWT-Clientauthentifizierung, wenn mit ncp/jwt-alg festgelegt. | Name eines Kubernetes-Geheimnisses | Kein Standardwert | 3.0.2 und höher |
ncp/jwt-token | Zusätzlicher Speicherort für die Suche nach JWT in der HTTP-Anfrage. | _arg_<param_name>, _cookie_<cookie_name> | Kein Standardwert | 3.0.2 und höher |
ncp/jwt-realm | Gibt den Realm-Header an, der mit 401 zurückgegeben wird, wenn die Authentifizierung fehlgeschlagen ist. | Zeichenfolge, die den Bereich angibt | Hostname der Ingress-Regel | 3.0.2 und höher |
ncp/jwt-preserve | Option, um JWT beizubehalten und nach erfolgreicher Authentifizierung an Backend zu übergeben. | true, false | true | 3.0.2 und höher |
Details zu den Anmerkungen:
- Übereinstimmender Pfad-Regex (regulärer Ausdruck)
- Für NCP 2.5.0 und früherIn NCP 2.5.0 und früher werden alle Abgleiche von Unterpfaden automatisch mit den Zeichen für einen regulären Ausdruck '.' und '*' aktiviert. Beispielsweise entspricht der Pfad/coffee/.*dem Pfad/coffee/gefolgt von NULL, einem oder mehreren Zeichen, z. B./coffee/,/coffee/aund/coffee/b, aber nicht/coffee,/coffeecupoder/coffeecup/a.Beispiel für eine Ingress-Spezifikation:kind: Ingress metadata: name: cafe-ingress spec: rules: - http: paths: - path: /coffee/.* #Matches /coffee/, /coffee/a but NOT /coffee, /coffeecup, etc. backend: serviceName: coffee-svc servicePort: 80
- Für NCP 2.5.1 und höherSie können den Abgleich mit regulärem Ausdruck für den Ingress-Parameterpath(aber nichthost) mithilfe der Anmerkungncp/use-regexaktivieren oder deaktivieren. Wenn der Wert auffalsefestgelegt ist, wird der genaue Pfad Abgleich durchgeführt, indem dieequalsübereinstimmen. Wenn der Wert auftruefestgelegt ist, wird die Übereinstimmung mit regulärem Ausdruck durch Hinzufügen des Zeichenfolgen Zeichens (^) und des Zeichenfolgen Zeichens ($) zum Pfad so durchgeführt, dass der gesamte Anforderungs-URI mit dem Muster übereinstimmt. Beachten Sie, dass bei Verwendung desOR-Operators (|) der Geltungsbereich immer mit Klammern angegeben wird, damit ^ und $ auf alle Operanden angewendet werden. Beispiel:path: /(tea|coffee|milk). Beispiel für eine Ingress-Spezifikation:kind: Ingress metadata: name: cafe-ingress annotations: kubernetes.io/ingress.class: "nsx" ncp/use-regex: "true" spec: rules: - host: cafe.example.com http: paths: - path: /tea/.* backend: serviceName: tea-svc servicePort: 80
- Aktualisieren der Ingresses vor dem Upgrade von NCP auf 2.5.1 oder höherDies ist nur erforderlich, wenn Sie über Ingresses verfügen, die alle einen Abgleich der Unterpfade mithilfe der Zeichen '.' und '*' erfordern.
- Aktualisieren Sie die Ingresses, um die Anmerkungncp/use-regex: trueeinzubeziehen.
- Wenn Sie für alle unter Pfad Übereinstimmungen Pfade wie/coffee/*oder/*haben, ändern Sie sie in/coffee/.*und/.*./coffee/.*werden mit/coffee/,/coffee/a,/coffee/b,/coffee/a/busw. übereinstimmen./.*werden mit/coffee,/tea,/coffee/ausw. übereinstimmen. Das Weglassen des Pfads führt zu demselben Verhalten wiepath: /.*.
- Beispiel für die Anmerkungingress.kubernetes.io/rewrite-target:kind: Ingress metadata: name: cafe-ingress annotations: ingress.kubernetes.io/rewrite-target: / spec: rules: - host: cafe.example.com http: paths: - path: /tea backend: serviceName: tea-svc servicePort: 80 - path: /coffee backend: serviceName: coffee-svc servicePort: 80Die Pfade/teaund/coffeewerden in/umgeschrieben, bevor die URL an den Backend-Dienst gesendet wird.Ab NCP 2.5.1 und NSX-T 2.5.1 werden die erfassten Gruppen in den nummerierten Platzhaltern im Format $1, $2 usw. gespeichert, wennpathmit einem regulären Ausdruck angegeben wird. Diese Platzhalter können als Parameter in der Anmerkungingress.kubernetes.io/rewrite-targetverwendet werden. Benannte Erfassungsgruppen und benannte Platzhalter werden nicht unterstützt. Beispiel:kind: Ingress metadata: name: cafe-ingress annotations: kubernetes.io/ingress.class: "nsx" ncp/use-regex: "true" #/tea/cup will be rewritten to /cup before sending request to endpoint ingress.kubernetes.io/rewrite-target: /$1 spec: rules: - host: cafe.example.com http: paths: - path: /tea/(.*) backend: serviceName: tea-svc servicePort: 80
- Informationen zur Anmerkungkubernetes.io/ingress.allow-http:
- Wenn die Anmerkung auffalsefestgelegt ist, werden Regeln für den virtuellen HTTPS-Server erstellt.
- Wenn die Anmerkung auftruefestgelegt ist oder fehlt, werden Regeln sowohl für virtuelle HTTP- als auch HTTPS-Server erstellt. HTTPS-Regeln werden nur erstellt, wenn der TLS-Abschnitt in der Ingress-Spezifikation vorhanden ist.
- Informationen zur Anmerkungncp/http-redirect:
- Wenn die Anmerkung auffalsefestgelegt ist, wird der eingehende HTTP-Datenverkehr (Port 80) zum virtuellen HTTP-Server nicht zum virtuellen HTTPS-Server umgeleitet.
- Wenn die Anmerkung auftruefestgelegt ist, wird der eingehende HTTP-Datenverkehr (Port 80) zum virtuellen HTTP-Server zum virtuellen HTTPS-Server (Port 443) umgeleitet.
Diese Anmerkung ist nur gültig, wenn der TLS-Abschnitt vorhanden ist. Diese Anmerkung hat Vorrang vorkubernetes.io/ingress.allow-http. Wenn der Wert auftruefestgelegt ist, wird der übereinstimmende HTTP-Datenverkehr an HTTPS weitergeleitet, unabhängig davon, wiekubernetes.io/ingress.allow-httpfestgelegt ist. - Informationen zur Anmerkungkubernetes.io/ingress.class:
- Wenn der Wertnsxist, wird dieser Ingress von NCP verarbeitet. Wenn ein anderer Wert angegeben ist, wird der Ingress von NCP ignoriert. Weitere Informationen finden Sie unter Ingress-Controller von Drittanbietern.
- Weitere Informationen zur Anmerkungnsx/loadbalancerfinden Sie unter LoadBalancer-CRDs zum Verarbeiten der Ingress-Skalierung.
- Informationen zur Anmerkungncp/whitelist-source-range:
- Wenn diese Einstellung festgelegt ist, wird eine eingehende Anforderung nur akzeptiert, wenn die Quell-IP in dieser Anmerkung enthalten ist. Andernfalls wird der Datenverkehr verworfen.
- Sie können eine Kombination aus CIDR, IP-Adressen und IP-Bereichen angeben. Beispiel: 1.1.1.1/24, 2.2.2.2, 3.3.3.3-4.4.4.4.
- Beispiel-YAML:kind: Ingress metadata: name: cafe-ingress annotations: kubernetes.io/ingress.class: "nsx" ncp/whitelist-source-range: "192.168.128.0/17, 192.168.64.0-192.168.64.255, 192.168.16.32" spec: tls: - hosts: - cafe.example.com rules: - host: cafe.example.com http: paths: - path: /tea backend: serviceName: tea-svc servicePort: 80
- Informationen zur Anmerkungncp/ssl-mode:
- Diese Anmerkung gilt für alle Regeln in einem Ingress, und der Lastausgleichsdienst wird im ausgewählten SSL-Modus für diese Regeln ausgeführt.Hinweis: Wennncp/ssl-modeaufreencryptoderpassthroughfestgelegt ist, musskubernetes.io/ingress.allow-httpaufFalsegesetzt werden. Diese Anmerkung kann nicht aufpassthroughgesetzt werden, wenn die Anmerkungingress.kubernetes.io/rewrite-target,ncp/use-regexoderncp/whitelist-source-rangefestgelegt ist.
- Informationen zu JWT-Clientauthentifizierung:
- Um die JWT-Clientauthentifizierungsmethode für alle Regeln unter einem Ingress zu aktivieren, müssen sowohlncp/jwt-algals auchncp/jwt-secretauf einen gültigen Wert festgelegt werden. Wenn diese Option aktiviert ist, wird der eingehende HTTP-Datenverkehr nur dann an das Backend übergeben, wenn er ein gültiges JSON-Webtoken enthält. Andernfalls wird der Datenverkehr mit dem Status 401 abgelehnt.
- Diese Funktionen sind mit den folgenden Anmerkungen nicht kompatibel:
- kubernetes.io/ingress.allow-http: true
- ncp/http-redirect: true
- ncp/ssl-mode: passthrough
- ncp/jwt-alg:
- Unterstützte symmetrische Algorithmen: HS256
- Unterstützte asymmetrische Algorithmen: RS256
- ncp/jwt-secret:
- Ein symmetrischer Schlüssel oder öffentliches Zertifikat muss in einem Kubernetes-Geheimnis mit dem Namen konfiguriert werden, der in dieser Anmerkung unter demselben Namespace wie der Ingress angegeben ist.
- Bei symmetrischen Algorithmen muss das Geheimnis im Feldjwt.keygespeichert werden.
- Bei asymmetrischen Algorithmen muss das öffentliche Zertifikat im Feldtls.crtgespeichert werden.
- Die JWT-Clientauthentifizierung wird deaktiviert, wenn das symmetrische Geheimnis oder öffentliche Zertifikat nicht in den oben erwähnten Speicherorten gespeichert ist oder wenn die im Geheimnis gespeicherten Daten ungültig sind.
- ncp/jwt-token:
- In dieser Anmerkung kann nur ein Element konfiguriert werden.
- _arg_<param_name>: Für JWT als URI-Parameter übergeben. Geben Sie den Parameternamen an, der JWT enthält.
- _cookie_<cookie_name>: Für JWT als Cookie übergeben. Geben Sie den Cookienamen an, der JWT enthält.
Fehler
Fehler werden in der Ingress-Ressource als Anmerkung dokumentiert. Der Fehlerschlüssel lautet
ncp/error.loadbalancer
, der Schlüssel für Warnungen ncp/warning.loadbalancer
. Dies sind die möglichen Fehler und Warnungen: - ncp/error.loadbalancer:DEFAULT_BACKEND_IN_USEDieser Fehler weist darauf hin, dass bereits ein Ingress mit einem Standard-Back-End vorhanden ist. Der Ingress ist dann inaktiv. Dieser Fehler tritt auf, wenn (1) dieser Ingress für HTTP und ein weiterer Ingress für HTTP mit einem Standard-Backend existiert; (2) dieser Ingress für HTTPS und ein weiterer Ingress für HTTPS mit einem Standard-Backend existiert; oder (3) dieser Ingress für HTTP und HTTPS und ein weiterer Ingress für HTTP und HTTPS mit einem Standard-Backend existiert. Um den Fehler zu beheben, löschen Sie den Ingress und erstellen Sie ihn mit einer korrekten Spezifikation neu.
- ncp/warning.loadbalancer:SECRET_NOT_FOUNDDieser Fehler weist darauf hin, dass das in der Ingress-Spezifikation angegebene Geheimnis nicht vorhanden ist oder wennncp/jwt-algundncp/jwt-secretneu zugeordnet werden, aber das Geheimnis nicht im selben Namespace wie der Ingress gefunden werden kann. Der Ingress ist dann nur teilweise aktiv. Um den Fehler zu beheben, erstellen Sie den fehlenden geheimen Schlüssel. Beachten Sie, dass eine Warnung in der Anmerkung während des Lebenszyklus der Ingress-Ressource nicht gelöscht wird.
- ncp/warning.loadbalancer:INVALID_INGRESSDieser Fehler weist darauf hin, dass eine der folgenden Bedingungen wahr ist. Der Ingress ist dann inaktiv. Um den Fehler zu beheben, löschen Sie den Ingress und erstellen Sie ihn mit einer korrekten Spezifikation neu.
- Eine Ingress-Regel steht im Konflikt mit einer anderen Ingress-Regel im selben Kubernetes-Cluster. Konflikte werden nur noch für Ingresses mit der gleichen Abgleichstrategie, d. h. dem gleichen Wert für die Anmerkungncp/use-regex, ermittelt.
- Die Anmerkungkubernetes.io/ingress.allow-httpwird auffalsegesetzt, und der Ingress hat keinen TLS-Abschnitt.
- Die Anmerkungncp/http-redirectwird auftruegesetzt, und der Ingress hat keinen TLS-Abschnitt.
- Bei einer Ingress-Regel sindhostundpathnicht angegeben. Eine Ingress-Regel dieser Art weist dieselbe Funktionalität wie das Ingress-Standard-Backend auf. Verwenden Sie stattdessen das Ingress-Standard-Backend.
- Der Ingress weist JWL-Anmerkungen auf, die nicht korrekt verarbeitet werden können. Beispiel:
- Entwederncp/jwt-algoderncp/jwt-secretfehlt.
- ncp/jwt-algist mit einem nicht unterstützten Algorithmus konfiguriert.
- ncp/jwt-algundncp/jwt-secretsind mit anderen HTTP-aktivierenden Anmerkungen oder mit SSL-Passthrough konfiguriert.