求助:在GKE中为EMQX Broker实现NGINX Ingress SSL终止及WSS连接
实现GKE上EMQX的WSS接入+谷歌托管证书SSL终止方案
核心思路
用GKE原生L7 Ingress配合谷歌托管证书实现SSL终止,将WSS流量转发到EMQX的WSS端口(默认8084),同时通过自定义域名暴露EMQX控制台。
步骤1:创建谷歌托管证书
先确保你的自定义域名已配置DNS解析(后续Ingress创建后会分配IP,需将域名A记录指向该IP)。创建ManagedCertificate资源:
apiVersion: networking.gke.io/v1 kind: ManagedCertificate metadata: name: emqx-cert spec: domains: - mqtt.yourdomain.com # 替换为你的自定义域名 - console.yourdomain.com # 可选,控制台单独域名
步骤2:配置EMQX Service
暴露WSS端口和控制台端口(假设EMQX Deployment已正确部署,容器端口为8084(WSS)、18083(HTTP控制台)):
apiVersion: v1 kind: Service metadata: name: emqx-service spec: type: ClusterIP ports: - name: wss port: 443 targetPort: 8084 - name: console-http port: 80 targetPort: 18083 selector: app: emqx # 替换为你的EMQX Deployment的标签
步骤3:配置GKE Ingress
关联托管证书,设置路径规则转发流量:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: emqx-ingress annotations: networking.gke.io/managed-certificates: emqx-cert kubernetes.io/ingress.class: "gce" # 指定使用GKE原生Ingress spec: rules: - host: mqtt.yourdomain.com http: paths: - path: /mqtt pathType: Prefix backend: service: name: emqx-service port: number: 443 - host: console.yourdomain.com http: paths: - path: / pathType: Prefix backend: service: name: emqx-service port: number: 80
关键说明
- WSS连接路径:客户端需使用
wss://mqtt.yourdomain.com/mqtt连接,EMQX默认WSS监听路径为/mqtt。 - 证书验证:创建Ingress后,GKE会自动完成证书颁发,可通过
kubectl describe managedcertificate emqx-cert查看状态,当Status.CertificateStatus为ACTIVE时即可使用。 - 控制台访问:通过
https://console.yourdomain.com访问EMQX控制台,Ingress会自动将HTTP转为HTTPS(谷歌托管证书强制HTTPS)。
排查常见问题
- 证书未颁发:检查域名DNS是否已指向Ingress的外部IP(可通过
kubectl get ingress emqx-ingress获取IP),确保域名解析生效。 - WSS连接失败:确认EMQX已启用WSS监听(默认开启),检查Service的targetPort是否正确指向EMQX的WSS端口(默认8084)。
- 控制台无法访问:确认EMQX控制台端口配置正确,Ingress路径规则无误。
内容的提问来源于stack exchange,提问作者Orlo
相关产品推荐
相关产品推荐

