Ingress Controller de Citrix ADC

Implementar el Citrix Ingress Controller como un complemento de enrutador OpenShift

En un clúster de OpenShift, los clientes externos necesitan una forma de acceder a los servicios proporcionados por los pods. OpenShift proporciona dos recursos para comunicarse con los servicios que se ejecutan en el clúster: rutas e ingreso.

En un clúster de OpenShift, una ruta expone un servicio en un nombre de dominio determinado o asocia un nombre de dominio a un servicio. Los enrutadores OpenShift redirigen las solicitudes externas a los servicios dentro del clúster OpenShift de acuerdo con las reglas especificadas en las rutas. Cuando utiliza el enrutador OpenShift, también debe configurar el DNS externo para asegurarse de que el tráfico llega al enrutador.

El Citrix Ingress Controller se puede implementar como un complemento de enrutador en el clúster de OpenShift para integrarse con los ADC de Citrix implementados en su entorno. El Citrix Ingress Controller le permite utilizar las capacidades avanzadas de equilibrio de carga y administración de tráfico de Citrix ADC con su clúster de OpenShift.

Las rutas de OpenShift pueden ser seguras o no seguras. Las rutas protegidas especifican la terminación TLS de la ruta.

El Citrix Ingress Controller admite las siguientes rutas de OpenShift:

  • Rutas no seguras: para rutas no seguras, el tráfico HTTP no se cifra.

  • Terminaciónde borde: para la terminación de borde, TLS termina en el enrutador. El tráfico desde el enrutador a los puntos finales a través de la red interna no está encriptado.

  • Terminaciónde acceso directo: Con la terminación de acceso directo, el enrutador no participa en la descarga de TLS y el tráfico cifrado se envía directamente al destino.

  • Terminación del nuevo cifrado: en la terminación del nuevo cifrado, el enrutador termina la conexión TLS pero luego establece otra conexión TLS con el punto final.

Para obtener información detallada sobre las rutas, consulte la documentación de OpenShift.

Puede implementar un dispositivo Citrix ADC MPX o VPX fuera del clúster de OpenShift o implementar Citrix ADC CPX como pods dentro del clúster. El Citrix Ingress Controller integra los ADC de Citrix con el clúster de OpenShift y configura automáticamente los ADC de Citrix en función de las reglas especificadas en las rutas.

Según cómo quiera usar Citrix ADC, hay dos formas de implementar Citrix Ingress Controller como un complemento de enrutador en el clúster de OpenShift:

  • Como contenedor sidecar junto con Citrix ADC CPX en el mismo pod: en este modo, el Citrix Ingress Controller configura Citrix ADC CPX.

  • Como pod independiente en el clúster de OpenShift: en este modo, puede controlar el dispositivo Citrix ADC MPX o VPX implementado fuera del clúster.

Para obtener información sobre la implementación del Citrix Ingress Controller para controlar el ingreso de OpenShift, consulte el Citrix Ingress Controller para Kubernetes.

Puede usar Citrix ADC para equilibrar la carga del plano de control de OpenShift (nodos maestros). Citrix proporciona una solución para automatizar la configuración de Citrix ADC mediante Terraform en lugar de configurar manualmente Citrix ADC. Para obtener más información, consulte Citrix ADC como equilibrador de carga para el plano de control de OpenShift.

Soporte de backend alternativo

El Citrix Ingress Controller ahora admite backends alternativos de OpenShift.

Citrix ADC se configura de acuerdo con los pesos proporcionados en la definición de rutas y el tráfico se distribuye entre los pods de servicio en función de esos pesos.

A continuación, se muestra un ejemplo de manifiesto de ruta con un backend alternativo:

 kind: Route
 apiVersion: route.openshift.io/v1
 metadata:
   name: r1
   labels:
     name: apache
   annotations:
     ingress.citrix.com/frontend-ip: "<Frontend-ip>"
 spec:
   host: some.alternate-backends.com
   to:
     kind: Service
     name: apache-1
     weight: 30
   alternateBackends:
     - kind: Service
       name: apache-2
       weight: 20
     - kind: Service
       name: apache-3
       weight: 50
   port:
     targetPort: 80
   wildcardPolicy: None
<!--NeedCopy-->

