You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes下通过haproxy-ingress实现Vernemq 1883端口SSL终止问询

VerneMQ + HAProxy Ingress SSL 终止配置方案

前置要求

  • 已签发目标子域名(示例用mqtt.yourdomain.com)的SSL证书,已创建为K8s TLS类型Secret,建议将Secret存在HAProxy Ingress所在命名空间,减少权限配置
  • HAProxy Ingress控制器已正常部署,支持TCP服务暴露(默认官方部署包已开启该能力)
  • VerneMQ已在集群内部署完成,1883明文端口已通过ClusterIP服务正常暴露,示例中服务名为vernemq,部署在mqtt命名空间

配置步骤

1. 配置TCP服务映射

MQTT是四层TCP协议,无法直接通过七层Ingress资源配置,需要通过HAProxy Ingress的TCP服务ConfigMap做映射,实现SSL终止和流量转发:

如果你修改过HAProxy Ingress的默认TCP配置源,对应替换ConfigMap名称和命名空间即可,默认配置读取haproxy-ingress命名空间下的tcp-servicesConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: haproxy-ingress
data:
  # 配置格式:<对外端口>: <服务命名空间>/<服务名>:<服务端口>:::<SSL证书Secret名称>
  "8883": "mqtt/vernemq:1883:::mqtt-yourdomain-com-tls"

该配置会让HAProxy在8883端口监听加密MQTT请求,完成SSL解密后,将明文流量转发到后端VerneMQ的1883端口,完全符合你要求的SSL终止逻辑。

2. 开放HAProxy Ingress的8883端口

修改HAProxy Ingress的Service配置,新增8883端口的对外映射,示例(LoadBalancer类型Service):

apiVersion: v1
kind: Service
metadata:
  name: haproxy-ingress
  namespace: haproxy-ingress
spec:
  type: LoadBalancer
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https
    # 新增MQTT SSL端口
    - name: mqtt-ssl
      port: 8883
      targetPort: 8883
  selector:
    app.kubernetes.io/name: haproxy-ingress

配置完成后,将你的子域名解析到该Service的公网IP即可。

3. 验证配置

用MQTT客户端工具直接测试连通性,示例用mosquitto客户端:
mosquitto_pub -h mqtt.yourdomain.com -p 8883 -t test/topic -m "testmsg"
如果使用自签证书,加上--cafile 你的根证书路径参数即可,连接成功即代表配置生效,此时VerneMQ侧收到的是来自HAProxy的明文1883端口请求。

可选:支持WSS协议访问

如果需要同时支持网页端的WSS协议访问,额外配置七层Ingress即可:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: vernemq-wss
  namespace: mqtt
  annotations:
    kubernetes.io/ingress.class: "haproxy"
spec:
  tls:
  - hosts:
    - mqtt.yourdomain.com
    secretName: mqtt-yourdomain-com-tls
  rules:
  - host: mqtt.yourdomain.com
    http:
      paths:
      - path: /mqtt
        pathType: Prefix
        backend:
          service:
            name: vernemq
            port:
              number: 8080 # VerneMQ默认的WS协议监听端口

配置后可通过wss://mqtt.yourdomain.com/mqtt访问,SSL同样在HAProxy侧完成终止。

内容的提问来源于stack exchange,提问作者William

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:36:03