Ingress Controller de Citrix ADC

Integración de Citrix ADC CPX con MetalLB en modo de capa 2 para clústeres de Kubernetes locales

La función de tipo LoadBalancer del servicio Kubernetes la proporcionan los equilibradores de carga en la nube en un entorno de nube. Los proveedores de servicios en la nube permiten este soporte al crear automáticamente un equilibrador de carga y asignar una dirección IP que se muestra como parte del estado del servicio. El equilibrador de carga en la nube equilibra la carga de cualquier tráfico destinado a la dirección IP externa en NodeIP y NodePort.

Citrix ofrece diferentes opciones para admitir los servicios de tipo LoadBalancer en un entorno local, que incluyen:

  • Usar un Citrix ADC VPX externo o Citrix ADC MPX como equilibrador de carga de nivel 1 para equilibrar la carga del tráfico entrante a los servicios de Kubernetes.

Para obtener más información sobre dicha implementación, consulte Exponer servicios de tipo LoadBalancer.

  • Exponga las aplicaciones que se ejecutan en un clúster de Kubernetes mediante el daemonset de Citrix ADC CPX que se ejecuta dentro del clúster de Kubernetes junto con un enrutador que admita ECMP sobre BGP. La carga del enrutador ECMP equilibra el tráfico a varias instancias de Citrix ADC CPX. Las instancias de Citrix ADC CPX equilibran la carga de los pods de aplicaciones reales. Para obtener más información sobre dicha implementación, consulte Anuncio BGP de direcciones IP externas para los servicios de tipo LoadBalancer e Ingresos mediante Citrix ADC CPX.

  • Exponga los servicios CPX de Citrix ADC como un servicio IP externo con una dirección IP externa de nodo. Puede usar esta opción si un ADC externo como nivel 1 no es factible y no existe un enrutador BGP. En esta implementación, Kubernetes redirige el tráfico que llega a spec.externalIP del servicio Citrix ADC CPX en los puertos de servicio a los pods de Citrix ADC CPX. Los recursos de entrada se pueden configurar mediante el Citrix Ingress Controller para realizar aplicaciones de descarga y equilibrio de carga SSL (Secure Sockets Layer). Sin embargo, esta implementación tiene el principal inconveniente de no ser fiable si se produce un error en el nodo.

  • Use MetalLB, que es una implementación de equilibrador de carga para clústeres de Kubernetes bare metal en el modo de capa 2 con Citrix ADC CPX para lograr la capacidad de entrada.

Esta documentación muestra cómo puede aprovechar MetalLB junto con Citrix ADC CPX para lograr la capacidad de entrada en clústeres bare metal cuando las otras soluciones no son factibles. MetalLB en modo de capa 2 configura un nodo para enviar todo el tráfico al servicio Citrix ADC CPX. MetaLB mueve automáticamente la dirección IP a un nodo diferente si se produce un error en el nodo. Por lo tanto, proporciona una mayor fiabilidad que el servicio ExternalIP.

Nota: MetalLB aún se encuentra en la versión beta. Consulte la documentación oficial para conocer la madurez del proyecto y cualquier limitación.

Realice los siguientes pasos para implementar la integración de Citrix ADC CPX con MetalLB en modo de capa 2 para clústeres de Kubernetes locales.

  1. Instalación y configuración de MetalLB
  2. Configurar la configuración de MetalLB para la capa 2
  3. Instalar el servicio Citrix ADC CPX

Instalación y configuración de MetalLB

Primero, debe instalar MetalLB en modo de capa 2. Para obtener más información sobre los diferentes tipos de instalaciones para MetalLB, consulte la documentación de MetalLB.

Realice los siguientes pasos para instalar MetalLB:

  1. Cree un espacio de nombres para implementar MetalLB.

    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/namespace.yaml 
    
  2. Implemente MetalLB con el siguiente comando.

    kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.9.5/manifests/metallb.yaml 
    
  3. Realice el siguiente paso si va a realizar la instalación por primera vez.

    kubectl create secret generic -n metallb-system memberlist --from-literal=secretkey="$(openssl rand -base64 128)" 
    
  4. Verifique la instalación de MetalLB y asegúrese de que el altavoz y el controlador estén en estado de ejecución mediante el siguiente comando:

    kubectl get pods -n metallb-system 
    

Estos pasos implementan MetalLB en su clúster, en el espacio de nombres metallb-system.