Para esta ruta, el 30 por ciento del tráfico se envía al servicio apache-1 y el 20 por ciento se envía al servicio apache2 y el 50 por ciento al servicio apache-3 según los pesos proporcionados en el manifiesto de la ruta

Componentes Citrix compatibles en OpenShift

Componentes de Citrix Versiones
Citrix Ingress Controller Último
Citrix ADC VPX 12.1 50.x y posteriores
Citrix ADC CPX 13.0–36.28

Nota:

Las CRD proporcionadas para el Citrix Ingress Controller no son compatibles con las rutas de OpenShift. Puede usar la entrada de OpenShift para usar CRD.

Implementar Citrix ADC CPX como enrutador dentro del clúster de OpenShift

En esta implementación, puede usar la instancia CPX de Citrix ADC para equilibrar la carga del tráfico de norte a sur a los microservicios en su clúster de OpenShift. El Citrix Ingress Controller se implementa como un sidecar junto con el contenedor Citrix ADC CPX en el mismo pod mediante el archivo cpx_cic_side_car.yaml.

Antes de empezar: Cuando implementa Citrix ADC CPX como enrutador, pueden surgir conflictos de puertos con el enrutador predeterminado en OpenShift. Debe quitar el enrutador predeterminado en OpenShift antes de implementar Citrix ADC CPX como enrutador. Para eliminar el enrutador predeterminado en OpenShift, lleve a cabo los siguientes pasos:

  1. Realice una copia de seguridad de la configuración del enrutador predeterminado mediante el siguiente comando.

    oc get -o yaml dc/router clusterrolebinding/router-router-role serviceaccount/router > default-router-backup.yaml
    
  2. Elimine el enrutador predeterminado con el siguiente comando.

    oc delete -f default-router-backup.yaml
    

Realice los siguientes pasos para implementar Citrix ADC CPX como enrutador con el Citrix Ingress Controller como sidecar.

  1. Descargue el archivo cpx_cic_side_car.yaml con el siguiente comando:

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/cpx_cic_side_car.yaml
    
  2. Agregue la cuenta de servicio a las restricciones de contexto de seguridad (SCC) privilegiadas de OpenShift.

    oc adm policy add-scc-to-user privileged system:serviceaccount:default:citrix
    
  3. Implemente el Citrix Ingress Controller mediante el siguiente comando:

    oc create -f cpx_cic_side_car.yaml
    
  4. Compruebe si el Citrix Ingress Controller se implementa correctamente mediante el siguiente comando:

    oc get pods --all-namespaces
    

Implementar Citrix ADC MPX/VPX como enrutador fuera del clúster de OpenShift

En esta implementación, el Citrix Ingress Controller, que se ejecuta como un pod independiente, le permite controlar el dispositivo Citrix ADC, MPX o VPX desde el clúster de OpenShift. Puede usar el archivo cic.yaml para esta implementación.

Nota: Citrix ADC MPX o VPX se pueden implementar en modo independiente, de alta disponibilidad o en clúster.

Requisitos previos

  • Determine la dirección IP que necesita el Citrix Ingress Controller para comunicarse con el dispositivo Citrix ADC. La dirección IP puede ser cualquiera de las siguientes, según el tipo de implementación de Citrix ADC:
    • NSIP (para dispositivos independientes): la dirección IP de administración de un dispositivo Citrix ADC independiente. Para obtener más información, consulte Direccionamiento IP en Citrix ADC.
    • SNIP (para dispositivos en modo de alta disponibilidad): la dirección IP de la subred. Para obtener más información, consulte Direccionamiento IP en Citrix ADC.
    • CLIP (para dispositivos en modo clúster): la dirección IP de administración de clústeres (CLIP) para una implementación de Citrix ADC en clúster. Para obtener más información, consulte Direccionamiento IP para un clúster.
  • El nombre de usuario y la contraseña del dispositivo Citrix ADC VPX o MPX utilizado como dispositivo de entrada. Si no utiliza las credenciales predeterminadas, el dispositivo Citrix ADC debe tener una cuenta de usuario del sistema con ciertos privilegios para que el Citrix Ingress Controller pueda configurar el dispositivo Citrix ADC MPX o VPX. Para crear una cuenta de usuario del sistema en Citrix ADC, consulte Crear una cuenta de usuario del sistema para el Citrix Ingress Controller de Citrix en Citrix ADC.

    Puede pasar directamente el nombre de usuario y la contraseña como variables de entorno al Citrix Ingress Controller o usar secretos de OpenShift (recomendado). Si quiere utilizar secretos de OpenShift, cree un secreto para el nombre de usuario y la contraseña mediante el siguiente comando:

     oc create secret generic nslogin --from-literal=username='cic' --from-literal=password='mypassword'
    

