Ingress Controller de Citrix ADC

Anotaciones

Anotaciones de entrada

A continuación, se muestran las anotaciones de entrada admitidas por Citrix:

Anotaciones Valor posible Descripción Valor predeterminado
ingress.citrix.com/frontend-ip Dirección IP Use esta anotación para personalizar la dirección IP virtual (VIP). Esta dirección IP se configura en Citrix ADC como VIP. La anotación es obligatoria si utiliza Citrix ADC VPX o MPX. La dirección IP de Citrix ADC se usa como VIP.
    Nota: No utilice la anotación si quiere usar la dirección IP de Citrix ADC como VIP.  
ingress.citrix.com/frontend-ipset-name Nombre del IPSET Utilice esta anotación para especificar el nombre de IPSET para la configuración de front-end. El IPSET está vinculado al servidor virtual de conmutación de contenido. Use esta anotación con ingress.citrix.com/frontend-ip. NA
    Nota: El nombre IPSET que especifique en la anotación ya debe estar configurado en Citrix ADC.  
ingress.citrix.com/secure-port Número de puerto Use esta anotación para configurar el puerto para el tráfico HTTPS. Este puerto se configura en Citrix ADC como un valor de puerto para el servidor virtual de CS correspondiente. 443
ingress.citrix.com/insecure-port Número de puerto Use esta anotación para configurar el puerto para el tráfico HTTP, TCP o UDP. Este puerto se configura en Citrix ADC como un valor de puerto para el servidor virtual de CS correspondiente. 80
ingress.citrix.com/insecure-termination allow, redirect, o disallow Use allow para permitir el tráfico HTTP, use redirect para redirigir la solicitud HTTP a HTTPS o use disallow si quiere eliminar el tráfico HTTP. disallow
    Por ejemplo: ingress.citrix.com/insecure-termination: "redirect"  
ingress.citrix.com/secure-backend En formato JSON, lista de servicios para backend seguro Use True, si quiere establecer HTTPS seguro entre Citrix ADC y la aplicación, Use False, si quiere establecer una conexión HTTP insegura de Citrix ADC a la aplicación. False
    Por ejemplo: ingress.citrix.com/secure-backend: {"app1":"True", "app2":"False", "app3":"True"}  
kubernetes.io/ingress.class nombre de clase de entrada Es una forma de asociar un recurso de entrada en particular con un controlador de entrada. Configura todos los ingresos
    Por ejemplo: kubernetes.io/ingress.class:"Citrix"  
ingress.citrix.com/secure-service-type ssl o ssl_tcp La anotación permite el equilibrio de carga L4 con SSL sobre TCP como protocolo. Use ssl_tcp, si quiere usar SSL sobre TCP. ssl
ingress.citrix.com/insecure-service-type http, tcpudp, sip_udp, o any La anotación permite el equilibrio de carga L4 con tcp/udp/sip_udp any como protocolo. Use tcp, si quiere que TCP sea el protocolo. Use udp, si quiere que UDP sea el protocolo. http
ingress.citrix.com/path-match-method prefix o exact Use esta anotación para la coincidencia de rutas de entrada. Use prefix para que el controlador de entrada de Citrix considere cualquier cadena de ruta como expresión de prefijo. exact Utilícelo para que el Citrix Ingress Controller considere la ruta como una coincidencia exacta. prefix
    Por ejemplo, la anotación ingress.citrix.com/path-match-method: "prefix" define el Citrix Ingress Controller para considerar cualquier cadena de ruta como expresión de prefijo.  
ingress.citrix.com/deployment dsr Utilice esta anotación para crear la configuración de devolución directa del servidor (DSR) en Citrix ADC.  
    Por ejemplo, la ingress.citrix.com/deployment: "dsr" anotación crea una configuración de DSR en el Citrix ADC.  
ingress.citrix.com/preconfigured-certkey Claves y tipos de certificado preconfigurados. El tipo de certificado puede ser el predeterminado, el SNI o la CA. Utilice esta anotación para especificar la clave o las claves de certificado preconfiguradas en el Citrix ADC que desea reutilizar y vincular a las aplicaciones. Si el parámetro de tipo no se proporciona con el nombre de un certificado, el certificado se considera el tipo predeterminado (no SNI).
    Por ejemplo, en la ingress.citrix.com/preconfigured-certkey : '{"certs": [ {"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"} ] } anotación, certkey1 se usa como certificado no SNI y certkey2 como certificado SNI.  

