Ingress Controller de Citrix ADC

Cómo equilibrar la carga del tráfico de entrada a una aplicación basada en TCP o UDP

En un entorno de Kubernetes, un Ingress es un objeto que permite el acceso a los servicios de Kubernetes desde fuera del clúster de Kubernetes. Los recursos estándar de Kubernetes Ingress asumen que todo el tráfico se basa en HTTP y no atiende a protocolos no basados en HTTP, como TCP, TCP-SSL y UDP. Por lo tanto, no puede exponer aplicaciones críticas basadas en protocolos de capa 7, como DNS, FTP o LDAP, con el ingreso estándar de Kubernetes.

Citrix proporciona una solución que utiliza anotaciones de entrada para equilibrar la carga del tráfico de entrada basado en TCP o UDP. Cuando especifica estas anotaciones en la definición de recursos Ingress, el Citrix Ingress Controller configura Citrix ADC para equilibrar la carga del tráfico de entrada basado en TCP o UDP.

Puede usar las siguientes anotaciones en su definición de recursos de Kubernetes Ingress para equilibrar la carga del tráfico de Ingress basado en TCP o UDP:

  • ingress.citrix.com/insecure-service-type: La anotación habilita el equilibrio de carga L4 con TCP, UDP o ANY como protocolo para Citrix ADC.
  • ingress.citrix.com/insecure-port: La anotación configura el puerto TCP. La anotación es útil cuando se requiere acceso a microservicios en un puerto no estándar. De forma predeterminada, se configura el puerto 80.

Para obtener más información sobre las anotaciones, consulte la página de anotaciones.

También puede usar la solución estándar de Kubernetes para crear un service de type LoadBalancer con Citrix ADC. Puede obtener más información sobre el tipo de servicio LoadBalancer en Citrix ADC.

Ejemplo: definición de entrada para entrada basada en 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-->

Ejemplo: definición de entrada para entrada basada en UDP. A continuación se muestra un ejemplo de Citrix Ingress Controller versión 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-->

A continuación se muestra una definición de servicio de ejemplo en la que el nombre del puerto de servicio se define como 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-->

Ejemplo: definición de entrada para entrada basada en UDP. A continuación, se muestra un ejemplo de Citrix Ingress Controller versión 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-->

Equilibrio de carga del tráfico de entrada basado en TCP sobre SSL

El Citrix Ingress Controller proporciona una 'ingress.citrix.com/secure-service-type: ssl_tcp anotación que puede usar para equilibrar la carga del tráfico de entrada en función de TCP sobre SSL.

Ejemplo: definición de entrada para entrada basada en TCP sobre 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-->

Supervise y mejore el rendimiento de sus aplicaciones basadas en TCP o UDP

Los desarrolladores de aplicaciones pueden supervisar de cerca el estado de las aplicaciones basadas en TCP o UDP a través de monitores enriquecidos (como TCP-ECV, UDP-ECV) en Citrix ADC. La ECV (validación de contenido extendida) supervisa la ayuda para verificar si la aplicación devuelve el contenido esperado o no.

Además, el rendimiento de la aplicación se puede mejorar mediante el uso de métodos de persistencia como Source IP. Puede usar estas funciones de Citrix ADC a través de anotaciones inteligentes en Kubernetes. A continuación se muestra un ejemplo de ello:

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

Para obtener más información sobre las diferentes opciones de implementación compatibles con el Citrix Ingress Controller, consulte Topologías de implementación.

Para obtener más información sobre la implementación del Citrix Ingress Controller:

Cómo equilibrar la carga del tráfico de entrada a una aplicación basada en TCP o UDP