El archivo YAML de implementación de MetalLB contiene los siguientes componentes:

  • La implementación de metalb-system/controller: Este componente es el controlador de todo el clúster que maneja las asignaciones de direcciones IP.

  • El demonio metalb-system/speaker. Este componente se comunica mediante los protocolos de su elección para que los servicios sean accesibles.

  • Las cuentas de servicio para el controlador y el altavoz, junto con los permisos RBAC que los componentes necesitan para funcionar.

Configuración MetalLB para la capa 2

Una vez instalado MetalLB, debe configurar MetalLB para el modo de capa 2. MetalLB toma un intervalo de direcciones IP para asignarlas a los servicios de tipo LoadBalancer como IP externa. En esta implementación, un servicio Citrix ADC CPX actúa como front-end para todas las demás aplicaciones. Por lo tanto, basta con una sola dirección IP.

Cree un ConfigMap para MetalLB con el siguiente comando, donde metallb-config.yaml es el archivo YAML con la configuración de MetalLB.

kubectl create –f metallb-config.yaml 

A continuación se presenta un ejemplo de configuración de MetalLB para el modo layer2. En este ejemplo, 192.168.1.240-192.168.1.240 se especifica como el intervalo de direcciones IP.


apiVersion: v1
kind: ConfigMap
metadata:
  namespace: metallb-system
  name: config
data:
  config: |
    address-pools:
    - name: default
      protocol: layer2
      addresses:
      - 192.168.1.240-192.168.1.240
<!--NeedCopy-->

Instalación del servicio Citrix ADC CPX

Una vez que el LB de metal se haya instalado correctamente, puede instalar la implementación de Citrix ADC CPX y un servicio de tipo LoadBalancer.

Para instalar Citrix ADC CPX, puede usar el archivo YAML o los gráficos Helm.

Para instalar Citrix ADC CPX mediante el archivo YAML, lleve a cabo los siguientes pasos:

  1. Descargue los manifiestos de implementación de Citrix ADC CPX.

    wget https://github.com/citrix/citrix-k8s-ingress-controller/blob/master/deployment/baremetal/citrix-k8s-cpx-ingress.yml 
    
  2. Modifique el YAML de implementación de Citrix ADC CPX:

    • Configure el recuento de réplicas según sea necesario. Es mejor tener más de una réplica para obtener una alta disponibilidad.
    • Cambie el tipo de servicio a LoadBalancer.
  3. Aplica el archivo YAML modificado con el comando Kubectl.

    kubectl apply –f citrix-k8s-cpx-ingress.yaml 
    
  4. Vea el servicio con el siguiente comando:

    kubectl get svc cpx-service -output yaml
    

    Puede ver que MetalLB asigna una dirección IP externa al servicio Citrix ADC CPX de la siguiente manera:


apiVersion: v1
kind: Service
metadata:
  name: cpx-service
  namespace: default
spec:
  clusterIP: 10.107.136.241
  externalTrafficPolicy: Cluster
  healthCheckNodePort: 31916
  ports:
  - name: http
    nodePort: 31528
    port: 80
    protocol: TCP
    targetPort: 80
  - name: https
    nodePort: 31137
    port: 443
    protocol: TCP
    targetPort: 443
  selector:
    app: cpx-ingress
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: 192.168.1.240

<!--NeedCopy-->

Implementar una aplicación de ejemplo

Realice los siguientes pasos para implementar una aplicación de ejemplo y verificar la implementación.

  1. Cree una implementación de muestra con el archivo sample-deployment.yaml.

    kubectl create –f sample-deployment.yaml
    
  2. Exponga la aplicación con un servicio mediante el archivo sample-service.yaml.

    kubectl create –f sample-service.yaml  
    
  3. Una vez creado el servicio, puede agregar un recurso de entrada mediante sample-ingress.yaml.

    kubectl create –f sample-ingress.yaml  
    

Puede probar el Ingress accediendo a la aplicación mediante una dirección IP cpx-service externa de la siguiente manera:

   curl -v http://192.168.1.240 -H ‘host: testdomain.com’ 

Referencias adicionales

Para obtener más información sobre la configuración y la solución de problemas de MetalLB, consulte los siguientes enlaces:

Integración de Citrix ADC CPX con MetalLB en modo de capa 2 para clústeres de Kubernetes locales