Contrôleur d'entrée Citrix ADC

Prise en charge du CRD d’écoute pour l’entrée via l’annotation

L’entrée est une ressource Kubernetes standard qui spécifie la capacité de routage HTTP vers les services Kubernetes principaux. Le Citrix ingress controller fournit diverses annotations pour affiner les paramètres d’entrée pour les configurations frontales et dorsales. Par exemple, à l’aide de l’annotationingress.citrix.com/frontend-ip , vous pouvez spécifier l’adresse IP du port d’écoute frontal configurée dans Citrix ADC par le Citrix ingress controller. De même, il existe d’autres annotations frontales pour affiner les paramètres HTTP et SSL. Lorsqu’il existe plusieurs ressources d’entrée et qu’elles partagent une adresse IP et un port frontaux, il est difficile de spécifier ces annotations dans chaque ressource d’entrée.

Il existe parfois une séparation des responsabilités entre les professionnels des opérations réseau (NetOps) et les développeurs. Les NetOps sont chargés de proposer des configurations frontales telles que l’adresse IP frontale, les certificats et les paramètres SSL. Les développeurs sont responsables du routage HTTP et des configurations back-end. Le Citrix ingress controller fournit déjà des CRD de routage de contenu tels que le CRD d’écoute pour les configurations frontales et HTTProute pour la logique de routage back-end. Désormais, le CRD du récepteur peut être appliqué aux ressources d’entrée à l’aide d’une annotation fournie par Citrix.

Grâce à cette fonctionnalité, vous pouvez utiliser le CRD d’écoute pour votre ressource d’entrée et séparer la création de la configuration frontale de la définition d’entrée. Par conséquent, NetOps peut définir séparément la ressource Listener pour configurer l’adresse IP frontale, les certificats et d’autres paramètres frontaux (TCP, HTTP et SSL). Toute modification de configuration peut être appliquée aux ressources de l’écouteur sans modifier chaque ressource d’entrée. Dans Citrix ADC, une ressource d’écoute correspond aux serveurs virtuels de commutation de contenu, aux serveurs virtuels SSL, aux clés de certification et aux profils HTTP, SSL et TCP frontaux.

Remarque :

Lorsque vous utilisez cette fonctionnalité, vous devez vous assurer que toutes les entrées avec la même adresse IP et le même port frontaux font référence à la même ressource de récepteur. Pour les entrées qui utilisent les mêmes combinaisons d’adresses IP et de ports frontaux, une entrée faisant référence à une ressource d’écouteur et une autre entrée faisant référence à l’annotation ingress.citrix.com/frontend-ip ne sont pas prises en charge.

Restrictions

Lorsque le récepteur est utilisé pour les configurations frontales, les annotations suivantes sont ignorées et cela peut ne pas avoir d’effet :

  • ingress.citrix.com/frontend-ip
  • Ingress.citrix.com/frontend-ipset-name
  • ingress.citrix.com/secure-port
  • ingress.citrix.com/insecure-port
  • ingress.citrix.com/insecure-termination
  • ingress.citrix.com/secure-service-type
  • ingress.citrix.com/insecure-service-type
  • ingress.citrix.com/csvserver
  • ingress.citrix.com/frontend-tcpprofile
  • ingress.citrix.com/frontend-sslprofile
  • ingress.citrix.com/frontend-httpprofile

Déploiement d’une ressource CRD d’écoute pour Ingress

À l’aide de l’annotation ingress.citrix.com/listener, vous pouvez spécifier le nom et l’espace de noms de la ressource Listener pour l’entrée sous la forme de namespace/name. L’espace de noms n’est pas requis si la ressource Listener se trouve dans le même espace de noms que celui d’Ingress.

Voici un exemple d’annotation :

ingress.citrix.com/listener: default/listener1

Ici, default est l’espace de noms de la ressource Listener et listener1 est le nom de la ressource Listener qui spécifie les paramètres frontaux.

