Ingress Controller de Citrix ADC

Implementar la devolución directa del servidor

En un sistema típico con equilibrio de carga, un equilibrador de carga actúa como mediador entre los servidores web y los clientes. El equilibrador de carga recibe las solicitudes de clientes entrantes y pasa las solicitudes al servidor apropiado con ligeras modificaciones en los paquetes de datos. El servidor responde al equilibrador de carga con los datos requeridos y, a continuación, el equilibrador de carga reenvía la respuesta al cliente.

En una implementación de Direct Server Return (DSR), el equilibrador de carga reenvía la solicitud del cliente al servidor, pero el servidor back-end envía directamente la respuesta al cliente. El uso de diferentes rutas de red para la solicitud y la respuesta ayuda a evitar saltos adicionales y reduce la latencia. Como el servidor responde directamente al cliente, el DSR acelera el tiempo de respuesta entre el cliente y el servidor y también elimina una carga adicional del equilibrador de carga. El uso de DSR es una forma transparente de lograr un mayor rendimiento de red para sus aplicaciones con pocos o ningún cambio en la infraestructura. Para obtener más información sobre DSR mediante Citrix ADC, consulte la documentación de Citrix ADC.

La solución DSR es útil en las siguientes situaciones:

  • Mientras maneja aplicaciones que ofrecen transmisión de video donde la baja latencia (tiempo de respuesta) es importante.
  • Cuando no se requiere equilibrio de carga inteligente
  • Cuando la capacidad de salida del equilibrador de carga puede ser el cuello de botella

Sin embargo, cuando se utiliza la capa avanzada de DSR, no se admiten las funciones de equilibrio de carga 7.

Topología de red DSR para Kubernetes mediante Citrix ADC

En esta topología, hay un equilibrador de carga externo (ADC de nivel 1) que distribuye el tráfico al ADC de entrada (ADC de nivel 2) implementado dentro del clúster de Kubernetes sobre una superposición (L3 DSR IPIP). El ADC de nivel 2 recoge el paquete, lo desencapsula y realiza un equilibrio de carga entre los servicios. El ADC de nivel 2 envía el tráfico de retorno del servicio al cliente en lugar de enviarlo a través del ADC de nivel 1.

DSR_Traffic_Flow

Implementación de DSR para aplicaciones nativas de la nube mediante Citrix ADC

Realice los pasos de las siguientes secciones para implementar DSR para las aplicaciones implementadas en el clúster de Kubernetes.

Implementar Citrix ADC CPX como ADC de nivel 2

Esta sección contiene los pasos para crear las configuraciones necesarias en el dispositivo de entrada para la topología DSR.

  1. Cree un espacio de nombres para DSR con el siguiente comando:

    kubectl apply -f  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/dsr_namespace.yaml
    
  2. Cree un ConfigMap con el siguiente comando.

    kubectl apply -f  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/cpx_config.yaml  -n dsr
    

    Nota:

    En este ejemplo, la red de Citrix Node Controller se configura como 192.168.1.0/24. Por lo tanto, el comando para crear el túnel IP se proporciona como add iptunnel dsr 192.168.1.254 255.255.255.0 *. Debe especificar el valor de acuerdo con su configuración CNC.

  3. Implemente Citrix ADC CPX en el espacio de nombres dsr.

    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/citrix-k8s-cpx-ingress.yml  -n dsr
    

Implementación de una aplicación de muestra en el clúster de Kubernetes

Realice los pasos de esta sección para implementar una aplicación de muestra en un clúster de Kubernetes.

  1. Implemente la aplicación de libro de visitas mediante el siguiente comando.

    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/guestbook-all-in-one.yaml  -n dsr 
    
  2. Exponga la aplicación de libro de visitas mediante Ingress.

    1. Descargue el archivo YAML de entrada del libro de visitas con el siguiente comando.

      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/guestbook-all-in-one.yaml
      
    2. Modifique y proporcione la IP del DSR o la dirección IP pública a través de la cual accede a su aplicación mediante ingress.citrix.com/frontend-ip: las anotaciones.

      ingress.citrix.com/frontend-ip: "<ip-address>"
      
    3. Guarde el archivo YAML e implemente el recurso Ingress con el siguiente comando.

      kubectl apply -f guestbook-ingress.yaml -n dsr
      

Establecer la conectividad de red entre los ADC de nivel 1 y nivel 2

Realice los pasos de esta sección para establecer la conectividad de red entre los ADC de nivel 1 y nivel 2.

  1. Descargue YAML para implementar Citrix Node Controller mediante el siguiente comando.

    wget https://raw.githubusercontent.com/citrix/citrix-k8s-node-controller/master/deploy/citrix-k8s-node-controller.yaml
    
  2. Modifique el archivo YAML y proporcione los valores de los argumentos NS_IP, NS_USER, NS_PASSWORD y REMOTE_VTEPIP. Para obtener información detallada, consulte Citrix Node Controller.

  3. Guarde el archivo YAML e implemente Citrix Node Controller.

       kubectl create -f citrix-k8s-node-controller.yaml -n dsr
    

Implementar el Citrix Ingress Controller para ADC de nivel 1 y exponer Citrix ADC CPX como un servicio

Realice los siguientes pasos para implementar el Citrix Ingress Controller como un pod independiente y crear un recurso de entrada para Citrix ADC CPX de nivel 2.

  1. Descargue el archivo YAML de Citrix Ingress Controller mediante el siguiente comando.

        wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/citrix-k8s-ingress-controller.yaml
    
  2. Modifique el archivo YAML y actualice los siguientes valores para Citrix Ingress Controller.

    • NS_IP
    • NS_USER
    • NS_PASSWORD

    Para obtener más información, consulte Implementar el Citrix Ingress Controller mediante YAML.

  3. Guarde el archivo YAML e implemente Citrix Ingress Controller.

       kubectl create -f citrix-k8s-ingress-controller.yaml -n dsr
    
  4. Cree la configuración de DSR en el ADC de nivel 1 mediante la creación de un recurso de entrada para Citrix ADC CPX de nivel 2.

      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/vpx-ingress.yaml 
    
  5. Modifique el archivo YAML y proporcione el DSR o la dirección IP pública a través de la cual el usuario accede a la aplicación mediante la anotación ingress.citrix.com/frontend-ip:. Esta dirección IP debe ser la misma que la dirección IP que especificó en el paso 2.

      kubectl apply -f vpx-ingress.yaml  -n dsr
    

Pruebe la implementación de DSR

Para probar la implementación de DSR, acceda a la aplicación desde un explorador mediante la dirección IP especificada para la anotación ingress.citrix.com/frontend-ip:. Se rellena una página del libro de visitas.

A continuación se muestra un ejemplo de salida:

ApplicationOutput

Solución de problemas

Al probar la aplicación, es posible que no llene ninguna página aunque se hayan creado todas las configuraciones requeridas. Esto se debe a las rp_filter<!--NeedCopy--> reglas del anfitrión. Si experimenta este problema, utilice los siguientes comandos en todos los hosts para inhabilitar las reglas.

    sysctl -w net.ipv4.conf.all.rp_filter=0
    sysctl -w net.ipv4.conf.cni0.rp_filter=0
    sysctl -w net.ipv4.conf.eth0.rp_filter=0
    sysctl -w net.ipv4.conf.cni0.rp_filter=0
    sysctl -w net.ipv4.conf.default.rp_filter=0
Implementar la devolución directa del servidor