Ingress Controller de Citrix ADC

Implementar el Citrix Ingress Controller mediante YAML

Puede implementar el Citrix Ingress Controller en los siguientes modos en sus implementaciones bare metal y en la nube :

  • Como pod independiente en el clúster de Kubernetes. Use este modo si controla Citrix ADC (Citrix ADC MPX o Citrix ADC VPX) fuera del clúster. Por ejemplo, con topologías de doble nivel o topología de un solo nivel en las que el nivel único es Citrix ADC MPX o VPX.

  • Como sidecar (en el mismo pod) con Citrix ADC CPX en el clúster de Kubernetes. El controlador sidecar solo es responsable del Citrix ADC CPX asociado dentro del mismo pod. Este modo se usa en topologías de doble nivel o en la nube.

Implementar el Citrix Ingress Controller como un pod independiente en el clúster de Kubernetes para dispositivos Citrix ADC MPX o VPX

Use el archivo citrix-k8s-ingress-controller.yaml para ejecutar el Citrix Ingress Controller como un pod independiente en el clúster de Kubernetes.

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 de NS_IP que necesita el controlador para comunicarse con el dispositivo. La dirección IP puede ser cualquiera de las siguientes, según el tipo de implementación de Citrix ADC:
    • (Dispositivos independientes) NSIP: 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
    • (Dispositivos en modo de alta disponibilidad) SNIP: la dirección IP de la subred. Para obtener más información, consulte Direccionamiento IP en Citrix ADC
    • (Dispositivos en modo clúster) CLIP: 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. El dispositivo Citrix ADC debe tener una cuenta de usuario del sistema (no predeterminada) con ciertos privilegios para que el Citrix Ingress Controller pueda configurar el dispositivo Citrix ADC VPX o MPX. Para obtener instrucciones sobre cómo crear la cuenta de usuario del sistema en Citrix ADC, consulte Crear 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 controlador o usar secretos de Kubernetes (recomendado). Si quieres usar secretos de Kubernetes, crea un secreto para el nombre de usuario y la contraseña con el siguiente comando:

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

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

El Citrix Ingress Controller configura el dispositivo Citrix ADC (MPX o VPX) mediante una cuenta de usuario del sistema de Citrix ADC. La cuenta de usuario del sistema debe tener ciertos privilegios para que el Citrix Ingress Controller tenga permiso para configurar lo siguiente 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 claves de certificado SSL
  • Configurar rutas
  • Configurar monitores de usuario
  • Agregar archivo del sistema (para cargar claves de certificado SSL desde Kubernetes)
  • Configurar la dirección IP virtual (VIP)
  • Comprobar el estado del dispositivo Citrix ADC

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

  1. Inicie sesión en el dispositivo Citrix ADC. Lleve a cabo lo siguiente:
    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 permisos adicionales 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