Anotaciones inteligentes para Ingress

La anotación inteligente es una opción proporcionada por el Citrix Ingress Controller para habilitar de manera eficiente las funciones de Citrix ADC mediante el nombre de entidad de Citrix ADC. El Citrix Ingress Controller convierte el ingreso en Kubernetes en un conjunto de objetos Citrix ADC. Puede controlar estos objetos de manera eficiente mediante anotaciones inteligentes.

Nota: Para utilizar anotaciones inteligentes, debe tener un buen conocimiento de las funciones de Citrix ADC y sus respectivos nombres de entidad. Para obtener más información sobre las funciones y los nombres de entidades de Citrix ADC, consulte la documentación de Citrix ADC.

La anotación inteligente toma el formato JSON como entrada. La clave y el valor que pase en el formato JSON deben coincidir con el formato Citrix ADC NITRO. Para obtener más información sobre la API de Citrix ADC NITRO, consulte API de REST de Citrix ADC 12.1 - Documentación de NITRO.

Por ejemplo, si quiere habilitar el método basado en lb SRCIPDESTIPHASH, debe usar el formato de clave y valor NITRO correspondientes lbmethod, SRCIPDESTIPHASH respectivamente.

En la siguiente tabla se detallan las anotaciones inteligentes proporcionadas por el Citrix Ingress Controller:

Nombre de entidad Citrix ADC Anotación inteligente Ejemplo
lbvserver ingress.citrix.com/lbvserver ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
servicegroup ingress.citrix.com/servicegroup ingress.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}'
monitor ingress.citrix.com/monitor ingress.citrix.com/monitor: '{"appname":{"type":"http"}}'
csvserver ingress.citrix.com/csvserver ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}'

Para obtener información sobre las anotaciones inteligentes para los perfiles HTTP, TCP y SSL, consulte Configurar perfiles HTTP, TCP o SSL en Citrix ADC.

YAML de entrada de muestra con anotaciones inteligentes

A continuación se muestra un ejemplo de YAML de entrada. Incluye anotaciones inteligentes para habilitar las funciones de Citrix ADC mediante entidades como lbvserver, servicegroup y monitor:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: 192.168.1.1
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
    ingress.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}'
    ingress.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}'
  name: citrix
spec:
  rules:
  - host: citrix.org
    http:
      paths:
      - backend:
          service:
            name: citrix-svc
            port:
              number: 80
        path: /
        pathType: Prefix
<!--NeedCopy-->

El YAML de entrada de ejemplo incluye casos de uso relacionados con el servicio y citrix-svc, en la siguiente tabla, se explican las anotaciones inteligentes utilizadas en el ejemplo:

Anotación inteligente Descripción
ingress.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' Establece el método de equilibrio de carga como Conexión mínima y también configura la persistencia de la dirección IP de origen.
ingress.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}' Habilita el uso del modo IP de origen (USIP) en el dispositivo Citrix ADC de entrada. Cuando habilita USIP en Citrix ADC, utiliza la dirección IP del cliente para comunicarse con los pods de back-end.
ingress.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}' Crea un monitor HTTP personalizado para el grupo de servicios.

Nota:

Cuando varias entradas comparten la misma dirección IP y puerto front-end, no se pueden proporcionar configuraciones conflictivas a través de varias configuraciones de entrada.

De forma predeterminada, el servidor virtual de conmutación de contenido no depende del estado de los servidores virtuales de equilibrio de carga de destino enlazados a él. La anotación ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}' establece que el servidor virtual de conmutación de contenido considere su estado en función del estado del servidor virtual de equilibrio de carga vinculado a él a través de las directivas de conmutación de contenido.

Anotaciones inteligentes para rutas

Al igual que en Ingress, también puede usar anotaciones inteligentes con rutas de OpenShift. El Citrix Ingress Controller convierte las rutas de OpenShift en un conjunto de objetos Citrix ADC.

