Experimente la función MQTT sobre QUIC de EMQX 5.0 en Kubernetes

introducción

Como el corredor MQTT distribuido de código abierto líder en el mundo, EMQX introdujo MQTT sobre QUIC en la versión 5.0, combinando las ventajas del protocolo MQTT con las características de QUIC. Al aprovechar al máximo la sobrecarga de conexión baja y las funciones de multiplexación del protocolo QUIC, MQTT sobre QUIC proporciona una solución muy prometedora para los usuarios en entornos de red débiles y redes irregulares. Es capaz de hacer frente a la pérdida de conexión y al lento establecimiento de la conexión en escenarios de IoT, como vehículos conectados que operan en entornos hostiles, como montañas o túneles. Con el desarrollo de la tecnología nativa de la nube, cada vez más usuarios eligen implementar clústeres EMQX en Kubernetes para disfrutar de las ventajas de una creación rápida y una administración conveniente. Este artículo presentará cómo implementar un clúster EMQX en Kubernetes y habilitar la función MQTT sobre QUIC.

Exponer el servicio EMQX

Al implementar EMQX en Kubernetes, puede usar LoadBalancero NodePortpara exponer los servicios de EMQX a clientes fuera del clúster.

  • LoadBalancerEl método se basa en el equilibrador de carga proporcionado por el proveedor de servicios en la nube para proporcionar servicios. Actualmente, el equilibrador de carga del proveedor de servicios en la nube no admite la función de migración de direcciones de QUIC.
  • NodePortEl método se basa en el componente kube-proxy de Kubernetes para reenviar solicitudes externas, puede conectarse sin problemas a los servicios EMQX y es compatible con la función de migración de direcciones QUIC.

En el escenario de Internet de los vehículos, la dirección del extremo del vehículo puede cambiar con frecuencia, por lo que la función de migración de direcciones de QUIC es muy importante. Por lo tanto, al implementar EMQX 5.0 con la función MQTT sobre QUIC en Kubernetes, le recomendamos que elija exponer NodePortel servicio de forma externa.

A continuación, presentaremos los pasos específicos para implementar EMQX 5.0 en Kubernetes y habilitar MQTT sobre QUIC. Al mismo tiempo, expondremos NodePortel servicio y verificaremos la función de migración de direcciones de QUIC de alguna manera.

requisito previo

Antes de implementar EMQX 5.0 en Kubernetes, asegúrese de que se cumplan los siguientes requisitos:

Instalar el Operador EMQX

  1. Instalar y empezar cert-manager.

    cert-managerLa versión debe ser igual o superior a 1.1.6. Si ya está instalado e iniciado cert-manager, omita este paso.

    $ helm repo add jetstack https://charts.jetstack.io
    $ helm repo update
    $ helm upgrade --install cert-manager jetstack/cert-manager \
    --namespace cert-manager \
    --create-namespace \
    --set installCRDs=true
    

    También puede consultar la guía de instalación de cert-manager para la instalación.

  2. Utilice Helm para instalar el operador EMQX.

    $ helm repo add emqx https://repos.emqx.io/charts
    $ helm repo update
    $ helm install emqx-operator emqx/ emqx-operator --namespace emqx-operator-system --create-namespace
    
  3. Espere a que el Operador EMQX esté listo.

    $ kubectl wait --for=condition=Ready pods -l "control-plane=controller-manager" -n emqx-operator-system
    
    # 如果您得到类似以下的输出结果,说明 emqx-operator 已经就绪:
    pod/emqx-operator-controller-manager-57bd7b8bd4-h2mcr condition met
    

