通过 LoadBalancer 访问 EMQX 集群
目标
通过 LoadBalancer 类型的 Service 访问 EMQX 集群。
配置 EMQX 集群
EMQX CRD apps.emqx.io/v3beta1 支持:
- 通过
.spec.dashboardServiceTemplate配置 EMQX Dashboard Service。 - 通过
.spec.listenersServiceTemplate配置 EMQX 集群监听器 Service。
有关字段说明,请参阅 v3beta1 API 参考中的 EMQX。
将以下内容保存为 YAML 文件,并使用
kubectl apply部署。yamlapiVersion: apps.emqx.io/v3beta1 kind: EMQX metadata: name: emqx spec: image: emqx/emqx:6.3.2 config: roots: license: key: "..." listenersServiceTemplate: spec: type: LoadBalancer dashboardServiceTemplate: spec: type: LoadBalancerTIP
默认情况下,EMQX 在端口 1883 上启动 MQTT TCP 监听器
tcp-default,并在端口 18083 上启动 Dashboard HTTP 监听器。可以通过
.spec.config.roots.listeners配置新监听器或现有监听器,也可以通过 EMQX Dashboard 管理监听器。EMQX Operator 会自动在 Service 资源中反映默认监听器信息。当用户配置的 Service 与 EMQX 配置的监听器发生冲突时(名称或端口字段重复),EMQX Operator 会优先使用用户配置。
等待 EMQX 集群就绪。
使用
kubectl get检查 EMQX 集群状态,并确保STATUS为Ready。此过程可能需要一些时间。bash$ kubectl get emqx emqx NAME STATUS AGE emqx Ready 10m
通过 EMQX Dashboard 添加新监听器
添加新监听器。
打开 EMQX Dashboard,进入管理 -> 监听器。
点击添加监听器,添加一个名为
test、端口为1884的监听器,如下图所示:
点击添加创建监听器。如下图所示,新监听器已创建。

检查新监听器是否已反映在 Service 中。
bashkubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE emqx-dashboard NodePort 10.105.110.235 <none> 18083:32012/TCP 13m emqx-listeners NodePort 10.106.1.58 <none> 1883:32010/TCP,1884:30763/TCP 12m输出表明,新添加的端口 1884 监听器已反映在
emqx-listenersService 资源中。
使用 MQTTX 连接到新监听器
获取 EMQX 监听器 Service 的外部 IP 地址。
bashexternal_ip=$(kubectl get svc emqx-listeners -o json | jq -r '.status.loadBalancer.ingress[0].ip')使用 MQTTX CLI 连接到新监听器。
bash$ mqttx conn -h ${external_ip} -p 1884 [4/17/2023] [5:17:31 PM] › … Connecting... [4/17/2023] [5:17:31 PM] › ✔ Connected