Citrix ADC Ingress Controller

Unterstützung für Ingress-Klassen

Was ist Ingress-Klasse?

In einem Kubernetes-Cluster gibt es möglicherweise mehrere Ingress-Controller, und Sie müssen eine Möglichkeit haben, eine bestimmte Eingangsressource einem Ingress-Controller zuzuordnen.

Sie können den Ingress-Controller angeben, der die Eingangsressource verarbeiten soll, indem Sie die kubernetes.io/ingress.class Anmerkung in der Definition Ihrer Eingangsressource verwenden.

Citrix Ingress Controller und Ingress-Klassen

Der Citrix Ingress Controller unterstützt das Akzeptieren mehrerer Ingress-Ressourcen mit kuberneters.io/ingress.class Anmerkungen. Jede Eingangsressource kann nur mit einer verknüpft werden ingress.class. Der Ingress Controller muss jedoch möglicherweise verschiedene Eingangsressourcen aus verschiedenen Klassen verarbeiten.

Sie können den Ingress Controller mit mehreren Ingress-Klassen verknüpfen, indem Sie das --ingress-classes Argument im spec Abschnitt der YAML-Datei verwenden.

Wenn für den Ingress Controller nicht angegeben ingress-classes ist, akzeptiert er alle eingehenden Ressourcen, unabhängig davon, ob die kubernetes.io/ingress.class Anmerkung im Eingangsobjekt vorhanden ist.

Wenn angegeben ingress-classes ist, akzeptiert der Ingress Controller nur die eingehenden Ressourcen, die der kubernetes.io/ingress.class Anmerkung entsprechen. Der Ingress-Controller verarbeitet in einem solchen Fall keine Ingress-Ressource ohne die ingress.class Anmerkung.

Hinweis: Bei Ingress-Klassennamen wird die Groß-/Kleinschreibung nicht beachtet

Beispiel für YAML-Konfigurationen mit Ingress-Klassen

Es folgt das Snippet aus einer YAML-Beispieldatei, die ingress-classes mit dem Ingress Controller verknüpft werden soll. Diese Konfiguration funktioniert in beiden Fällen, in denen der Ingress Controller als eigenständiger Pod oder als Beiwagen mit Citrix ADC CPX ausgeführt wird. In dem angegebenen YAML-Snippet sind die folgenden Eingangsklassen mit dem Ingress Controller verknüpft.

  • 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
<!--NeedCopy-->

Es folgt das Snippet aus einer Ingress-YAML-Datei, in der die Ingress-Klassenzuordnung abgebildet ist. Im angegebenen Beispiel web-ingress ist eine Ingress-Ressource mit dem Namen der Eingangsklasse verknüpft my-custom-class. Wenn der Citrix Ingress Controller für das Akzeptieren konfiguriert ist my-custom-class, verarbeitet er diese Ingress-Ressource.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: my-custom-class
  name: web-ingress
<!--NeedCopy-->

Unterstützung von Ingress V1 und IngressClass

Mit der Kubernetes-Version 1.19 ist die Ingress-Ressource allgemein verfügbar. Als Teil dieser Änderung IngressClass wird eine neue Ressource mit dem Namen as zur Ingress-API hinzugefügt. Mithilfe dieser Ressource können Sie bestimmte Ingress-Controller Ingress-Controller zuordnen. Weitere Informationen zur IngressClass Ressource finden Sie in der Kubernetes-Dokumentation.

Im Folgenden finden Sie eine IngressClass Beispielressource.


apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: citrix
spec:
  controller: citrix.com/ingress-controller

<!--NeedCopy-->

Eine IngressClassRessource muss sich auf die mit dem Controller verknüpfte Eingangsklasse beziehen, die die Ingress-Regeln wie folgt implementieren soll:

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
<!--NeedCopy-->

