Unterstützung von Ingress-Klassen

Last published : Oct 02, 2026

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-classes anzugeben:
    • 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.ingressClassName nicht festgelegt ist.
      • Gleicht jedes Ingress ab, wenn das Feld spec.ingressClassName des Ingress-Objekts festgelegt ist und eine v1.IngressClass-Ressource mit demselben Namen existiert und das Feld spec.controller der Ressource citrix.com/ingress-controller ist.
  • Wenn der NetScaler Ingress Controller mit einer oder mehreren Ingress-Klassen gestartet wird, die mit dem Argument --ingress-classes festgelegt 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.class mit 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.class mit den konfigurierten Ingress-Klassen übereinstimmt. Diese Annotation ist veraltet, hat aber eine höhere Priorität als das Feld spec.IngressClassName, um die Abwärtskompatibilität zu unterstützen.
      • Entspricht jedem Ingress-Objekt, wenn eine v1.IngressClass Ressource mit den folgenden Attributen existiert:
        • Der Name der Ressource stimmt mit dem Argumentwert --ingress-classes überein.
        • Das Feld spec.controller der Ressource ist als citrix.com/ingress-controller festgelegt.
        • Der Name der Ressource stimmt mit dem Feld spec.ingressClassName des Ingress-Objekts überein.
      • Entspricht jedem Ingress-Objekt, bei dem das Feld spec.ingressClassName nicht gesetzt ist und wenn eine v1.IngressClass Ressource mit den folgenden Attributen existiert:
        • Der Name der Ressourcen stimmt mit dem Argumentwert --ingress-classes überein.
        • Das Feld spec.controller der Ressource ist als citrix.com/ingress-controller festgelegt.
        • Die Ressource ist als Standardklasse unter Verwendung der Annotation ingressclass.kubernetes.io/is-default-class konfiguriert. Weitere Informationen finden Sie in der Kubernetes-Dokumentation.
Hinweis:
  • Wenn sowohl die Annotation als auch spec.ingressClassName definiert sind, wird die Annotation vor spec.ingressClassName abgeglichen. Wenn die Annotation nicht übereinstimmt, wird der Abgleichvorgang für das Feld spec.ingressClassName nicht durchgeführt.
  • Wenn Sie Helm-Charts zur Installation des NetScaler Ingress Controller verwenden und die IngressClass Ressource unterstützt wird und der NetScaler Ingress Controller mit dem Argument --ingress-classes bereitgestellt wird, wird die v1.IngressClass Ressource 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 LoadBalancer für den Tier-1 NetScaler VPX Ingress verfügbar gemacht wird, wird das Feld Address (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 ClusterIP oder NodePort verfügbar gemacht wird, wird das Feld Address (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