Ingress Controller de Citrix ADC

Función de CRD de escucha para Ingress a través de anotaciones

Ingress es un recurso estándar de Kubernetes que especifica la capacidad de redirección HTTP para los servicios de Kubernetes de back-end. El controlador de Citrix Ingress proporciona varias anotaciones para ajustar los parámetros de entrada para las configuraciones front-end y back-end. Por ejemplo, al usar la anotación ingress.citrix.com/frontend-ip puede especificar la dirección IP del agente de escucha front-end configurada en Citrix ADC por el Citrix Ingress Controller. Del mismo modo, hay otras anotaciones front-end para ajustar los parámetros HTTP y SSL. Cuando hay varios recursos de Ingress y si comparten IP y puerto front-end, es difícil especificar estas anotaciones en cada recurso de Ingress.

A veces, existe una separación de responsabilidades entre los profesionales de operaciones de red (NetOps) y los desarrolladores. Los NetOps son responsables de crear configuraciones front-end como IP front-end, certificados y parámetros SSL. Los desarrolladores son responsables de la redirección HTTP y las configuraciones de back-end. Citrix Ingress Controller ya proporciona CRD de redirección de contenido, como CRD de escucha, para configuraciones front-end y HTTProute para lógica de redirección de back-end. Ahora, Listener CRD se puede aplicar a los recursos de Ingress mediante una anotación proporcionada por Citrix.

A través de esta función, puede usar el CRD de escucha para su recurso Ingress y separar la creación de la configuración front-end de la definición de Ingress. Por lo tanto, NetOps puede definir por separado el recurso de escucha para configurar la IP de front-end, los certificados y otros parámetros de front-end (TCP, HTTP y SSL). Cualquier cambio de configuración se puede aplicar a los recursos de escucha sin cambiar cada recurso de Ingress. En Citrix ADC, un recurso de escucha corresponde a servidores virtuales de conmutación de contenido, servidores virtuales SSL, certkeys y perfiles HTTP, SSL y TCP front-end.

Nota:

Al usar esta función, debe asegurarse de que todas las entradas con la misma IP y puerto front-end se refieran al mismo recurso de escucha. Para Ingresos que usan las mismas combinaciones de puertos e IP front-end, no se admite un Ingress que se refiere a un recurso de escucha y otro Ingress que hace referencia a la anotación ingress.citrix.com/frontend-ip.

Restricciones

Cuando se usa la escucha para las configuraciones de front-end, se ignoran las siguientes anotaciones y puede que no se produzca ningún efecto:

  • 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

Implementación de un recurso de CRD de escucha para Ingress

Con la anotación ingress.citrix.com/listener, puede especificar el nombre y el espacio de nombres del recurso de escucha para la entrada en forma de namespace/name. El espacio de nombres no es necesario si el recurso de escucha está en el mismo espacio de nombres que el de Ingress.

A continuación se presenta un ejemplo de la anotación:

ingress.citrix.com/listener: default/listener1

Aquí, default es el espacio de nombres del recurso de escucha y listener1 es el nombre del recurso de escucha que especifica los parámetros front-end.

Siga estos pasos para implementar un recurso de escucha para Ingress:

  1. Cree un recurso de escucha (listener.yaml) de la siguiente manera:

    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'
    

    En este caso, el recurso de escucha my-listener en el espacio de nombres predeterminado especifica la configuración de front-end, como VIP, VIP secundarios, perfil HTTP, perfil TCP, perfil SSL y cifrados SSL. Crea un servidor virtual de conmutación de contenido en Citrix ADC en el puerto 443 para el tráfico HTTPS, y todo el tráfico HTTP en el puerto 80 se redirige a HTTPS.

    Nota:

    El campo vip del recurso de escucha no es obligatorio cuando Citrix ADC CPX se usa como dispositivo de entrada. Para Citrix ADC VPX, VIP es igual a la dirección IP del pod, que el controlador de entrada de Citrix configura automáticamente.

  2. Aplique el recurso de escucha.

    kubectl apply -f listener.yaml
    
  3. Cree un recurso Ingress (ingress.yaml) consultando el recurso de escucha.

    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
    

    En este caso, el recurso de entrada my-ingress se refiere al recurso de escucha my-listener en el espacio de nombres predeterminado para las configuraciones front-end.

  4. Aplique el recurso de entrada.

    kubectl apply -f ingress.yaml
    

Administración de certificados

Hay dos maneras en las que puede especificar los certificados para los recursos de Ingress. Puede especificar los certificados como parte del recurso Ingress o proporcionar los certificados como parte del recurso de escucha.

Administración de certificados a través del recurso Ingress

En este enfoque, todos los certificados se especifican como parte del recurso de entrada regular de la siguiente manera. El recurso de escucha no especifica certificados. En este modo, debe especificar certificados como parte del recurso Ingress.

  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

Administración de certificados a través del recurso de escucha

En este enfoque, los certificados se proporcionan como parte del recurso de escucha. No tiene que especificar certificados como parte del recurso Ingress.

En el siguiente ejemplo de recurso de escucha se muestran los certificados.

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

En el recurso Ingress, los secretos no se especifican como se muestra en el siguiente ejemplo.

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
Función de CRD de escucha para Ingress a través de anotaciones