В настоящее время я отправляю сообщения MQTT через WebSocket клиентам js. Я использую RabbitMQ для записи сообщений в очередь из бэкэнда Java и их перенаправления в клиентские / внешние приложения. Я развернул все в кластере Kubernetes на Google Cloud Platform, и все работает отлично, пока я публикую модуль RabbitMQ с балансировщиком нагрузки Kubernetes непосредственно в Интернете.
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балансировщик с помощью службы порта Node и выставить его через 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 и дажетрюк переключение GCP с помощью зонда, который указывает на другой порт HTTP в том же модуле, но безуспешно.
Мне нужно, чтобы пользователь GCP Balancer имел единый интерфейс для назначения SSL-сертификата для протоколов HTTPS и WSS.