我目前正在通过WebSocket向JS客户端提供MQTT消息。我使用RabbitMQ从Java后端在队列中写入消息,并将其路由到客户端/前端应用程序。 我将所有内容都部署在Google Cloud Platform的Kubernetes集群上,并且只要我将带有Kubernetes Load Balancer的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
我尝试用节点端口服务替换Kubernetes负载平衡器,并通过Ingress和GCP平衡器公开它,但是运行状况探测失败并且永远无法恢复。
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证书。