Contrôleur d'entrée Citrix ADC

Comment équilibrer la charge du trafic entrant vers une application basée sur TCP ou UDP

Dans un environnement Kubernetes, une entrée est un objet qui permet d’accéder aux services Kubernetes depuis l’extérieur du cluster Kubernetes. Les ressources Kubernetes Ingress standard supposent que tout le trafic est basé sur HTTP et ne répondent pas à des protocoles non HTTP tels que TCP, TCP-SSL et UDP. Par conséquent, vous ne pouvez pas exposer des applications critiques basées sur des protocoles de couche 7 tels que DNS, FTP ou LDAP à l’aide de la norme Kubernetes Ingress.

Citrix fournit une solution utilisant des annotations d’entrée pour équilibrer la charge du trafic entrant basé sur TCP ou UDP. Lorsque vous spécifiez ces annotations dans la définition de la ressource Ingress, le Citrix ingress controller configure Citrix ADC pour équilibrer la charge du trafic entrant basé sur TCP ou UDP.

Vous pouvez utiliser les annotations suivantes dans votre définition de ressource Kubernetes Ingress pour équilibrer la charge du trafic entrant basé sur TCP ou UDP :

  • ingress.citrix.com/insecure-service-type: l’annotation active l’équilibrage de charge L4 avec TCP, UDP ou ANY en tant que protocole pour Citrix ADC.
  • ingress.citrix.com/insecure-port: l’annotation configure le port TCP. L’annotation est utile lorsque l’accès au microservice est requis sur un port non standard. Par défaut, le port 80 est configuré.

Pour plus d’informations sur les annotations, consultez la page des annotations .

Vous pouvez également utiliser la solution Kubernetes standard de création d’un service de type LoadBalancer avec Citrix ADC. Vous pouvez en savoir plus sur l’ équilibreur de charge du type de service dans Citrix ADC.

Exemple : définition d’entrée pour l’entrée basée sur TCP.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/insecure-port: "6379"
    ingress.citrix.com/insecure-service-type: "tcp"
    kubernetes.io/ingress.class: "guestbook"
  name: redis-master-ingress
spec:
  defaultBackend:
    service:
      name: redis-master-pods
      port:
        number: 6379
<!--NeedCopy-->

Exemple : définition d’entrée pour l’entrée basée sur UDP. Voici un exemple de Citrix ingress controller version 1.1.1 :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/insecure-port: "5084"
    ingress.citrix.com/insecure-service-type: "udp"
  name: udp-ingress
spec:
  defaultBackend:
    service:
      name: frontend
      port:
        name: udp-53  # Service port name defined in the service defination
<!--NeedCopy-->

Voici un exemple de définition de service dans lequel le nom du port de service est défini comme suit udp-53 :

apiVersion: v1
kind: Service
metadata:
  name: bind
  labels:
    app: bind
spec:
  ports:
  - name: udp-53
    port: 53
    targetPort: 53
    protocol: UDP
  selector:
    name: bind
<!--NeedCopy-->

Exemple : définition d’entrée pour l’entrée basée sur UDP. Voici un exemple pour le Citrix ingress controller version 1.5.25 :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/insecure-port: "5084"
    ingress.citrix.com/insecure-service-type: "udp"
  name: udp-ingress
spec:
  defaultBackend:
    service:
      name: frontend
      port:
        number: 53
<!--NeedCopy-->

Trafic d’entrée d’équilibrage de charge basé sur TCP sur SSL

Le Citrix ingress controller fournit une 'ingress.citrix.com/secure-service-type: ssl_tcp annotation que vous pouvez utiliser pour équilibrer la charge du trafic entrant basé sur TCP sur SSL.

Exemple : définition d’entrée pour l’entrée basée sur TCP sur SSL.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/secure-service-type: "ssl_tcp"
    ingress.citrix.com/secure_backend: '{"frontendcolddrinks":"True"}'
    kubernetes.io/ingress.class: "colddrink"
  name: colddrinks-ingress
spec:
  defaultBackend:
    service:
      name: frontend-colddrinks
      port:
        number: 443
  tls:
  - secretName: "colddrink-secret"
<!--NeedCopy-->

Surveillez et améliorez les performances de vos applications basées sur TCP ou UDP

Les développeurs d’applications peuvent surveiller de près la santé des applications basées sur TCP ou UDP grâce à des moniteurs riches (tels que TCP-ECV, UDP-ECV) dans Citrix ADC. L’ECV (Extended Content Validation) surveille l’aide pour vérifier si l’ application renvoie le contenu attendu ou non.

En outre, les performances de l’application peuvent être améliorées en utilisant des méthodes de persistance telles que Source IP. Vous pouvez utiliser ces fonctionnalités Citrix ADC via Smart Annotations dans Kubernetes. Voici un exemple de ce type :

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/csvserver: '{"l2conn":"on"}'
    ingress.citrix.com/frontend-ip: "192.168.1.1"
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"mongodb-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
    ingress.citrix.com/monitor: '{"mongodbsvc":{"type":"tcp-ecv"}}'
  name: mongodb
spec:
  rules:
  - host: mongodb.beverages.com
    http:
      paths:
      - backend:
          service:
            name: mongodb-svc
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

Pour plus d’informations sur les différentes options de déploiement prises en charge par le Citrix ingress controller, consultez Topologies de déploiement.

Pour plus d’informations sur le déploiement du Citrix ingress controller :

Comment équilibrer la charge du trafic entrant vers une application basée sur TCP ou UDP