Contrôleur d'entrée Citrix ADC

Prise en charge de classe Ingress

Qu’est-ce que la classe Ingress ?

Dans un cluster Kubernetes, il peut y avoir plusieurs contrôleurs d’entrée et vous devez disposer d’un moyen d’associer une ressource d’entrée particulière à un contrôleur d’entrée.

Vous pouvez spécifier le contrôleur d’entrée qui doit gérer la ressource d’entrée en utilisant l’annotation kubernetes.io/ingress.class dans votre définition de ressource d’entrée.

Citrix ingress controller et classes Ingress

Le Citrix ingress controller prend en charge l’acceptation de plusieurs ressources d’entrée, qui ont des kuberneters.io/ingress.class annotations. Chaque ressource d’entrée ne peut être associée qu’à une seule ingress.class. Toutefois, le Ingress Controller peut avoir besoin de gérer diverses ressources d’entrée provenant de différentes classes.

Vous pouvez associer le Ingress Controller à plusieurs classes d’entrée à l’aide de l’argument --ingress-classes situé sous la section spec du fichier YAML.

Si ingress-classes n’est pas spécifié pour le Ingress Controller, il accepte toutes les ressources d’entrée, quelle que soit la présence de l’annotation kubernetes.io/ingress.class dans l’objet d’entrée.

Si ingress-classes est spécifié, le Ingress Controller accepte uniquement les ressources d’entrée qui correspondent à l’annotation kubernetes.io/ingress.class. Dans ce cas, le contrôleur d’entrée ne traite pas une ressource d’entrée sans l’annotation ingress.class.

Remarque : Les noms de classe d’entrée ne sont pas sensibles à la casse.

Exemples de configurations YAML avec les classes Ingress

Voici l’extrait d’un exemple de fichier YAML à ingress-classes associer au Ingress Controller. Cette configuration fonctionne dans les deux cas où le Ingress Controller s’exécute en tant qu’espace autonome ou en tant que side-car avec Citrix ADC CPX. Dans l’extrait de code YAML donné, les classes d’entrée suivantes sont associées au Ingress Controller.

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

Voici l’extrait d’un fichier YAML d’entrée dans lequel l’association de classe Ingress est représentée. Dans l’exemple donné, une ressource Ingress nommée web-ingress est associée à la classe d’entrée my-custom-class. Si le Citrix ingress controller est configuré pour accepter my-custom-class, il traite cette ressource d’entrée.

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

Prise en charge d’Ingress V1 et IngressClass

Avec la version 1.19 de Kubernetes, la ressource Ingress est généralement disponible. Dans le cadre de cette modification, une nouvelle ressource nommée as IngressClass est ajoutée à l’API d’entrée. À l’aide de cette ressource, vous pouvez associer des contrôleurs d’entrée spécifiques à des entrées. Pour plus d’informations sur IngressClass cette ressource, consultez la documentation Kubernetes.

Voici un exemple de IngressClass ressource.


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

<!--NeedCopy-->

Une IngressClassressource doit faire référence à la classe d’entrée associée au contrôleur qui doit implémenter les règles d’entrée comme indiqué ci-dessous :

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

Le Citrix ingress controller utilise les règles suivantes pour faire correspondre les entrées.

  • Si le Citrix ingress controller est démarré sans spécifier d’argument --ingress-classes:

    • Si la version de Kubernetes est inférieure à 1,19 (la ressource IngressClass V1 est prise en charge)

      • Correspond à tous les objets d’entrée
    • Si la version de Kubernetes est supérieure ou égale à 1,19 (la ressource IngressClass V1 est prise en charge)

      • Correspond à tout objet d’entrée dans lequel le champ spec.ingressClassName n’est pas défini.

      • Correspond à toute entrée si le champ spec.ingressClassName de l’objet Ingress est défini et qu’il existe une ressource v1.IngressClass portant le même nom et que le champ spec.controller de la ressource est citrix.com/ingress-controller.

  • Si le Citrix ingress controller est démarré avec une ou plusieurs classes d’entrée définies à l’aide de l’argument --ingress-classes.

    • Si la version de Kubernetes est inférieure à 1,19 (la ressource IngressClass V1 est prise en charge)

      • Correspond à toute entrée avec l’annotation de classe d’entrée kubernetes.io/ingress.class correspondant à celle des classes d’entrée configurées.
    • Si la version de Kubernetes est supérieure ou égale à 1,19 (la ressource IngressClass V1 est prise en charge).

      • Correspond à toute entrée dans laquelle l’annotation de classe d’entrée kubernetes.io/ingress.class correspond aux classes d’entrée configurées. Cette annotation est obsolète, mais elle a une priorité plus élevée sur le champ spec.IngressClassName pour prendre en charge la compatibilité ascendante.

      • Correspond à n’importe quel objet d’entrée, s’il existe une ressource v1.IngressClass avec les attributs suivants :

        • Le nom de la ressource correspond à la valeur de l’argument --ingress-classes.

        • Le champ spec.controller de la ressource est défini en tant que citrix.com/ingress-controller.

        • Le nom de la ressource correspond au champ spec.ingressClassName de l’objet Ingress.

      • Correspond à tout objet d’entrée pour lequel le champ spec.ingressClassName n’est pas défini et si une ressource v1.IngressClass existe avec les attributs suivants :

        • Le nom des ressources correspond à la valeur de l’argument --ingress-classes.

        • Le champ spec.controller de la ressource est défini sur citrix.com/ingress-controller.

        • La ressource est configurée en tant que classe par défaut à l’aide de l’annotation ingressclass.kubernetes.io/is-default-class. Pour plus d’informations, consultez la documentation Kubernetes.

