在 Kubernetes 上体验 EMQX 5.0 的 MQTT over QUIC 特性

简介: 本文将介绍如何在 Kubernetes 上部署 EMQX 集群并开启 MQTT over QUIC 功能。

引言

作为全球领先的开源分布式 MQTT Broker,EMQX 在 5.0 版本中引入了 MQTT over QUIC,将 MQTT 协议的优势与 QUIC 的特性相结合。通过充分利用 QUIC 协议低连接开销和多路复用的特点,MQTT over QUIC 为弱网络环境和不规则网络中的用户提供了一种非常有前景的解决方案。它能够应对诸如在山区或隧道等恶劣环境中运行的网联车辆等物联网场景中的连接中断和连接建立缓慢等问题。云原生技术的发展,让越来越多的用户选择在 Kubernetes 上部署 EMQX 集群,享受快速创建和便捷管理的优势。本文将介绍如何在 Kubernetes 上部署 EMQX 集群并开启 MQTT over QUIC 功能。

暴露 EMQX 服务

在 Kubernetes 上部署 EMQX 时,您可以使用 LoadBalancerNodePort 将 EMQX 服务对集群外的客户端暴露。

  • LoadBalancer 方式依赖云服务商提供的负载均衡器来提供服务。目前,云服务商的负载均衡器不支持 QUIC 的地址迁移特性。
  • NodePort 方式依赖于 Kubernetes 的 kube-proxy 组件来转发外部请求,它可以无缝连接到 EMQX 服务,并支持 QUIC 地址迁移特性。

在车联网场景中,车端的地址可能会频繁变化,QUIC 的地址迁移特性就显得非常重要。因此,在 Kubernetes 上部署具有 MQTT over QUIC 功能的 EMQX 5.0 时,我们建议选择以 NodePort 方式对外暴露服务。

下面,我们将介绍在 Kubernetes 上部署 EMQX 5.0 并启用 MQTT over QUIC 的具体步骤。同时,我们将以 NodePort 方式对外暴露服务并验证 QUIC 的地址迁移功能。

前提条件

在将 EMQX 5.0 部署到 Kubernetes 之前,请确保满足以下要求:

安装 EMQX Operator

  1. 安装并启动 cert-manager

    cert-manager 版本需要等于或高于 1.1.6。如果已经安装并启动了 cert-manager,请跳过此步骤。

    $ 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
    

    您也可以参考 cert-manager 安装指南来进行安装。

  2. 使用 Helm 安装 EMQX Operator。

    $ 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. 等待 EMQX Operator 准备就绪。

    $ 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
    

部署 EMQX 5.0 并启用 MQTT over QUIC

  1. 将以下内容保存为 YAML 文件,并使用 kubectl apply 命令进行部署。

    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.default 表示启用 QUIC 监听器并绑定 UDP 14567 端口。

  2. 等待 EMQX 集群准备就绪。您可以通过 kubectl get 命令查看 EMQX 集群的状态,请确保 STATUSRunning。这可能需要一些时间。

    $ kubectl get emqx
    NAME   IMAGE      STATUS    AGE
    emqx   emqx:5.0   Running   10m
    
  3. 获取 EMQX 集群的监听器服务。

    EMQX Operator 将创建两个 EMQX Service 资源,分别为 emqx-dashboardemqx-listeners,用于 EMQX 控制台和 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
    

    您可以看到服务中启用了 QUIC 监听器。

使用 eMQTT-Bench 测试 QUIC

eMQTT-Bench 是一款用 Erlang 编写的轻量级 MQTT 5.0 基准测试工具。您可以从 eMQTT-Bench 发布页面下载并安装适合您平台的支持 QUIC 协议的 eMQTT-Bench。

  1. 使用 QUIC 协议建立连接,并通过指定 --quic 选项进行订阅。这里有 10 个客户端订阅了 t/test 主题。

    $ ./emqtt_bench sub --quic -h ${node_ip} -p ${node_port} -t t/test -c 10
    
  2. 打开另一个终端,使用 QUIC 协议进行连接并执行发布测试。

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

    此时,您可以从命令行的输出日志中看到订阅者和发布者的消息订阅发布速率。

    订阅者和发布者的消息订阅发布速率

  3. 进行地址迁移测试。

    我们在图中箭头标记的时间点切换客户端网络,并观察 EMQX 集群发送和接收消息的情况:

    观察 EMQX 集群发送和接收消息的情况

    从上图可以看出,在客户端网络变化时,QUIC 对消息的接收和发送没有造成影响。同时,客户端发布和订阅消息也没有出现任何异常,如下图所示:

    QUIC 对消息的接收和发送没有造成影响