Implemente EMQX 5.0 y habilite MQTT sobre QUIC

  1. Guarde el siguiente contenido como un archivo YAML y use kubectl applyel comando para implementar.

    apiVersion: apps.emqx.io/v2alpha1
    kind: EMQX
    metadata:
    name: emqx
    spec:
    image: emqx:5.0
    bootstrapConfig: |
      listeners.quic.default {
        enabled = true
        bind = "0.0.0.0:14567"
        max_connections = 1024000
        keyfile = "/opt/emqx/etc/certs/key.pem"
        certfile = "/opt/emqx/etc/certs/cert.pem"
      }
    coreTemplate:
      spec:
        replicas: 3
    replicantTemplate:
      spec:
        replicas: 3
    listenersServiceTemplate:
      spec:
        type: NodePort
        ports:
          - name: quic-default
            protocol: UDP
            port: 14567
            targetPort: 14567
    

    listeners.quic.defaultIndica que la escucha QUIC está habilitada y el 14567puerto UDP está enlazado.

  2. Espere a que el clúster EMQX esté listo. Puede kubectl getver el estado del clúster EMQX a través del comando, asegúrese de STATUSque sea Running. Esto puede tomar algo de tiempo.

    $ kubectl get emqx
    NAME   IMAGE      STATUS    AGE
    emqx   emqx:5.0   Running   10m
    
  3. Obtenga el servicio de escucha del clúster EMQX.

    El operador EMQX creará dos recursos de servicio EMQX, a saber emqx-dashboardy emqx-listeners, que se utilizan para la consola EMQX y el puerto de escucha EMQX.

    $ kubectl get service emqx-listeners
    NAME             TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                         AGE
    emqx-listeners   NodePort   192.168.50.64   <none>        14567:30171/UDP,1883:32633/TCP   2m1s
    

    Puede ver que el agente de escucha QUIC está habilitado en el servicio.

Prueba QUIC con eMQTT-Bench

eMQTT-Bench es una herramienta de referencia liviana de MQTT 5.0 escrita en Erlang. Puede descargar e instalar eMQTT-Bench que admita el protocolo QUIC para su plataforma desde la página de lanzamiento de eMQTT-Bench .

  1. Utilice el protocolo QUIC para establecer una conexión y --quicsuscribirse con la opción especificada. Aquí hay 10 clientes suscritos al t/testtema.

    $ ./emqtt_bench sub --quic -h ${node_ip} -p ${node_port} -t t/test -c 10
    
  2. Abra otro terminal, conéctese usando el protocolo QUIC y realice una prueba de liberación.

    $ ./emqtt_bench pub --quic -h ${node_ip} -p ${node_port} -t t/test -c 1
    

    En este punto, puede ver la tasa de publicación de suscripción de mensajes del suscriptor y el publicador desde el registro de salida de la línea de comando.

    Tasa de publicación de suscripción de mensajes de suscriptores y editores

  3. Realice una prueba de migración de direcciones.

    Cambiamos la red del cliente en el punto de tiempo marcado por la flecha en la figura y observamos la situación del clúster EMQX enviando y recibiendo mensajes:

    Observar el envío y recepción de mensajes por parte del clúster EMQX

    Como se puede ver en la figura anterior, cuando cambia la red del cliente, QUIC no tiene efecto en la recepción y el envío de mensajes. Al mismo tiempo, no existe ninguna anomalía en la publicación y suscripción de mensajes del cliente, como se muestra en la siguiente figura:

    QUIC no tiene ningún efecto sobre la recepción y el envío de mensajes.

Desafíos de usar QUIC en Kubernetes

En la actualidad, el principal problema de usar el protocolo QUIC en Kubernetes es que el balanceador de carga proporcionado por el proveedor de servicios en la nube no es totalmente compatible con el protocolo QUIC, como por ejemplo, no es compatible con el protocolo QUIC de IETF y la función de migración de direcciones QUIC.

epílogo

Lo anterior es todo el proceso de usar EMQX 5.0 en Kubernetes para experimentar MQTT sobre QUIC. Se puede ver que implementar EMQX 5.0 en Kubernetes es muy simple y solo necesita un archivo YAML para completarse. Después de habilitar MQTT sobre QUIC, su dispositivo puede comunicarse con el clúster EMQX basado en el protocolo QUIC, aprovechando al máximo sus ventajas en la transmisión de mensajes de IoT.

Declaración de derechos de autor: este artículo es original de EMQ, indique la fuente para la reimpresión.
Enlace original: https://www.emqx.com/zh/blog/enabling-mqtt-over-quic-on-kubernetes-with-emqx-5-0

Supongo que te gusta

Origin blog.csdn.net/emqx_broker/article/details/131638028
Recomendado
Clasificación