Ingress Controller de Citrix ADC

Solución Citrix Ingress de un solo nivel para MongoDB

MongoDB es una de las bases de datos NoSQL más populares que está diseñada para procesar y almacenar cantidades masivas de datos no estructurados. Las aplicaciones nativas de la nube utilizan ampliamente MongoDB como base de datos NoSQL en la plataforma Kubernetes.

Identificar y solucionar problemas de rendimiento es un desafío en un entorno de Kubernetes debido a la enorme escala de implementaciones de aplicaciones. Para implementaciones de bases de datos como MongoDB, la supervisión es un componente crítico de la administración de bases de datos para garantizar que se cumplan los requisitos de alta disponibilidad y alto rendimiento.

Citrix proporciona una solución de entrada para el equilibrio de carga y la supervisión de bases de datos de MongoDB en una plataforma Kubernetes mediante las capacidades avanzadas de equilibrio de carga y supervisión del rendimiento de los ADC de Citrix. La solución Citrix Ingress para MongoDB le proporciona una visibilidad más profunda de las transacciones de MongoDB y le ayuda a identificar y abordar rápidamente los problemas de rendimiento siempre que ocurran. Con el exportador de observabilidad de Citrix ADC, puede exportar las transacciones de MongoDB a Elasticsearch y visualizarlas mediante paneles de Kibana para obtener información más profunda.

El siguiente diagrama explica la solución de Citrix Ingress para MongoDB mediante una implementación de un solo nivel de Citrix ADC.

Solución Citrix Ingress para MongoDB

En esta solución, se implementa un Citrix ADC VPX fuera del clúster de Kubernetes (nivel 1) y el exportador de observabilidad de Citrix ADC se implementa dentro del clúster de Kubernetes.

Citrix ADC VPX de nivel 1 redirige el tráfico (de norte a sur) de los clientes de MongoDB a los enrutadores de consultas de Mongo DB (Mongos) en el clúster de Kubernetes. El exportador de observabilidad de Citrix se implementa dentro del clúster de Kubernetes.

Como parte de esta implementación, se crea un recurso Ingress para Citrix ADC VPX (entrada de nivel 1). El recurso Ingress de nivel 1 define reglas para habilitar el equilibrio de carga para el tráfico de MongoDB en Citrix ADC VPX y especifica el puerto para Mongo. Cada vez que el tráfico de MongoDB llega al puerto especificado en un Citrix ADC VPX, lo redirige a una de las instancias de servicio de Mongo mencionadas en la regla de entrada. El administrador de MongoDB expone el servicio de Mongo y se especifica la misma instancia de servicio en Ingress.

La instancia de Citrix Observability Exporter agrega transacciones de Citrix ADC VPX y las carga en el servidor de Elasticsearch. Puede configurar paneles de Kibana para visualizar los datos requeridos (por ejemplo, el tiempo de respuesta de las consultas, los nombres de las colecciones más consultadas) y analizarlos para obtener información significativa. Solo se analizan las operaciones de inserción, actualización, eliminación, búsqueda y respuesta y las métricas se envían a Citrix Observability Exporter.

Requisitos previos

Debe completar los siguientes pasos antes de implementar la solución Citrix Ingress para MongoDB.

  • Configurar un clúster de Kubernetes en la nube o en las instalaciones
  • Implemente MongoDB en el clúster de Kubernetes con el modo de implementación como conjunto de réplicas fragmentadas. No se admiten otros modos de implementación de MongoDB.

  • Asegúrese de tener Elasticsearch instalado y configurado. Use el archivo elasticsearch.yaml para implementar Elasticsearch.
  • Asegúrese de haber instalado Kibana para visualizar los datos de sus transacciones. Use el archivo kibana.yaml para implementar Kibana.
  • Implemente una instancia de Citrix ADC VPX fuera del clúster de Kubernetes. Para obtener instrucciones sobre cómo implementar Citrix ADC VPX, consulte Implementar una instancia de Citrix ADC VPX.

Realice lo siguiente después de implementar Citrix ADC VPX:

  1. Configure una dirección IP de la subred del clúster de Kubernetes como SNIP en Citrix ADC. Para obtener información sobre la configuración de SNIP en Citrix ADC, consulte Configuración de direcciones IP de subred (SNIP).

  2. Habilite el acceso de administración para el SNIP que es la misma subred del clúster de Kubernetes. El SNIP debe usarse como NS_IP variable en el archivo YAML del Citrix Ingress Controller para permitir que el Citrix Ingress Controller configure el Citrix ADC de nivel 1.

    Nota:

    No es obligatorio utilizar SNIP como NS_IP. Si se puede acceder a la dirección IP de administración de Citrix ADC desde el Citrix Ingress Controller, puede usar la dirección IP de administración como NS_IP.

  3. Cree una cuenta de usuario del sistema Citrix ADC específica para el Citrix Ingress Controller. El Citrix Ingress Controller usa la cuenta de usuario del sistema para configurar automáticamente el Citrix ADC de nivel 1.

  4. Configure Citrix ADC VPX para que reenvíe las consultas DNS a las direcciones IP del pod CoreDNS en el clúster de Kubernetes.

    add dns nameServer <core-dns-pod-ip-address>
    

    Por ejemplo, si las direcciones IP del pod son 192.244.0.2 y 192.244.0.3, configure los servidores de nombres en Citrix ADC VPX como:

    add dns nameServer 192.244.0.3
    add dns nameServer 192.244.0.2
    

