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

news2024/11/18 1:23:22

引言

作为全球领先的开源分布式 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 之前,请确保满足以下要求:

  • Kubernetes 版本 >= 1.27

    当 K8s 版本低于 1.27 时,由于 kube-proxy IPVS break UDP NodePort Services 的 bug 导致 UDP 数据包被丢弃。目前这个 bug 已经在 K8s 1.27 版本中被修复,详情请参考:Syncing IPVS conntrack cleaning with IPTables。若您的 K8s 集群版本低于 1.27,推荐使用 iptables 模式的 kube-proxy。

  • Helm 版本 >= 3

安装 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/737164.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

lib/db 标准单元分类(Standard Cells in ASIC Design)、Track定义

文章目录 drain curruntThreshold Voltage (VTH)channel lengthtrack&#xff08;Classification according to the Density&#xff09;Standard Cell Layout drain currunt Drain current (Id) uCox(W/L)[(Vgs-Vth)Vds-(1/2)Vds^2] Coxepision/tox#饱和电流计算公式&#xf…

C#上位机开发广阔前景

作为一名C#上位机开发人员&#xff0c;我可以告诉你&#xff0c;C#是一门广泛使用的编程语言&#xff0c;在软件开发领域有很多机会和前途。以下是一些关于C#上位机开发的理由&#xff1a; 广泛应用&#xff1a;C#是微软的主要开发语言之一&#xff0c;被广泛用于开发各种类型…

Linux 性能优化(网络、磁盘、内存、日志监控)

文章目录 1、CPU性能监控1.2、平均负载基础1.3、平均负载与 CPU 使用率1.4、监控命令top命令mpstat命令pidstat场景一&#xff1a;CPU 密集型进程场景二&#xff1a;I/O 密集型进程场景三&#xff1a;大量进程的场景1.5、CPU上下文切换1.6、 遇到CPU利用率高该如何排查1.7、根据…

【java】获取前一天日期

//获取前一天日期//写法一LocalDate yesterday2 LocalDate.now().minusDays(1);System.out.println(yesterday2);//写法二LocalDate yes1 LocalDate.now().plusDays(-1);System.out.println(yes1);//输入当前日期的年 月 日System.out.println(LocalDate.now().getYear());…

Redis 的 LRU 与 LFU 算法实现

一、前言 原文地址 Redis是一款基于内存的高性能NoSQL数据库&#xff0c;数据都缓存在内存里&#xff0c; 这使得Redis可以每秒轻松地处理数万的读写请求。 相对于磁盘的容量&#xff0c;内存的空间一般都是有限的&#xff0c;为了避免Redis耗尽宿主机的内存空间&#xff0c;R…

【高通WLAN】WLAN bdf如何配置支持UMC设备和TSMC设备

除了用于台积电(TSMC)设备的现有bdf文件外,软件升级中还包括新的WLAN bdf文件,以支持UMC设备。 bdf文件导入的路径是 wlan_proc\wlan\halphy_tools\host\bdfUtil\qca61x0\bdf ■ TSMC(现有):bdwlan.xxx至bdwlan.bin ■ UMC(新):bdwlanu.xxx至bdwlanu.bin 以上配置…

可以带着游泳的耳机有哪些,推荐几款可以在水下使用的游泳耳机

在夏天里游泳是一件相当舒适的运动项目&#xff0c;比起汗流浃背的健身房&#xff0c;游泳池已经成为了更多人所倾向的地方&#xff0c;因为它不仅可以起到塑性的效果&#xff0c;而且还能够让自己时长保持在舒爽的状态&#xff0c;这时就会有朋友在问&#xff0c;游泳的时候节…

IDEA介绍

集成开发环境&#xff08;IDE&#xff09;简介 集成开发环境&#xff08;IDE&#xff0c;Integrated Development Environment&#xff09;是为程序开发提供便利的应用程序。通常包括代码编辑器、编译器、调试器和图形用户界面等工具。它们集成了代码编写、分析、编译、调试等…

时间序列预测 | Matlab鲸鱼算法(WOA)优化极限梯度提升树XGBoost时间序列预测,WOA-XGBoost时间序列预测模型,单列数据输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 鲸鱼算法(WOA)优化极限梯度提升树XGBoost时间序列预测,WOA-XGBoost时间序列预测模型,单列数据输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %% …

基于单片机停车场刷卡收费的设计与实现