En la siguiente tabla se detallan las anotaciones inteligentes proporcionadas por el Citrix Ingress Controller:

Nombre de entidad Citrix ADC Anotación inteligente Ejemplo
lbvserver route.citrix.com/lbvserver route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
servicegroup route.citrix.com/servicegroup route.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}'
monitor route.citrix.com/monitor route.citrix.com/monitor: '{"appname":{"type":"http"}}'

Manifiesto de ruta de muestra con anotaciones inteligentes

A continuación se muestra un archivo YAML de ruta de ejemplo.

apiVersion: route.openshift.io/v1
kind: Route
metadata:
  name: citrix
  annotations:
    route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
    route.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}'
    route.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}'
spec:
  host:  citrix.org
  port:
    targetPort: 80
  to:
    kind: Service
    name: citrix-svc
    weight: 100
  wildcardPolicy: None
<!--NeedCopy-->

El manifiesto de ruta de ejemplo incluye casos de uso relacionados con el servicio citrix-svc y la siguiente tabla explica las anotaciones inteligentes utilizadas en la ruta de muestra:

Anotación inteligente Descripción
route.citrix.com/lbvserver: '{"citrix-svc":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' Establece el método de equilibrio de carga como Conexión mínima y también configura la persistencia de la dirección IP de origen.
route.citrix.com/servicegroup: '{"citrix-svc":{"usip":"yes"}}' Habilita el uso del modo IP de origen (USIP) en el dispositivo Citrix ADC. Cuando habilita USIP en Citrix ADC, utiliza la dirección IP del cliente para comunicarse con los pods de back-end.
route.citrix.com/monitor: '{"citrix-svc":{"type":"http"}}' Crea un monitor HTTP personalizado para el grupo de servicios.

Anotaciones de servicio

A continuación, se muestran las anotaciones de servicio compatibles con Citrix.

Nota: En las anotaciones de servicio, index es el índice ordenado de los puertos en un archivo de especificación de servicio. Por ejemplo, si hay dos puertos en la especificación del servicio, el índice del primer puerto es cero y el segundo es uno.

