kubernetes - 在 Kubernates GCP 环境中通过 WebSocket 服务 MQTT
问题描述
我目前正在通过 WebSocket 向 js 客户端提供 MQTT 消息。我使用 RabbitMQ 从 java 后端将消息写入队列,并将它们路由到客户端/前端应用程序。我在 Google Cloud Platform 上的 Kubernetes 集群上部署了所有内容,只要我将带有 Kubernetes 负载均衡器的 RabbitMQ pod 直接发布到互联网,一切都可以正常工作。
apiVersion: v1
kind: Service
metadata:
labels:
app: rabbitmq
name: rabbitmq
spec:
type: LoadBalancer
ports:
- name: http-manager
nodePort: 30019
port: 80
protocol: TCP
targetPort: 15672
- name: mqtt-broker
nodePort: 31571
port: 1883
protocol: TCP
targetPort: 1883
- name: ws-service
nodePort: 32048
port: 15675
protocol: TCP
targetPort: 15675
selector:
app: rabbitmq
我尝试用 Node 端口服务替换 Kubernetes 负载均衡器,并通过 Ingress 和 GCP Balancer 公开它,但运行状况探测失败并且永远无法恢复。
apiVersion: v1
kind: Service
metadata:
labels:
app: rabbitmq
name: rabbitmq-internal
spec:
ports:
- name: ws-port
port: 15675
protocol: TCP
targetPort: 15675
- name: mamanger-port
port: 15672
protocol: TCP
targetPort: 15672
selector:
app: rabbitmq
sessionAffinity: None
type: NodePort
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: basictest
namespace: default
spec:
rules:
- host: mqtt-host.dom.cloud
http:
paths:
- backend:
serviceName: rabbitmq-internal
servicePort: 15675
path: /ws/*
- backend:
serviceName: rabbitmq-internal
servicePort: 15672
path: /*
探针是 HTTP,因此我尝试分配自定义 TCP 探针,甚至使用指向同一 pod 上的另一个 HTTP 端口的探针来欺骗 GCP 切换,但没有成功。
我需要使用 GCP Balancer 来拥有一个统一的前端来为 HTTPS 和 WSS 协议分配 SSL 证书。
解决方案
推荐阅读
- php - 无法打开 QEMU 管道 'qemud:network':参数无效
- php - PHP 文件缓存触发内部 307 == 不安全警告
- r - Rcpp 使用外部和 pmax
- c++ - 类/结构内外的模板参数
- scala - 从案例类的 Seq 生成单个案例类
- ruby-on-rails - 如何在rails中使用有很多条件
- qt - 使用控制 + 加号和控制 - 减号进行缩放?
- python - 基于使用 Seaborn 或 Matplotlib 的两个不同 pandas DataFrame(具有相同结构)的记录的子图
- c++ - 如何使用 Win32 为 MDI 应用程序的标题设置文本颜色?
- node.js - 在 MongoDB 中保存纳秒时间戳(由 Go 生成,使用 Node.js 保存)