Crear una cuenta de usuario del sistema para el Citrix Ingress Controller de Citrix en Citrix ADC

El Citrix Ingress Controller configura un dispositivo Citrix ADC (MPX o VPX) mediante una cuenta de usuario del sistema del dispositivo Citrix ADC. La cuenta de usuario del sistema debe tener los permisos para configurar las siguientes tareas en Citrix ADC:

  • Agregar, eliminar o ver un servidor virtual de conmutación de contenido (CS)
  • Configurar directivas y acciones de CS
  • Configurar el servidor virtual de equilibrio de carga (LB)
  • Configurar grupos de servicios
  • Configurar certkeys SSL
  • Configurar rutas
  • Configurar monitores de usuario
  • Agregar archivo del sistema (para cargar claves de prueba SSL desde OpenShift)
  • Configurar la dirección IP virtual (VIP)
  • Comprobar el estado del dispositivo Citrix ADC
  • Configurar acciones y directivas SSL
  • Configurar SSL vServer
  • Configurar las acciones y directivas de respuesta

Para crear la cuenta de usuario del sistema, lleve a cabo lo siguiente:

  1. Inicie sesión en el dispositivo Citrix ADC mediante los siguientes pasos:

    1. Use un cliente SSH, como PuTTY, para abrir una conexión SSH al dispositivo Citrix ADC.

    2. Inicie sesión en el dispositivo con las credenciales de administrador.

  2. Cree la cuenta de usuario del sistema mediante el siguiente comando:

    add system user <username> <password>
    

    Por ejemplo:

    add system user cic mypassword
    
  3. Cree una directiva para proporcionar los permisos requeridos a la cuenta de usuario del sistema. Utilice el siguiente comando:

    add cmdpolicy cic-policy ALLOW '^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(\?!shell)(\?!sftp)(\?!scp)(\?!batch)(\?!source)(\?!.*superuser)(\?!.*nsroot)(\?!install)(\?!show\s+system\s+(user|cmdPolicy|file))(\?!(set|add|rm|create|export|kill)\s+system)(\?!(unbind|bind)\s+system\s+(user|group))(\?!diff\s+ns\s+config)(\?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)'
    

    Nota: La cuenta de usuario del sistema tendría privilegios en función de la directiva de comandos que defina.

    La directiva de comandos mencionada en el paso 3 es similar a la directiva de sysAdmin comandos integrada con otro permiso para cargar archivos.

    En la especificación de directiva de comandos proporcionada, los caracteres especiales que deben escaparse ya se omiten para copiar y pegar fácilmente en la línea de comandos de Citrix ADC.

    Para configurar la directiva de comandos del asistente de configuración (GUI) de Citrix ADC, utilice la siguiente especificación de directiva de comandos.

    ^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)^(?!shell)(?!sftp)(?!scp)(?!batch)(?!source)(?!.*superuser)(?!.*nsroot)(?!install)(?!show\s+system\s+(user|cmdPolicy|file))(?!(set|add|rm|create|export|kill)\s+system)(?!(unbind|bind)\s+system\s+(user|group))(?!diff\s+ns\s+config)(?!(set|unset|add|rm|bind|unbind|switch)\s+ns\s+partition).*|(^install\s*(wi|wf))|(^\S+\s+system\s+file)
    
  4. Enlazar la directiva a la cuenta de usuario del sistema mediante el siguiente comando:

    bind system user cic cic-policy 0
    

Implementar el Citrix Ingress Controller como un pod en un clúster de OpenShift