Der Citrix Ingress Controller verwendet die folgenden Regeln, um die Ingresses abzugleichen.

  • Wenn der Citrix Ingress Controller ohne Angabe des --ingress-classes Arguments gestartet wird:

    • Wenn die Kubernetes-Version kleiner als 1.19 ist (IngressClass V1-Ressource wird unterstützt)

      • Stimmt mit jedem eingehenden Objekt überein
    • Wenn die Kubernetes-Version größer oder gleich 1.19 ist (IngressClass V1-Ressource wird unterstützt)

      • Entspricht jedem Eingangsobjekt, in dem das spec.ingressClassName Feld nicht festgelegt ist.

      • Stimmt mit jedem Ingress überein, wenn das spec.ingressClassName Feld des Ingress-Objekts festgelegt ist und eine v1.IngressClass Ressource mit demselben Namen vorhanden ist und das spec.controller Feld der Ressource lautet citrix.com/ingress-controller.

  • Wenn der Citrix Ingress Controller mit einer oder mehreren Eingangsklassen gestartet wird, die mithilfe des --ingress-classes Arguments festgelegt wurden.

    • Wenn die Kubernetes-Version kleiner als 1.19 ist (IngressClass V1-Ressource wird unterstützt)

      • Entspricht jedem Ingress mit der Annotation der Eingangsklasse, die mit der der konfigurierten Eingangsklassen kubernetes.io/ingress.class übereinstimmt.
    • Wenn die Kubernetes-Version größer oder gleich 1.19 ist (IngressClass V1-Ressource wird unterstützt).

      • Entspricht jedem Ingress, in dem die Annotation der Eingangsklasse mit den konfigurierten Eingangsklassen kubernetes.io/ingress.class übereinstimmt. Diese Anmerkung ist veraltet, hat aber höhere Priorität vor dem spec.IngressClassName Feld, um die Abwärtskompatibilität zu unterstützen.

      • Stimmt mit einem beliebigen Eingangsobjekt überein, wenn eine v1.IngressClass Ressource mit den folgenden Attributen vorhanden ist:

        • Der Name der Ressource stimmt mit dem --ingress-classes Argumentwert überein.

        • Das spec.controller Feld der Ressource wird als festgelegt citrix.com/ingress-controller.

        • Der Name der Ressource stimmt mit dem spec.ingressClassName Feld des Ingress-Objekts überein.

      • Entspricht jedem Eingangsobjekt, bei dem das spec.ingressClassName Feld nicht festgelegt ist und wenn eine v1.IngressClass Ressource mit den folgenden Attributen vorhanden ist:

        • Der Name der Ressourcen stimmt mit dem --ingress-classes Argumentwert überein.

        • Das spec.controller Feld der Ressource ist als festgelegt citrix.com/ingress-controller.

        • Die Ressource wird mithilfe der ingressclass.kubernetes.io/is-default-class Annotation als Standardklasse konfiguriert. Weitere Informationen finden Sie in der Kubernetes-Dokumentation.

Hinweis:

  • Wenn sowohl die Anmerkung als auch definiert spec.ingressClassName ist, wird die Anmerkung vor dem abgeglichen spec.ingressClassName. Wenn die Anmerkung nicht übereinstimmt, wird der Abgleichsvorgang für das spec.ingressClassName Feld nicht ausgeführt.

  • Wenn Sie Helm-Diagramme verwenden, um den Citrix Ingress Controller zu installieren, wird die IngressClass Ressource standardmäßig erstellt, wenn die v1.IngressClass Ressource unterstützt wird und der Citrix Ingress Controller mit dem --ingress-classes Argument bereitgestellt wird.

Aktualisieren des Ingress-Status für die Ingress-Ressourcen mit der angegebenen IP-Adresse

Um das Status.LoadBalancer.Ingress Feld der vom Citrix Ingress Controller verwalteten Ingress-Ressourcen mit den zugewiesenen IP-Adressen zu aktualisieren, geben Sie --update-ingress-status yes beim Starten des Citrix Ingress Controller das Befehlszeilenargument an. Diese Funktion wird nur für den Citrix Ingress Controller unterstützt, der als eigenständiger Pod zur Verwaltung von Citrix ADC VPX oder MPX bereitgestellt wird. Für Citrix ADC CPXs, die als Seitenwagen bereitgestellt werden, wird diese Funktion nicht unterstützt.