Anotaciones Descripción Ejemplo
service.citrix.com/service-type-<index> Use esta anotación para especificar el tipo de servicio para las entidades Citrix ADC creadas. Los valores aceptables son TCP, HTTP, SSL,UDP,ANY, SSL_TCP y SIP_UDP. service.citrix.com/service-type-0: ‘SSL’
service.citrix.com/ssl-certificate-data-<index> Use esta anotación para especificar el valor del certificado del servidor en formato PEM. service.citrix.com/ssl-certificate-data-0: | <certificate>
service.citrix.com/ssl-key-data-<index> Use esta anotación para especificar el valor de la clave del servidor en formato PEM. service.citrix.com/ssl-key-data-0: | <key>
service.citrix.com/ssl-ca-certificate-data-<index> Use esta anotación para especificar el valor del certificado de CA del servidor para verificar el certificado de cliente en formato PEM. service.citrix.com/ssl-ca-certificate-data-0: | <certificate>
service.citrix.com/ssl-backend-ca-certificate-data-<index> Use esta anotación para especificar el valor del certificado de CA para verificar el certificado de servidor del back-end en formato PEM. service.citrix.com/ssl-backend-ca-certificate-data-0: | <certificate>
service.citrix.com/ssl-termination-<index> Use esta anotación para especificar la terminación SSL. Los valores aceptados son EDGE y REENCRYPT. service.citrix.com/ssl-termination-0: ‘EDGE’
service.citrix.com/insecure-redirect Use esta anotación para redirigir el tráfico inseguro a un puerto seguro. Puede especificar el puerto seguro con {secure-portname : port-number} o {secure-portnumber-secure-port-protocol : insecure-portnumber} para redirigir el tráfico desde un puerto inseguro. service.citrix.com/insecure-redirect: ‘{“port-443”: 80 }’ or service.citrix.com/insecure-redirect: ‘{“443-tcp”: 80 }’
service.citrix.com/frontend-ip Use esta anotación para pasar el VIP para servicios de tipo LoadBalancer. service.citrix.com/frontend-ip: ‘192.168.1.1’
service.citrix.com/ipam-range Use esta anotación para seleccionar un intervalo de direcciones IP en particular de un conjunto de intervalos especificados para el controlador de Citrix IPAM. Esta anotación se usa para servicios de tipo LoadBalancer. service.citrix.com/ipam-range: ‘Dev’
service.citrix.com/secret Use esta anotación para especificar el nombre del recurso secreto para el certificado del servidor front-end. Para obtener más información y ejemplos, consulte Certificado SSL para servicios de tipo LoadBalancer. service.citrix.com/secret: ‘hotdrink-secret’
service.citrix.com/ca-secret Use esta anotación para proporcionar un certificado de CA para la autenticación de certificados de cliente. Este certificado está enlazado al servidor virtual SSL front-end en Citrix ADC. Para obtener más información y ejemplos, consulte Certificado SSL para servicios de tipo LoadBalancer. service.citrix.com/ca-secret: ‘hotdrink-ca-secret’
service.citrix.com/backend-secret Use esta anotación si la comunicación back-end entre Citrix ADC y su carga de trabajo se encuentra en un canal cifrado y necesita la autenticación del cliente en su carga de trabajo. Este certificado se envía al servidor durante el protocolo de enlace SSL y está vinculado al grupo de servicios SSL back-end. Para obtener más información y ejemplos, consulte Certificado SSL para servicios de tipo LoadBalancer. service.citrix.com/backend-secret: ‘hotdrink-secret’
service.citrix.com/backend-ca-secret Use esta anotación para habilitar la autenticación del servidor, que autentica el certificado del servidor back-end. Esta configuración vincula el certificado de CA del servidor al servicio SSL en Citrix ADC. Para obtener más información y ejemplos, consulte Certificado SSL para servicios de tipo LoadBalancer. service.citrix.com/backend-ca-secret: ‘hotdrink-ca-secret’
service.citrix.com/preconfigured-certkey Use esta anotación para especificar el nombre de la clave de certificado preconfigurada en Citrix ADC que se utilizará como certificado de servidor front-end. service.citrix.com/preconfigured-certkey: ‘coffee-cert’
service.citrix.com/preconfigured-ca-certkey Use esta anotación para especificar el nombre de la clave de certificado preconfigurada en Citrix ADC que se utilizará como certificado de CA para la autenticación de certificados de cliente. Este certificado está enlazado al servidor virtual SSL front-end en Citrix ADC. service.citrix.com/preconfigured-backend-certkey: ‘coffee-cert’
service.citrix.com/preconfigured-backend-certkey Use esta anotación para especificar el nombre de la clave de certificado preconfigurada en Citrix ADC que se vinculará al grupo de servicios SSL back-end. Este certificado se envía al servidor durante el protocolo de enlace SSL para la autenticación del servidor. service.citrix.com/preconfigured-ca-certkey: ‘coffee-ca-cert’
service.citrix.com/preconfigured-backend-ca-certkey Use esta anotación para especificar el nombre de la clave de certificado de CA preconfigurada en Citrix ADC para enlazarse al grupo de servicios SSL back-end para la autenticación del servidor. service.citrix.com/preconfigured-backend-ca-certkey: ‘coffee-ca-cert’

Ejemplo de YAML con la anotación de servicio para redirigir el tráfico inseguro

En este ejemplo se muestra cómo redirigir el tráfico de los clientes que realizan solicitudes en un puerto inseguro 80 al puerto seguro 443.

La siguiente anotación se especifica en el archivo YAML del servicio para redirigir el tráfico:

service.citrix.com/insecure-redirect: '{"port-443": 80}'

A continuación se muestra una definición de servicio de ejemplo:


apiVersion: v1
kind: Service
metadata:
  name: frontend-service
  annotations:
    service.citrix.com/service-type-0: SSL
    service.citrix.com/frontend-ip: '192.2.170.26'
    service.citrix.com/secret: '{"port-443": "web-ingress-secret"}'
    service.citrix.com/ssl-termination-0: 'EDGE'
    service.citrix.com/insecure-redirect: '{"port-443": 80}'
spec:
  type: LoadBalancer
  selector:
    app: frontend
  ports:
  - port: 443
    targetPort: 80
    name: port-443

<!--NeedCopy-->