Lleve a cabo lo siguiente:

  1. Descargue citrix-k8s-ingress-controller.yaml con el siguiente comando:

    wget  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-ingress-controller.yaml
    
  2. Modifique el archivo citrix-k8s-ingress-controller.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.
    Kubernetes_url Opcional La URL kube-apiserver que usa el Citrix Ingress Controller para registrar los eventos. Si no se especifica el valor, el Citrix Ingress Controller usa la dirección IP interna de kube-apiserver.
    LOGLEVEL Opcional Los niveles de registro para controlar los registros generados por el Citrix Ingress Controller. De forma predeterminada, el valor se establece en DEBUG. Los valores admitidos son: CRITICAL, ERROR, WARNING, INFO y DEBUG. Para obtener más información, consulte Niveles de registro
    NS_PROTOCOL y NS_PORT Opcional Define el protocolo y el puerto que utiliza el Citrix Ingress Controller para comunicarse con Citrix ADC. De forma predeterminada, el Citrix Ingress Controller usa HTTP en el puerto 80. También puede usar HTTPS en el puerto 443.
    clases-ingreso Opcional Si se utilizan varios equilibradores de carga de entrada para equilibrar la carga de diferentes recursos de entrada. Puede usar esta variable de entorno para especificar el Citrix Ingress Controller para configurar Citrix ADC asociado a una clase de entrada específica. Para obtener información sobre las clases Ingress, consulte Soporte de clases Ingress
    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 yaml. No se admite para el servicio Type Loadbalancer.
    NS_APPS_NAME_PREFIX Opcional De forma predeterminada, el Citrix Ingress Controller agrega “k8s” como prefijo a las entidades de Citrix ADC, como el servidor virtual de conmutación de contenido (CS), el servidor virtual de equilibrio de carga (LB), etc. Ahora puede personalizar el prefijo mediante la variable de entorno NS_APPS_NAME_PREFIX en el archivo YAML de implementación Citrix Ingress Controller. Puede usar caracteres alfanuméricos para el prefijo y la longitud del prefijo no debe superar los 8 caracteres.
    ESPACIO DE NOMBRES Opcional Al ejecutar un Citrix Ingress Controller con RBAC basado en roles, debe proporcionar el espacio de nombres en el que quiere escuchar u obtener eventos. Este espacio de nombres debe ser el mismo que se usó para crear la cuenta de servicio. Con la cuenta de servicio, el Citrix Ingress Controller puede escuchar en un espacio de nombres. Puede usar la variable de NAMESPACE entorno para especificar el espacio de nombres. Para obtener más información, consulte Implementar el Citrix Ingress Controller para un espacio de nombres.
    POD_IPS_FOR_SERVICEGROUP_MEMBERS Opcional De forma predeterminada, al configurar servicios de tipo LoadBalancer y NodePort en un Citrix ADC externo de nivel 1, el Citrix Ingress Controller agrega NodeIP y NodePort como miembros del grupo de servicios. Si esta variable se establece como True, se agregan la dirección IP y el puerto del pod en lugar de NodeIP y NodePort como miembros del grupo de servicios.
    IGNORE_NODE_EXTERNAL_IP Opcional Al agregar NodeIP para servicios de tipo LoadBalancer o NodePort en un Citrix ADC externo de nivel 1, el Citrix Ingress Controller prioriza una dirección IP externa sobre una dirección IP interna. Si quiere preferir una dirección IP interna en lugar de una dirección IP externa para NodeIP, puede establecer esta variable en True.
    NS_DNS_NAMESERVER Opcional Permite agregar servidores de nombres DNS en Citrix ADC VPX.
    NS_CONFIG_DNS_REC Opcional Permite agregar registros DNS en Citrix ADC para los recursos de Ingress. Esta variable se configura en el momento del arranque y no se puede cambiar en tiempo de ejecución. Los valores posibles son verdaderos o falsos. El valor predeterminado es false y debe configurarlo true para habilitar la configuración del servidor DNS. Cuando establece el valor como “true”, el comando correspondiente add dns addrec <abc.com 1.1.1.1> se ejecuta en Citrix ADC y se crea un registro de direcciones (asignación del nombre de dominio a la dirección IP). Para obtener más información, consulte Crear registros de direcciones para un nombre de dominio.
    NS_SVC_LB_DNS_REC Opcional Permite agregar registros DNS en Citrix ADC para servicios de tipo LoadBalancer. Esta variable se configura en el momento del arranque y no se puede cambiar en tiempo de ejecución. Los valores posibles son verdaderos o falsos. El valor predeterminado es false y debe configurarlo true para habilitar la configuración del servidor DNS.
  3. Una vez que actualice las variables de entorno, guarde el archivo YAML e impleméntelo con el siguiente comando:

    kubectl create -f citrix-k8s-ingress-controller.yaml
    
  4. Compruebe si el Citrix Ingress Controller se implementa correctamente mediante el siguiente comando:

    kubectl get pods --all-namespaces
    

Implemente el Citrix Ingress Controller como un sidecar con Citrix ADC CPX

Use el archivo citrix-k8s-cpx-ingress.yaml para implementar un Citrix ADC CPX con el Citrix Ingress Controller como sidecar. El archivo YAML implementa una instancia de Citrix ADC CPX que se usa para equilibrar la carga del tráfico de norte a sur a los microservicios del clúster de Kubernetes.

Lleve a cabo lo siguiente:

  1. Descargue citrix-k8s-cpx-ingress.yaml con el siguiente comando:

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml
    
  2. Implemente el archivo citrix-k8s-cpx-ingress.yaml con el siguiente comando:

    kubectl create -f citrix-k8s-cpx-ingress.yaml
    
  3. Compruebe si el Citrix Ingress Controller se implementa correctamente mediante el siguiente comando:

    kubectl get pods --all-namespaces
    

Implementar Citrix ADC CPX con el Citrix Ingress Controller como sidecar sin las credenciales predeterminadas

Anteriormente, cuando implementaba Citrix ADC CPX con el Citrix Ingress Controller como sidecar sin especificar las credenciales de inicio de sesión, el Citrix Ingress Controller nsroot/nsroot considera las credenciales predeterminadas.

