Unterstützung von Ingress-Klassen
Was ist eine Ingress-Klasse?
In einem Kubernetes-Cluster kann es mehrere Ingress-Controller geben, und Sie benötigen eine Möglichkeit, eine bestimmte Ingress-Ressource einem Ingress-Controller zuzuordnen.
Sie können den Ingress-Controller, der die Ingress-Ressource verarbeiten soll, angeben, indem Sie
ingressClassName in Ihrer Ingress-Ressourcendefinition verwenden.
NetScaler Ingress Controller und Ingress-Klassen
Der NetScaler Ingress Controller unterstützt das Akzeptieren mehrerer Ingress-Ressourcen, die
spec.ingressClassName haben. Jede Ingress-Ressource kann nur einer ingress.class zugeordnet werden. Der Ingress Controller muss jedoch möglicherweise verschiedene Ingress-Ressourcen aus unterschiedlichen Klassen verarbeiten.
Sie können den Ingress Controller mehreren Ingress-Klassen zuordnen, indem Sie das Argument
--ingress-classes unter dem Abschnitt spec der YAML-Datei verwenden.
Wenn
ingress-classes für den Ingress Controller nicht angegeben ist, akzeptiert er alle Ingress-Ressourcen, unabhängig vom Vorhandensein von ingressClassName im Ingress-Objekt.
Wenn
ingress-classes angegeben ist, akzeptiert der Ingress Controller nur die Ingress-Ressourcen, die ingressClassName entsprechen. Der Ingress Controller verarbeitet in einem solchen Fall keine Ingress-Ressource ohne ingress.class.
Hinweis: Bei Ingress-Klassennamen wird die Groß-/Kleinschreibung nicht beachtet.
Beispiel-YAML-Konfigurationen mit Ingress-Klassen
Im Folgenden finden Sie den Ausschnitt aus einer Beispiel-YAML-Datei, um
ingress-classes dem Ingress Controller zuzuordnen. Diese Konfiguration funktioniert in beiden Fällen, in denen der Ingress Controller als eigenständiger Pod oder als Sidecar mit NetScaler CPX läuft. Im angegebenen YAML-Ausschnitt sind die folgenden Ingress-Klassen dem Ingress Controller zugeordnet.
-
my-custom-class -
Citrix
spec:
serviceAccountName: cic-k8s-role
containers:
- name: cic-k8s-ingress-controller
image:"quay.io/citrix/citrix-k8s-ingress-controller:latest"
# specify the ingress classes names to be supportedbyIngress Controller in args section.
# First line should be --ingress-classes, andeverysubsequent line should be
# the name of allowed ingress class. In the givenexampletwo classes named
# "citrix" and "my-custom-class" are accepted. Thiswill be case-insensitive.
args:
- --ingress-classes
Citrix
my-custom-class
Im Folgenden finden Sie den Ausschnitt aus einer Ingress-YAML-Datei, in der die Zuordnung der Ingress-Klasse dargestellt ist. Im gegebenen Beispiel ist eine Ingress-Ressource namens
web-ingress der Ingress-Klasse my-custom-class zugeordnet. Wenn der NetScaler Ingress Controller so konfiguriert ist, dass er my-custom-class akzeptiert, verarbeitet er diese Ingress-Ressource.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
name: web-ingress
spec:
ingressClassName: my-custom-class
Ingress V1 und IngressClass-Unterstützung
Mit Kubernetes Version 1.19 ist die Ingress-Ressource allgemein verfügbar. Im Rahmen dieser Änderung wird der Ingress-API eine neue Ressource namens
IngressClass hinzugefügt. Mithilfe dieser Ressource können Sie bestimmte Ingress-Controller mit Ingresses verknüpfen. Weitere Informationen zur Ressource IngressClass finden Sie in der Kubernetes-Dokumentation.
Im Folgenden sehen Sie eine Beispielressource
IngressClass.
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: citrix
spec:
controller: citrix.com/ingress-controller
Eine
IngressClass-Ressource muss sich auf die Ingress-Klasse beziehen, die dem Controller zugeordnet ist, der die Ingress-Regeln implementieren soll, wie folgt gezeigt:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: minimal-ingress
spec:
ingressClassName: citrix
rules:
- host: abc.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test
port:
number: 80
Der NetScaler Ingress Controller verwendet die folgenden Regeln, um die Ingresses abzugleichen.
-
Wenn der NetScaler Ingress Controller gestartet wird, ohne das Argument
--ingress-classesanzugeben:-
Wenn die Kubernetes-Version kleiner als 1.19 ist (IngressClass V1-Ressource wird unterstützt)
-
Gleicht jedes Ingress-Objekt ab
-
-
Wenn die Kubernetes-Version größer oder gleich 1.19 ist (IngressClass V1-Ressource wird unterstützt)
-
Gleicht jedes Ingress-Objekt ab, bei dem das Feld
spec.ingressClassNamenicht festgelegt ist. -
Gleicht jedes Ingress ab, wenn das Feld
spec.ingressClassNamedes Ingress-Objekts festgelegt ist und einev1.IngressClass-Ressource mit demselben Namen existiert und das Feldspec.controllerder Ressourcecitrix.com/ingress-controllerist.
-
-
-
Wenn der NetScaler Ingress Controller mit einer oder mehreren Ingress-Klassen gestartet wird, die mit dem Argument
--ingress-classesfestgelegt wurden.-
Wenn die Kubernetes-Version kleiner als 1.19 ist (IngressClass V1-Ressource wird unterstützt)
-
Gleicht jedes Ingress ab, dessen Ingress-Klassen-Annotation
kubernetes.io/ingress.classmit der der konfigurierten Ingress-Klassen übereinstimmt.
-
-
Wenn die Kubernetes-Version größer oder gleich 1.19 ist (IngressClass V1-Ressource wird unterstützt).
-
Entspricht jedem Ingress, bei dem die Ingress-Klassen-Annotation
kubernetes.io/ingress.classmit den konfigurierten Ingress-Klassen übereinstimmt. Diese Annotation ist veraltet, hat aber eine höhere Priorität als das Feldspec.IngressClassName, um die Abwärtskompatibilität zu unterstützen. -
Entspricht jedem Ingress-Objekt, wenn eine
v1.IngressClassRessource mit den folgenden Attributen existiert:-
Der Name der Ressource stimmt mit dem Argumentwert
--ingress-classesüberein. -
Das Feld
spec.controllerder Ressource ist alscitrix.com/ingress-controllerfestgelegt. -
Der Name der Ressource stimmt mit dem Feld
spec.ingressClassNamedes Ingress-Objekts überein.
-
-
Entspricht jedem Ingress-Objekt, bei dem das Feld
spec.ingressClassNamenicht gesetzt ist und wenn einev1.IngressClassRessource mit den folgenden Attributen existiert:-
Der Name der Ressourcen stimmt mit dem Argumentwert
--ingress-classesüberein. -
Das Feld
spec.controllerder Ressource ist alscitrix.com/ingress-controllerfestgelegt. -
Die Ressource ist als Standardklasse unter Verwendung der Annotation
ingressclass.kubernetes.io/is-default-classkonfiguriert. Weitere Informationen finden Sie in der Kubernetes-Dokumentation.
-
-
-
Hinweis:
-
Wenn sowohl die Annotation als auch
spec.ingressClassNamedefiniert sind, wird die Annotation vorspec.ingressClassNameabgeglichen. Wenn die Annotation nicht übereinstimmt, wird der Abgleichvorgang für das Feldspec.ingressClassNamenicht durchgeführt. -
Wenn Sie Helm-Charts zur Installation des NetScaler Ingress Controller verwenden und die
IngressClassRessource unterstützt wird und der NetScaler Ingress Controller mit dem Argument--ingress-classesbereitgestellt wird, wird diev1.IngressClassRessource standardmäßig erstellt.
Aktualisieren des Ingress-Status für die Ingress-Ressourcen mit der angegebenen IP-Adresse
Um das Feld
Status.LoadBalancer.Ingress der vom NetScaler Ingress Controller verwalteten Ingress-Ressourcen mit den zugewiesenen IP-Adressen zu aktualisieren, geben Sie das Befehlszeilenargument --update-ingress-status yes an, wenn Sie den NetScaler Ingress Controller starten.
Hinweis:
Für Helm-Bereitstellungen ist der entsprechende Helm-Chart-Parameter für
update-ingress-status updateIngressStatus, der auf true gesetzt werden muss.
Diese Funktion wird sowohl bei eigenständigen als auch bei Sidecar-NSIC-Bereitstellungen unterstützt. Für einen als Sidecar bereitgestellten NSIC wird diese Funktion ab NSIC-Version 2.2.10 unterstützt.
Ingress-Statusaktualisierung für Sidecar-Bereitstellungen
In Kubernetes kann Ingress als einziger Einstiegspunkt verwendet werden, um mehrere Anwendungen der Außenwelt zugänglich zu machen. Der Ingress hätte ein
Address (Status.LoadBalancer.IP) Feld, das nach der erfolgreichen Ingress-Erstellung aktualisiert wird. Dieses Feld wird mit einer öffentlichen IP-Adresse oder einem Hostnamen aktualisiert, über die/den die Kubernetes-Anwendung erreicht werden kann. In Cloud-Bereitstellungen kann dieses Feld auch die IP-Adresse oder der Hostname eines Cloud-Lastenausgleichs sein.
In Cloud-Bereitstellungen wird NetScaler CPX zusammen mit dem Ingress-Controller über einen Dienst vom Typ
type LoadBalancer verfügbar gemacht, der wiederum einen Cloud-Lastenausgleich erstellt. Der Cloud-Lastenausgleich macht dann den NetScaler CPX zusammen mit dem Ingress-Controller verfügbar. Daher sollten die mit dem NetScaler CPX verfügbar gemachten Ingress-Ressourcen unter Verwendung der öffentlichen IP-Adresse oder des Hostnamens des Cloud-Lastenausgleichs aktualisiert werden.
Dieses Update ist auch für On-Premise-Bereitstellungen anwendbar.
-
Bei Dual-Tier-Ingress-Bereitstellungen, bei denen NetScaler CPX über einen Dienst vom Typ
LoadBalancerfür den Tier-1 NetScaler VPX Ingress verfügbar gemacht wird, wird das FeldAddress(Status.LoadBalancer.IP) der von NetScaler CPX betriebenen Ingress-Ressourcen mit der VIP-Adresse aktualisiert. -
Bei Dual-Tier-Ingress-Bereitstellungen, bei denen NetScaler CPX über einen Dienst vom Typ
ClusterIPoderNodePortverfügbar gemacht wird, wird das FeldAddress(Status.LoadBalancer.IP) der von NetScaler CPX betriebenen Ingress-Ressourcen mit der Cluster-IP-Adresse des CPX-Dienstes aktualisiert.
Beispiel-Ingress-Ausgabe nach einer Ingress-Statusaktualisierung
Im Folgenden sehen Sie eine Beispiel-Ingress-Ausgabe nach der Ingress-Statusaktualisierung:
$ kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
sample-ingress sample.citrix.com sample.abc.somexampledomain.com 80 1d