Anotaciones inteligentes para servicios

Las anotaciones inteligentes para los servicios se utilizan para configurar Citrix ADC con valores personalizados para los parámetros de configuración de Citrix ADC. Las anotaciones se utilizan para los servicios de tipo LoadBalancer y para los servicios de Citrix ADC CPX que se utilizan para el tráfico este-oeste.

Nota:

Si ha configurado un servicio con NodePort o ClusterIP para el tráfico Norte-Sur, Citrix ADC se configura mediante las anotaciones inteligentes de entrada aplicables en lugar de las anotaciones de servicio.

Las anotaciones inteligentes para los servicios toman el formato JSON como entrada. La clave y el valor que pase en el formato JSON deben coincidir con el formato Citrix ADC NITRO. Para obtener más información sobre la API de Citrix ADC NITRO, consulte API de REST de Citrix ADC 12.1 - Documentación de NITRO.

A continuación se muestra un ejemplo de anotación inteligente para los servicios:

service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'

Esta anotación establece el método de equilibrio de carga como SRCIPDESTIPHASH en el servidor virtual de equilibrio de carga para el puerto 80-tcp del servicio dado.

En la siguiente tabla se detallan las anotaciones inteligentes para los servicios:

Nombre de entidad Citrix ADC Anotación inteligente para servicio Ejemplo
lbvserver service.citrix.com/lbvserver service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
csvserver service.citrix.com/csvserver service.citrix.com/csvserver: '{"l2conn":"on"}'
servicegroup service.citrix.com/servicegroup service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}'
monitor service.citrix.com/monitor service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}'
analyticsprofile service.citrix.com/analyticsprofile service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}'

Puede usar las anotaciones inteligentes para los servicios de la siguiente manera:

  • Al proporcionar el port-protocol valor en la anotación: En la definición de servicio, si proporciona el port-protocol valor en la anotación, la anotación se restringe al puerto particular de ese servicio.
  • Al no proporcionar el port-protocol valor en la anotación: Si no proporciona el port-protocol valor en la anotación, la anotación se aplica a todos los puertos utilizados por el servicio.

YAML de entrada de muestra con anotaciones inteligentes para servicios

A continuación se muestra un ejemplo de implementación y definición de servicio para una aplicación básica basada en servidor web apache. Incluye anotaciones inteligentes para que los servicios habiliten las funciones de Citrix ADC mediante entidades como lbvserver, csvserver, servicegroup, monitor y analyticsprofile:

# If using this on GKE, eusure sure you have cluster-admin role for your account
#The sample is a basic apache web server as application for illustration
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: apache
  labels:
      name: apache
spec:
  selector:
    matchLabels:
      app: apache
  replicas: 8
  template:
    metadata:
      labels:
        app: apache
    spec:
      containers:
      - name: apache
        image: httpd:latest
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent

---
#Expose the apache web server as a service
apiVersion: v1
kind: Service
metadata:
  name: apache
  annotations:
    service.citrix.com/csvserver: '{"l2conn":"on"}'
    service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
    service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}'
    service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}'
    service.citrix.com/frontend-ip: '10.217.212.16'
    service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}'
    NETSCALER_VPORT: '80'
  labels:
    name: apache
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    name: apache
  ports:
  - name: http
    port: 80
    targetPort: http
  selector:
    app: apache
---
<!--NeedCopy-->

Ejemplos

YAML de entrada de ejemplo para compatibilidad con SIP_UDP en anotaciones de tipo de servicio inseguras

A continuación, se muestra un ejemplo de YAML de entrada que incluye la configuración para habilitar la compatibilidad con SIP a través de UDP mediante la anotación ingress.citrix.com/insecure-service-type.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: 1.1.1.1
    ingress.citrix.com/insecure-port: "5060"
    ingress.citrix.com/insecure-service-type: sip_udp
    ingress.citrix.com/lbvserver: '{"asterisk17":{"lbmethod":"CALLIDHASH","persistenceType":"CALLID"}}'
    kubernetes.io/ingress.class: cic-vpx
  name: sip-ingress
spec:
  defaultBackend:
    service:
      name: asterisk17
      port:
        number: 5060
<!--NeedCopy-->
Anotaciones