在 Kubernetes 上使用 QUIC 的挑战

目前,在 Kubernetes 上使用 QUIC 协议存在的主要问题是云服务商提供的负载均衡器对 QUIC 协议支持不完善,如不支持 IETF QUIC 协议和 QUIC 地址迁移特性。

结语

以上就是在 Kubernetes 上使用 EMQX 5.0 体验 MQTT over QUIC 的全部过程。可以看出,在 Kubernetes 上部署 EMQX 5.0 非常简单,只需要一个 YAML 文件即可完成。启用 MQTT over QUIC 后,您的设备可以基于 QUIC 协议与 EMQX 集群进行通信,充分利用其在物联网消息传输方面的优势。

版权声明: 本文为 EMQ 原创,转载请注明出处。
原文链接:https://www.emqx.com/zh/blog/enabling-mqtt-over-quic-on-kubernetes-with-emqx-5-0

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
4天前
|
Ubuntu 网络安全 Windows
ubuntu16.04版本安装emqx的mqtt服务
ubuntu16.04版本安装emqx的mqtt服务
|
7月前
|
Kubernetes 安全 容器
Kubernetes-Init容器的6个特性
本文主要从以下4个方面介绍Init容器:Init容器作用、Init容器特性、Init容器与应用容器的区别、Init容器实战。
|
7月前
|
传感器 物联网 数据处理
MQTT 和 EMQX到底有啥区别?
MQTT 和 EMQX到底有啥区别?
468 3
MQTT 和 EMQX到底有啥区别?
|
7月前
|
Kubernetes API 索引
k8s 1.28重磅发布,Sidecar Containers等45个特性来了!
k8s 1.28重磅发布,Sidecar Containers等45个特性来了!
239 1
|
9月前
|
存储 Kubernetes 安全
Kubernetes 和容器安全的 7 个关键特性
Kubernetes 和容器安全的 7 个关键特性
103 0
Kubernetes 和容器安全的 7 个关键特性
EMQ
|
9月前
|
监控 安全 数据可视化
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQX Enterprise 5.1 单集群可达 1 亿客户端连接;创新性地引入 MQTT over QUIC 协议;同时提供了 MQTT 大文件传输能力以及可视化数据集成能力。
EMQ
199 0
EMQX Enterprise 5.1 正式发布:生产环境就绪的 MQTT over QUIC、基于 MQTT 的文件传输支持
EMQ
|
10月前
|
SQL 传感器 JSON
使用 EMQX 和 eKuiper 进行 MQTT 流处理:快速教程
了解如何使用 EMQX 和 eKuiper 进行 MQTT 流处理,实现实时数据处理、转换和分析。优化您的 MQTT 数据流处理能力,提高物联网应用的效率和性能。
EMQ
214 0
使用 EMQX 和 eKuiper 进行 MQTT 流处理:快速教程
EMQ
|
10月前
|
机器学习/深度学习 传感器 存储
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
在本文中,我们将使用开源分布式 MQTT Broker EMQX,以及边缘工业协议网关软件 Neuron,来构建一个可扩展和稳健的平台,用于实现 Sparkplug 解决方案。
EMQ
151 0
基于 EMQX 和 Neuron 的工业物联网 MQTT Sparkplug 解决方案
EMQ
|
11月前
|
JSON 负载均衡 物联网
使用 Terraform 在 GCP 上一键部署 EMQX MQTT Broker
本文将指导您如何设置 GCP 项目、创建服务账户、编写 Terraform 配置文件,实现在 GCP 上轻松部署 EMQX MQTT Broker。
EMQ
121 0
使用 Terraform 在 GCP 上一键部署 EMQX MQTT Broker
|
12月前
|
消息中间件 存储 物联网
「物联网技术」EMQX 的MQTT 和 Kafka 对比
「物联网技术」EMQX 的MQTT 和 Kafka 对比