Implementar la solución Citrix Ingress para MongoDB

Cuando implementa la solución Citrix Ingress para MongoDB, implementa los siguientes componentes en el clúster de Kubernetes:

  • Un Citrix Ingress Controller independiente de Citrix para Citrix ADC VPX
  • Un recurso de entrada para Citrix ADC VPX
  • Citrix ADC Observability Exporter

Realice los siguientes pasos para implementar la solución Citrix Ingress para MongoDB.

  1. Cree un secreto de Kubernetes con el nombre de usuario y la contraseña de Citrix ADC VPX.

    kubectl create secret  generic nslogin --from-literal=username='username' --from-literal=password='mypassword'
    
  2. Descargue el archivo cic-configmap.yaml y, a continuación, impleméntelo con el siguiente comando.

    kubectl create -f cic-configmap.yaml
    
  3. Implemente el Citrix Ingress Controller como un pod mediante los siguientes pasos.

    1. Descargue el archivo de manifiesto del Citrix Ingress Controller. Utilice el siguiente comando:

      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/dual-tier/manifest/tier-1-vpx-cic.yaml
      
    2. Modifique el archivo de manifiesto Citrix Ingress Controller e introduzca los valores para 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.
      EULA Mandatory (Obligatorio) El acuerdo de licencia de usuario final. Especifique el valor como Yes.
      NIVEL DE REGISTRO 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.
      NS_PROTOCOL y NS_PORT Opcional Define el protocolo y el puerto que debe utilizar el Citrix Ingress Controller para comunicarse con Citrix ADC. De forma predeterminada, el Citrix Ingress Controller usa HTTPS en el puerto 443. También puede usar HTTP en el puerto 80.
      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 Ingress 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 tiene prioridad sobre la anotación frontend-ip.
    3. Especifique o modifique los siguientes argumentos en el archivo YAML del Citrix Ingress Controller.

      args:
       - --configmap
          default/cic-configmap
       - --ingress-classes
          tier-1-vpx                  
      
    4. Implemente el archivo de manifiesto del Citrix Ingress Controller actualizado mediante el siguiente comando:

      kubectl create -f tier-1-vpx-cic.yaml
      
  4. Cree un objeto Ingress para Citrix ADC de nivel 1 mediante el archivo tier-1-vpx-ingress.yaml.

    kubectl apply -f tier-1-vpx-ingress.yaml 
    

    A continuación se presenta el contenido del archivo tier-1-vpx-ingress.yaml. Según las reglas especificadas en este recurso Ingress, el Citrix Ingress Controller configura Citrix ADC VPX para que escuche el tráfico de MongoDB en el puerto 27017. Como se muestra en este ejemplo, debe especificar el servicio que ha creado para los enrutadores de consultas de MongoDB (por ejemplo:serviceName: mongodb-mongos) para que Citrix ADC VPX pueda redirigir el tráfico hacia él. Aquí, mongodb-mongos es el servicio para enrutadores de consultas MongoDB.

      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        annotations:
          ingress.citrix.com/analyticsprofile: '{"tcpinsight": {"tcpBurstReporting":"DISABLED"}}'
          ingress.citrix.com/insecure-port: "27017"
          ingress.citrix.com/insecure-service-type: mongo
          ingress.citrix.com/insecure-termination: allow
          kubernetes.io/ingress.class: tier-1-vpx
        name: vpx-ingress
      spec:
        defaultBackend:
            service:
              name: mongodb-mongos
              port:
                number: 27017
    
  5. Implemente Citrix ADC Observability Exporter con Elasticsearch como punto final mediante el archivo coe-es-mongo.yaml.

    kubectl apply -f coe-es-mongo.yaml
    

    Nota:

    Debe establecer los detalles del servidor de Elasticsearch en la variable de entorno ElkServer en función de una dirección IP o el nombre DNS, junto con la información del puerto.

A continuación se presenta un archivo de ejemplo de ConfigMap.


apiVersion: v1
kind: ConfigMap
metadata:
  name: coe-config-es