功能介绍 以51单片机作为主控系统&#xff1b;以51单片机作为主控系统&#xff1b;通过液晶显示当前时间&#xff0c;车位、剩余车位、时间等信息&#xff1b;进电机正反转表示开关门&#xff1b;按键可以设置当前时间/单价/分钟&#xff1b;RC522射频卡识别&#xff0c;当刷卡…

Qt Core学习日记——第二天QMetaClassInfo

QMetaClassInfo是QMetaObject中用于存放类信息的数据结构 QMetaClassInfo定义&#xff1a; class Q_CORE_EXPORT QMetaClassInfo { public: Q_DECL_CONSTEXPR inline QMetaClassInfo() : mobj(nullptr), handle(0) {} const char *name() const; const char *value() co…

使用Jetpack Compose中的Pager构建滑动页面

Jetpack Compose是Google为Android开发者提供的一种现代化的UI工具包&#xff0c;它采用声明式UI范式&#xff0c;使得开发者能够更加简洁、直观地构建用户界面。在这篇博客中&#xff0c;我们将探讨如何使用Jetpack Compose中的Pager构建滑动页面。 什么是Pager&#xff1f; …

如何查看Linux是否开启了数据包转发功能

如果Linux主机有多块网卡&#xff0c;如果不开启数据包转发功能&#xff0c;则这些网卡之间是无法互通的。 如何开启数据包转发功能&#xff1a; echo 1 > /proc/sys/net/ipv4/ip_forward sysctl -w net.ipv4.ip_forward1 如何查看是否开启了数据包转发功能&#xff1a; …

Some Strategies for Reducing Write Amplification in LSM-tree

写放大原理 (6 封私信) 如何理解SSD的写放大? - 知乎 (zhihu.com) 日志结构化合并树(LSM 树) LSM 树: 与应用就地更新的传统

直播预约|漫漫用户增长之路,如何快人一手

【导读】 如何实现用户增长及提升用户活跃度是各大开发者关注的重点之一&#xff0c;日常运营过程中&#xff0c;消息推送作为一个触达用户的有效手段&#xff0c;通过恰当的时机和智能的投放模式&#xff0c;可以有效提升消息的曝光度并吸引用户点击&#xff0c;从而实现用户…

​DMBOK知识梳理for CDGA/CDGP——第十章 参考数据与主数据(附常考知识点)

第十章 参考数据与主数据 第十章在CDGA分值占比不高&#xff0c;CDGP分值占比较高&#xff0c;主要考点包括&#xff1a;定义、目标、原则、参考数据及主数据管理好处、异同点、哪些属于主数据、活动、工具、度量指标等基本概念。因此本章建议充分理解参考数据及主数据的基础概…

开放式耳机品牌推荐,热门开放式耳机大盘点!

随着生活的提升&#xff0c;越来越多小伙伴开始使用开放式耳机了&#xff0c;因为开放式耳机不入耳不伤耳的设计&#xff0c;佩戴稳固又舒适&#xff0c;还具有良好的音质和舒适的佩戴体验。下面我来给大家安利几款很不错的开放式耳机&#xff0c;来看看有哪些吧。 一、NANK南…

违反广告法被罚3万元?苹果北京公司又因买卖合同纠纷成被执行人

根据中国执行信息公开网等消息&#xff0c;苹果电子产品商贸&#xff08;北京&#xff09;有限公司最近在买卖合同纠纷方面被执行&#xff0c;执行金额为6442元&#xff0c;案件由上海市浦东新区人民法院审理&#xff0c;目前尚未获取到详细纠纷信息。 近日&#xff0c;苹果公司…

一个月学通Python(十二):Python发送电子邮件及图像办公文档处理

专栏介绍 结合自身经验和内部资料总结的Python教程&#xff0c;每天3章&#xff0c;1个月就能全方位的完成Python的学习并进行实战开发。加油吧&#xff01;卷起来&#xff01; 全部文章请访问专栏&#xff1a;《Python全栈教程&#xff08;0基础》 文章目录 专栏介绍网络应用…

在 Jetpack Compose 中使用 BottomAppBar

简介 Jetpack Compose 是一个现代化的、声明式的 UI 工具包&#xff0c;它使我们能够更方便地构建 Android 的用户界面。本篇文章将介绍如何在 Jetpack Compose 中使用 BottomAppBar 来创建底部应用栏。 什么是 BottomAppBar? BottomAppBar 是一个在屏幕底部的应用栏&#x…