在Kubernates GCP环境中通过WebSocket服务MQTT

时间:2019-10-18 08:51:43

标签: kubernetes websocket google-cloud-platform google-kubernetes-engine kubernetes-ingress

我目前正在通过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证书。

0 个答案:

没有答案