Es folgt ein Beispiel für YAML mit aktiviertem --update-ingress-status yes Befehlszeilenargument.

args:
    - --feature-node-watch false
    - --ipam citrix-ipam-controller
    - --update-ingress-status yes
    imagePullPolicy: Always
<!--NeedCopy-->

Aktualisierung des Eingangsstatus für Sidecar-Bereitstellungen

In Kubernetes kann Ingress als ein einziger Einstiegspunkt verwendet werden, um mehrere Anwendungen der Außenwelt auszusetzen. 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 öffentlichen Hostnamen aktualisiert, über den die Kubernetes-Anwendung erreicht werden kann. In Cloud-Bereitstellungen kann dieses Feld auch die IP-Adresse oder der Hostname eines Cloud-Load-Balancers sein.

In Cloud-Bereitstellungen wird Citrix ADC CPX zusammen mit dem Ingress-Controller mithilfe eines Dienstes bereitgestellt, von type LoadBalancer dem wiederum ein Cloud-Load-Balancer erstellt wird. Der Cloud-Load Balancer macht dann den Citrix ADC CPX zusammen mit dem Ingress-Controller verfügbar. Daher sollten die mit dem Citrix ADC CPX bereitgestellten Ingress-Ressourcen mithilfe der öffentlichen IP-Adresse oder des Hostnamens des Cloud-Load Balancers aktualisiert werden.

Dies gilt auch für On-Prem-Bereitstellungen. In Dual-Tier-Ingress-Bereitstellungen, in denen der Citrix ADC CPX als Diensttyp LoadBalancer für den Citrix ADC VPX-Ingress der Stufe 1 bereitgestellt wird, werden die vom Citrix ADC CPX betriebenen Eingangsressourcen mit der VIP-Adresse aktualisiert.

Dieses Thema enthält Informationen zum Aktivieren der Aktualisierung des Eingangsstatus für Citrix ADC CPX mit dem Citrix Ingress Controller als Sidecar-Bereitstellungen.

Hinweis: Die Aktualisierung des Eingangsstatus für die Sidecar-Funktion wird nur für Dienste des Typs unterstützt LoadBalancer.

Beispiel für Ingress-Ausgabe nach einer Aktualisierung des Eingangsstatus

Im Folgenden finden Sie ein Beispiel für eine Eingangsausgabe nach der Aktualisierung des Eingangsstatus:

    $ kubectl get ingress

    NAME             HOSTS              ADDRESS                           PORTS    AGE                                       
    sample-ingress   sample.citrix.com   sample.abc.somexampledomain.com   80      1d

Ingress-Statusaktualisierung für Sidecar-Bereitstellungen aktivieren

Sie können die Funktion zur Aktualisierung des Eingangsstatus für Seitenwagenbereitstellungen aktivieren, indem Sie das folgende Argument in der Citrix ADC CPX-YAML-Datei angeben. Sie müssen das Argument dem args Abschnitt von Citrix ADC CPX in der Bereitstellungs-YAML-Datei für Citrix ADC CPX mit dem Citrix Ingress Controller hinzufügen.

    args:
    - --cpx-service <namespace>/<name-of-the-type-load-balancer-service-exposing-cpx>

In der folgenden Tabelle wird das Argument für die Ingress-Aktualisierung ausführlich beschrieben.

Schlüsselwort/Variable Beschreibung
--cpx-service Gibt das Argument für die Aktivierung dieser Funktion an.
<namespace>/<name-of-the-type-load-balancer-service-exposing-cpx> Gibt das Format an, in dem der Argumentwert bereitgestellt werden soll.
<namespace> Gibt den Namespace an, in dem der Dienst erstellt wird.
<name-of-the-type-load-balancer-service-exposing-cpx> Gibt den Namen des Dienstes an, der Citrix ADC CPX verfügbar macht.

Hinweis:

Die Aktualisierung des Eingangsstatus für die Sidecar-Funktion wird nur für Dienste des Typs unterstützt LoadBalancer. Der im Argument definierte Dienst --cpx-service default/some-cpx-service sollte ein Kubernetes-Dienst von sein type LoadBalancer.