Realice los siguientes pasos para implementar el Citrix Ingress Controller como un pod:

  1. Descargue el archivo cic.yaml con el siguiente comando:

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/cic.yaml
    
  2. Modifique el archivo cic.yaml e introduzca los valores de las siguientes variables de entorno:

    Variable de entorno Obligatorio u opcional Descripción
    NS_IP Mandatory (Obligatorio) La dirección IP del dispositivo Citrix ADC. Para obtener más información, consulte Requisitos previos.
    NS_USER y NS_PASSWORD Mandatory (Obligatorio) El nombre de usuario y la contraseña del dispositivo Citrix ADC VPX o MPX utilizado como dispositivo de entrada. Para obtener más información, consulte Requisitos previos.
    EULA Mandatory (Obligatorio) El acuerdo de licencia de usuario final. Especifique el valor como Yes.
    NS_VIP Opcional El Citrix Ingress Controller utiliza la dirección IP proporcionada en esta variable de entorno para configurar una dirección IP virtual para el Citrix ADC que recibe el tráfico de entrada. Nota: NS_VIP actúa como alternativa cuando la anotación frontend-ip no se proporciona en Ingress o Route yaml. No se admite para el servicio Type Loadbalancer.
  3. Agregue la cuenta de servicio a las restricciones de contexto de seguridad (SCC) privilegiadas de OpenShift.

    oc adm policy add-scc-to-user privileged system:serviceaccount:default:citrix
    
  4. Guarde el archivo cic.yaml modificado e impleméntelo con el siguiente comando:

     oc create -f cic.yaml
    
  5. Compruebe si el Citrix Ingress Controller se implementa correctamente mediante el siguiente comando:

    oc create get pods --all-namespaces
    
  6. Configure rutas estáticas en Citrix ADC VPX o MPX para llegar a los pods dentro del clúster de OpenShift.

    1. Use el siguiente comando para obtener información sobre los nombres de host, las direcciones IP de host y las subredes para la configuración de rutas estáticas.

      oc get hostsubnet
      
    2. Inicie sesión en la instancia de Citrix ADC.

    3. Agregue la ruta en la instancia de Citrix ADC mediante el siguiente comando.

      add route <pod_network> <netmask> <gateway>
      
    <B>Example:</b>
    
          oc get hostsubnet
          
          NAME            HOST           HOST IP        SUBNET
          os.example.com  os.example.com 192.168.122.46 192.1.1.0/24
    
     From the output of the `oc get hostsubnet` command:
    
          <pod_network> = 192.1.1.0
          Value for subnet = 192.1.1.0/x where x = 24 that means <netmask>= 255.255.255.0
          <gateway> = 192.168.122.46
    
     The required static route to add on Citrix ADC is as follows:
    
          add route 10.1.1.0 255.255.255.0 192.168.122.46
    

Ejemplo: implementar el Citrix Ingress Controller como un complemento de enrutador en un clúster de OpenShift