Remarque :

  • Si l’annotation et spec.ingressClassName est définie, l’annotation est mise en correspondance avant le spec.ingressClassName. Si l’annotation ne correspond pas, l’opération de mise en correspondance pour le champ spec.ingressClassName n’est pas effectuée.

  • Lorsque vous utilisez des graphiques Helm pour installer le Citrix ingress controller, si la ressource IngressClass est prise en charge et que le Citrix ingress controller est déployé avec l’argument --ingress-classes, la ressource v1.IngressClass est créée par défaut.

Mise à jour de l’état d’entrée pour les ressources d’entrée avec l’adresse IP spécifiée

Pour mettre à jour le champ Status.LoadBalancer.Ingress des ressources d’entrée gérées par le Citrix ingress controller avec les adresses IP allouées, spécifiez l’argument de ligne de commande --update-ingress-status yes lorsque vous démarrez le Citrix ingress controller. Cette fonctionnalité n’est prise en charge que pour le Citrix ingress controller déployé en tant qu’espace autonome pour la gestion de Citrix ADC VPX ou MPX. Pour les Citrix ADC CPX déployés en tant que side-cars, cette fonctionnalité n’est pas prise en charge.

Voici un exemple de YAML avec l’argument de ligne de commande --update-ingress-status yes activé.

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

Mise à jour du statut d’entrée pour les déploiements sidecar

Dans Kubernetes, Ingress peut être utilisé comme point d’entrée unique pour exposer plusieurs applications au monde extérieur. Le champ Ingress aurait un champ Address (Status.LoadBalancer.IP) qui est mis à jour après la création réussie de l’entrée. Ce champ est mis à jour avec une adresse IP publique ou un nom d’hôte via lequel l’application Kubernetes peut être atteinte. Dans les déploiements cloud, ce champ peut également être l’adresse IP ou le nom d’hôte d’un équilibreur de charge cloud.

Dans les déploiements cloud, Citrix ADC CPX ainsi que le contrôleur d’entrée sont exposés à l’aide d’un service type LoadBalancer qui crée à son tour un équilibreur de charge cloud. L’équilibreur de charge cloud expose ensuite le Citrix ADC CPX ainsi que le contrôleur d’entrée. Ainsi, les ressources Ingress exposées avec Citrix ADC CPX doivent être mises à jour à l’aide de l’adresse IP publique ou du nom d’hôte de l’équilibreur de charge cloud.

Cela s’applique même aux déploiements sur site. Dans les déploiements d’entrée à deux niveaux, dans lesquels Citrix ADC CPX est exposé en tant que type de service LoadBalancer à l’entrée Citrix ADC VPX de niveau 1, les ressources d’entrée exploitées par Citrix ADC CPX sont mises à jour avec l’adresse VIP.

Cette rubrique fournit des informations sur la façon d’activer la mise à jour de l’état d’entrée pour Citrix ADC CPX avec le Citrix ingress controller en tant que déploiements annexes.

Remarque : La mise à jour du statut d’entrée pour la fonction sidecar n’est prise en charge que sur les services de type LoadBalancer.

Exemple de sortie d’entrée après une mise à jour de l’état d’entrée

Voici un exemple de sortie d’entrée après la mise à jour de l’état d’entrée :

    $ kubectl get ingress

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

Activer la mise à jour du statut d’entrée pour les déploiements de side-car

Vous pouvez activer la fonctionnalité de mise à jour de l’état d’entrée pour les déploiements de side-car en spécifiant l’argument suivant dans le fichier YAML Citrix ADC CPX. Vous devez ajouter l’argument à la section args Citrix ADC CPX dans le fichier YAML de déploiement pour Citrix ADC CPX avec le Citrix ingress controller.

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

Le tableau suivant décrit en détail l’argument de la mise à jour d’entrée.

Mot-clé/variable Description
--cpx-service Spécifie l’argument pour activer cette fonctionnalité.
<namespace>/<name-of-the-type-load-balancer-service-exposing-cpx> Spécifie le format dans lequel la valeur de l’argument doit être fournie.
<namespace> Spécifie l’espace de noms dans lequel le service est créé.
<name-of-the-type-load-balancer-service-exposing-cpx> Spécifie le nom du service qui expose Citrix ADC CPX.

Remarque :

La mise à jour du statut d’entrée pour la fonction sidecar n’est prise en charge que sur les services de type LoadBalancer. Le service défini dans l’argument --cpx-service default/some-cpx-service doit être un service Kubernetes de type LoadBalancer.