Effectuez les étapes suivantes pour déployer une ressource de récepteur pour l’entrée :

  1. Créez une ressource d’écoute (listener.yaml) comme suit :

    apiVersion: citrix.com/v1
    kind: Listener
    metadata:
      name: my-listener
      namespace: default
    spec:
      ingressClass: citrix
      vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
      port: 443
      protocol: https
      redirectPort: 80
      secondaryVips:
      - "10.0.0.1"
      - "1.1.1.1"
      policies:
        httpprofile:
          config:
            websocket: "ENABLED"
        tcpprofile:
          config:
            sack: "ENABLED"
        sslprofile:
          config:
            ssl3: "ENABLED"
        sslciphers:
        - SECURE
        - MEDIUM
        analyticsprofile:
          config:
          - type: webinsight
            parameters:
              allhttpheaders: "ENABLED"
        csvserverConfig:
          rhistate: 'ACTIVE'
    

    Ici, la ressource Listener my-listener dans l’espace de noms par défaut spécifie la configuration frontale telle que VIP, VIP secondaires, profil HTTP, profil TCP, profil SSL et chiffrements SSL. Il crée un serveur virtuel de commutation de contenu dans Citrix ADC sur le port 443 pour le trafic HTTPS, et tout le trafic HTTP sur le port 80 est redirigé vers HTTPS.

    Remarque :

    Le champ vip de la ressource Listener n’est pas requis lorsque Citrix ADC CPX est utilisé comme périphérique d’entrée. Pour Citrix ADC VPX, VIP est la même que l’adresse IP de l’espace qui est automatiquement configurée par le Citrix ingress controller.

  2. Appliquez la ressource Listener.

    kubectl apply -f listener.yaml
    
  3. Créez une ressource d’entrée (ingress.yaml) en vous référant à la ressource Listener.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
      namespace: default
      annotations:
        ingress.citrix.com/listener: my-listener
        kubernetes.io/ingress.class: "citrix"
    spec:
      tls:
      - secretName: my-secret
        hosts:
        - example.com
      rules:
      - host: example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kuard
                port:
                  number: 80
    

    Ici, la ressource d’entrée my-ingress fait référence à la ressource Listener my-listener dans l’espace de noms par défaut pour les configurations frontales.

  4. Appliquez la ressource d’entrée.

    kubectl apply -f ingress.yaml
    

Gestion des certificats

Vous pouvez spécifier les certificats pour les ressources d’entrée de deux manières. Vous pouvez spécifier les certificats dans le cadre de la ressource Entrée ou fournir les certificats dans le cadre de la ressource Listener.

Gestion des certificats via la ressource Ingress

Dans cette approche, tous les certificats sont spécifiés comme faisant partie de la ressource d’entrée régulière comme suit. La ressource d’écoute ne spécifie pas de certificats. Dans ce mode, vous devez spécifier des certificats dans le cadre de la ressource Entrée.

  apiVersion: networking.k8s.io/v1
  kind: Ingress
  metadata:
    name: my-ingress
    namespace: default
    annotations:
      ingress.citrix.com/listener: my-listener
      kubernetes.io/ingress.class: "citrix"
  spec:
    tls:
    - secretName: my-secret
      hosts:
      - example.com
    rules:
    - host: example.com
      http:
        paths:
        - path: /
          pathType: Prefix
          backend:
            service:
              name: kuard
              port:
                number: 80

Gestion des certificats via la ressource Listener

Dans cette approche, les certificats sont fournis dans le cadre de la ressource Listener. Il n’est pas nécessaire de spécifier des certificats dans le cadre de la ressource Entrée.

L’exemple de ressource Listener suivant montre les certificats.

apiVersion: citrix.com/v1
kind: Listener
metadata:
  name: my-listener
  namespace: default
spec:
  ingressClass: citrix
  certificates:
  - secret:
      name: my-secret
    # Secret named 'my-secret' in current namespace bound as default certificate
    default: true
  - secret:
      # Secret 'other-secret' in demo namespace bound as SNI certificate
      name: other-secret
      namespace: demo
  vip: '192.168.0.1' # Virtual IP address to be used, not required when CPX is used as ingress device
  port: 443
  protocol: https
  redirectPort: 80

Dans la ressource Entrée, les secrets ne sont pas spécifiés comme illustré dans l’exemple suivant.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  namespace: default
  annotations:
    ingress.citrix.com/listener: my-listener
    kubernetes.io/ingress.class: "citrix"
spec:
  tls:
  # TLS field is empty as the certs are specified in Listener
  rules:
  - host: example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kuard
            port:
              number: 80
Prise en charge du CRD d’écoute pour l’entrée via l’annotation