data:
  lstreamd_default.conf: |
    {
        "Endpoints": {
            "ES": {
                "ServerUrl": "elasticsearch.default.svc.cluster.local:9200",
                "IndexPrefix":"adc_coe",
                "IndexInterval": "daily",
                "RecordType": {
                    "HTTP": "all",
                    "TCP": "all",
                    "SWG": "all",
                    "VPN": "all",
                    "NGS": "all",
                    "ICA": "all",
                    "APPFW": "none",
                    "BOT": "none",
                    "VIDEOOPT": "none",
                    "BURST_CQA": "none",
                    "SLA": "none",
                    "MONGO": "all"
                },
                "ProcessAlways": "no",
                "ProcessYieldTimeOut": "500",
                "MaxConnections": "512",
                "ElkMaxSendBuffersPerSec": "64",
                "JsonFileDump": "no"
            }
        }
    }
<!--NeedCopy-->

Comprobar la implementación de la solución Citrix Ingress

Puede usar el comando como se muestra en el siguiente ejemplo para comprobar que todas las aplicaciones están implementadas y mostrar todos los servicios y puertos.

sample-output-mongo-db-services

Puede utilizar el comando kubectl get ingress como se muestra en el siguiente ejemplo para obtener información sobre los objetos Ingress implementados.

   # kubectl get ingress

    NAME               HOSTS   ADDRESS   PORTS   AGE
    vpx-ingress        *                 80      22d

Verificar la observabilidad del tráfico de MongoDB

Este tema proporciona información sobre cómo obtener visibilidad de las transacciones de MongoDB mediante la solución Citrix Ingress y utiliza paneles de Kibana para visualizar las estadísticas de rendimiento de la base de datos.

Antes de llevar a cabo los pasos de este tema, asegúrese de que:

  • Ha implementado MongoDB como un conjunto de réplicas fragmentadas en el clúster de Kubernetes
  • Implementación de la solución Citrix Ingress para MongoDB
  • Se instala una aplicación cliente para MongoDB para enviar tráfico a MongoDB.
  • Kibana se instala para visualización

Realice los siguientes pasos para verificar la observabilidad del tráfico de MongoDB.

  1. Configure su aplicación cliente para que MongoDB apunte a la dirección IP virtual del Citrix ADC VPX de nivel 1.

    Por ejemplo:

    mongodb://<vip-of-vpx>:27017/
    
  2. Envíe varias solicitudes (por ejemplo, insertar, actualizar, eliminar) a la base de datos de MongoDB mediante su aplicación cliente de MongoDB. Las transacciones se cargan en el servidor de Elasticsearch.

  3. Configure un panel de Kibana para visualizar las transacciones de MongoDB. Puede utilizar el siguiente panel de control de Kibana de ejemplo.

Panel de control de Kibana para MongoDB

En este panel, puede ver las estadísticas de rendimiento de su implementación de MongoDB, incluidos los diferentes tipos de consultas y el tiempo de respuesta de las consultas. El análisis de estos datos le ayuda a encontrar cualquier anomalía, como la latencia en una transacción, y a tomar medidas inmediatas.

Exportar datos de telemetría a Prometheus

Para su implementación de Kubernetes, si tiene su servidor Prometheus implementado en el mismo clúster de Kubernetes, puede configurar anotaciones para permitir que Prometheus agregue automáticamente Citrix ADC Observability Exporter como destino de raspado.

A continuación se muestra un fragmento del archivo YAML de Citrix ADC Observability Exporter (coe-es-mongodb.yaml) con estas anotaciones.

template:
  metadata:
    name: coe-es
    labels:
      app: coe-es
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "5563"

Como alternativa, puede agregar manualmente Citrix ADC Observability Exporter como destino de raspado en el archivo de configuración del servidor Prometheus.

Además, asegúrese de que las métricas de Prometheus estén habilitadas en el archivo cic-configmap.yaml, como se muestra en el siguiente archivo YAML.

apiVersion: v1
kind: ConfigMap
metadata:
  name: cic-configmap
  namespace: default
data:
   NS_ANALYTICS_CONFIG: |
     distributed_tracing:
       enable: 'false'
       samplingrate: 0
     endpoint:
       server: 'coe-es.default.svc.cluster.local'
     timeseries:
       port: 5563
       metrics:
         enable: 'true'
         mode: 'prometheus'
       auditlogs:
         enable: 'false'
       events:
         enable: 'false'
     transactions:
       enable: 'true'
       port: 5557
<!--NeedCopy-->

En este archivo YAML, la siguiente configuración habilita las métricas para Prometheus.

 metrics:
    enable: 'true'
    mode: 'prometheus'
Solución Citrix Ingress de un solo nivel para MongoDB