Con las versiones más recientes de Citrix ADC CPX (Citrix ADC CPX 13.0.64.35 y posteriores), se eliminan las credenciales predeterminadas. Por lo tanto, cuando implementa el Citrix Ingress Controller como un sidecar con las últimas versiones de Citrix ADC CPX, el Citrix Ingress Controller puede obtener las credenciales de Citrix ADC CPX a través del archivo /var/deviceinfo/random_id en Citrix ADC CPX. Este archivo se puede compartir entre Citrix ADC CPX y el Citrix Ingress Controller a través del montaje en volumen.

En función de si utiliza la última versión de Citrix ADC CPX o una versión anterior, debe elegir uno de los siguientes archivos YAML de implementación. Para versiones anteriores de Citrix ADC CPX, debe especificar las credenciales en el archivo YAML.

  • Para Citrix ADC CPX 13.0.64.35 y versiones posteriores, use el siguiente YAML:

citrix-k8s-cpx-ingress.yml

Como se proporciona en YAML, a continuación se muestra un fragmento de la configuración de montaje en volumen requerida en el archivo YAML tanto para el Citrix Ingress Controller como para Citrix ADC CPX:

    volumeMounts:
    - mountPath: /var/deviceinfo
    name: shared-data

A continuación se muestra un fragmento de la configuración de volumen compartido común para Citrix ADC CPX y el Citrix Ingress Controller.

    volumes:
    - name: shared-data
    emptyDir: {}
  • Para versiones anteriores de Citrix ADC CPX (versiones anteriores a 13.0.64.35), use el siguiente YAML:

    cpx-ingress-anterior.yaml

    A continuación se muestra un fragmento de la sección de credenciales en el Citrix Ingress Controller:

     - name: "NS_USER"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: username
     - name: "NS_PASSWORD"
     valueFrom:
     secretKeyRef:
             name: nslogin
             key: password
    

Implementar el Citrix Ingress Controller para un espacio de nombres

En Kubernetes, un rol consiste en reglas que definen un conjunto de permisos que se pueden realizar en un conjunto de recursos. En un entorno de Kubernetes habilitado para RBAC, puede crear dos tipos de roles según el alcance que necesites:

  • Role
  • ClusterRole

Un rol se puede definir dentro de un espacio de nombres con Role, o en todo el clúster con ClusterRole. Puede crear un Role para conceder acceso a los recursos dentro de un único espacio de nombres.

En Kubernetes, puede crear varios clústeres virtuales en el mismo clúster físico. Los espacios de nombres proporcionan una forma de dividir los recursos del clúster entre varios usuarios y son útiles en entornos con muchos usuarios repartidos en varios equipos o proyectos.

De forma predeterminada, el Citrix Ingress Controller supervisa los recursos de Ingress en todos los espacios de nombres del clúster de Kubernetes. Si varios equipos desean administrar el mismo Citrix ADC, pueden implementar un controlador de entrada Role basado en Citrix para supervisar solo los recursos de entrada que pertenecen a un espacio de nombres específico. Este espacio de nombres debe ser el mismo que el espacio de nombres que proporcionó para crear la cuenta de servicio. Debe crear un rol y vincular el rol a la cuenta de servicio para el Citrix Ingress Controller. En este caso, el Citrix Ingress Controller escucha solo los eventos del espacio de nombres especificado y, a continuación, configura Citrix ADC en consecuencia.

El siguiente ejemplo muestra un archivo YAML de ejemplo que define un Role y RoleBinding para implementar un Citrix Ingress Controller para un espacio de nombres específico.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
rules:
  - apiGroups: [""]
    resources: ["endpoints", "ingresses", "pods", "secrets", "nodes", "routes", "namespaces"]
    verbs: ["get", "list", "watch"]
  # services/status is needed to update the loadbalancer IP in service status for integrating
  # service of type LoadBalancer with external-dns
  - apiGroups: [""]
    resources: ["services/status"]
    verbs: ["patch"]
  - apiGroups: [""]
    resources: ["services"]
    verbs: ["get", "list", "watch", "patch"]
  - apiGroups: ["extensions"]
    resources: ["ingresses", "ingresses/status"]
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cic-k8s-role
  namespace: default
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: cic-k8s-role

subjects:
- kind: ServiceAccount
  name: cic-k8s-role
  namespace: default

---
<!--NeedCopy-->

Restricciones

Cuando el Citrix Ingress Controller se ejecuta con un rol (alcance en un espacio de nombres), las siguientes funcionalidades no se admiten, ya que requieren un alcance global.

  • configurar rutas estáticas
  • ver en todos los espacios de nombres
  • CRD
Implementar el Citrix Ingress Controller mediante YAML