En este ejemplo, el Citrix Ingress Controller se implementa como un complemento de enrutador en el clúster de OpenShift para equilibrar la carga de una aplicación.

  1. Implemente una aplicación de ejemplo (apache.yaml) en su clúster de OpenShift y expóngala como un servicio en su clúster mediante el siguiente comando.

    oc create -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/openshift/manifest/apache.yaml
    

    Nota: Cuando implementa un pod de Apache normal en OpenShift, puede fallar, ya que el pod de Apache siempre se ejecuta como un pod raíz. OpenShift tiene controles de seguridad estrictos que bloquean la ejecución de un pod como raíz o la vinculación al puerto 80. Como solución alternativa, puede agregar la cuenta de servicio predeterminada del pod al contexto de seguridad privilegiado de OpenShift mediante los siguientes comandos:

        oc adm policy add-scc-to-user privileged system:serviceaccount:default:default
        oc adm policy add-scc-to-group anyuid system:authenticated
    

    El contenido del archivo apache.yaml se indica a continuación.

    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        name: apache-only-http
      name: apache-only-http
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: apache-only-http
      template:
        metadata:
          labels:
            app: apache-only-http
        spec:
          containers:
          - image: raghulc/apache-multiport-http:1.0.0
            imagePullPolicy: IfNotPresent
            name: apache-only-http
            ports:
            - containerPort: 80
              protocol: TCP
            - containerPort: 5080
              protocol: TCP
            - containerPort: 5081
              protocol: TCP
            - containerPort: 5082
              protocol: TCP
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        name: apache-only-ssl
      name: apache-only-ssl
    spec:
      replicas: 4
      selector:
        matchLabels:
          app: apache-only-ssl
      template:
        metadata:
          labels:
            app: apache-only-ssl
        spec:
          containers:
          - image: raghulc/apache-multiport-ssl:1.0.0
            imagePullPolicy: IfNotPresent
            name: apache-only-ssl
            ports:
            - containerPort: 443
              protocol: TCP
            - containerPort: 5443
              protocol: TCP
            - containerPort: 5444
              protocol: TCP
            - containerPort: 5445
              protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-apache-multi-http
    spec:
      ports:
      - name: apache-http-6080
        port: 6080
        targetPort: 5080
      - name: apache-http-6081
        port: 6081
        targetPort: 5081
      - name: apache-http-6082
        port: 6082
        targetPort: 5082
      selector:
        app: apache-only-http
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: svc-apache-multi-ssl
    spec:
      ports:
      - name: apache-ssl-6443
        port: 6443
        targetPort: 5443
      - name: apache-ssl-6444
        port: 6444
        targetPort: 5444
      - name: apache-ssl-6445
        port: 6445
        targetPort: 5445
      selector:
        app: apache-only-ssl
    ---
    
  2. Implemente el Citrix Ingress Controller de Citrix para Citrix ADC VPX como un pod independiente en el clúster de OpenShift mediante los pasos de Implementar el Citrix Ingress Controller como un pod.

    oc create -f cic.yaml
    

    Nota: Para implementar el Citrix Ingress Controller de Citrix con Citrix ADC CPX en el clúster de OpenShift, lleve a cabo los pasos en Implementar el Citrix Ingress Controller como un sidecar con Citrix ADC CPX.

  3. Cree una ruta de OpenShift para exponer la aplicación.

    • Para crear una ruta OpenShift no segura (unsecured-route.yaml), use el siguiente comando:

       oc create -f unsecured-route.yaml
      
    • Para crear una ruta OpenShift segura con terminación de bordes (secured-edge-route.yaml), use el siguiente comando.

       oc create -f secured-route-edge.yaml
      
    • Para crear una ruta segura de OpenShift con terminación de acceso directo (ruta de paso seguro.yaml), utilice el siguiente comando.

       oc create -f secured-passthrough-route.yaml
      
    • Para crear una ruta segura de OpenShift con terminación de nuevo cifrado (secured-reencrypt-route.yaml), use el siguiente comando.

       oc create -f secured-reencrypt-route.yaml
      

    Para ver el contenido de los archivos YAML para las rutas de OpenShift en este ejemplo, consulte Archivos YAML para rutas.

    Nota:

    Para una ruta OpenShift segura con terminación de acceso directo, debe incluir el certificado predeterminado.

  4. Acceda a la aplicación mediante el siguiente comando.

      curl http://<VIP of Citrix ADC VPX>/ -H 'Host: < host-name-as-per-the-host-configuration-in-route >'
      <!--NeedCopy-->
    

Archivos YAML para rutas

Esta sección contiene archivos YAML para rutas seguras y no protegidas especificadas en el ejemplo.

Nota: Las claves utilizadas en este ejemplo son solo para fines de prueba. Debe crear sus propias claves para la implementación real.

El contenido del archivo unsecured-route.yaml se indica a continuación:

apiVersion: v1
kind: Route
metadata:
  name: unsecured-route
spec:
  host: unsecured-route.openshift.citrix-cic.com
  path: "/"
  to:
    kind: Service
    name: svc-apache-multi-http
<!--NeedCopy-->

Consulte ruta de borde segura para ver el contenido del archivo secured-edge-route.yaml.

El contenido de secured-passthrough-route se indica a continuación:

apiVersion: v1
kind: Route
metadata:
  name: secured-passthrough-route
spec:
  host: secured-passthrough-route.openshift.citrix-cic.com
  to:
    kind: Service
    name: svc-apache-multi-ssl
  tls:
    termination: passthrough
<!--NeedCopy-->

Consulte ruta de recifrado segura para ver el contenido del secured-reencrypt-route.yaml archivo.