feat(tls): HTTPS + wss:// для iot.kube5s.ru

- emqx-ws-ingress.yaml: TLS секция + cert-manager letsencrypt-prod, ssl-redirect=true
- router.go: CORS Allow-Origin: http → https://iot.kube5s.ru
- iot-console.html: дефолт MQTT брокера ws:// → wss://
- operator.yaml: v0.1.53 → v0.1.54
- crypto.subtle теперь работает (HTTPS страница)
This commit is contained in:
Naeel
2026-04-04 19:56:31 +03:00
parent 017312f35c
commit fb6f9d48cd
4 changed files with 24 additions and 18 deletions
+15 -9
View File
@@ -1,12 +1,13 @@
# Изменено: 2026-04-04 (iot-console: добавлен path /console → sless-operator:9090)
# ВРЕМЕННЫЙ WORKAROUND: MQTT over WebSocket через порт 443.
# Изменено: 2026-04-04 (tls: добавлен TLS + cert-manager, wss://, https://)
# WORKAROUND: MQTT over WebSocket через порт 443.
# Причина: порт 1883 заблокирован NSX-T Edge firewall на уровне облака.
# Решение: EMQX WebSocket listener (8083) проксируется через nginx-ingress.
# Решение: EMQX WebSocket listener (8083) проксируется через nginx-ingress с TLS termination.
#
# IoT устройство подключается: ws://iot.kube5s.ru/mqtt
# IoT Консоль (UI): http://iot.kube5s.ru/console
# IoT устройство подключается: wss://iot.kube5s.ru/mqtt
# IoT Консоль (UI): https://iot.kube5s.ru/console
#
# DNS A-запись: iot.kube5s.ru → 185.247.187.147 (создана через Nubes API, zoneUid=498096ee)
# TLS: cert-manager + letsencrypt-prod, secret=iot-kube5s-ru-tls
#
# Когда DevOps откроет порт 1883 — этот файл можно удалить.
---
@@ -32,14 +33,19 @@ metadata:
namespace: sless
annotations:
kubernetes.io/ingress.class: nginx
# ssl-redirect=false: IoT устройства не умеют следовать 301 редиректам при WebSocket upgrade
nginx.ingress.kubernetes.io/ssl-redirect: "false"
cert-manager.io/cluster-issuer: letsencrypt-prod
# ssl-redirect=true: принудительно HTTPS для всего трафика на iot.kube5s.ru
nginx.ingress.kubernetes.io/ssl-redirect: "true"
# WebSocket: nginx-ingress автоматически добавляет Upgrade/Connection при proxy-http-version=1.1
nginx.ingress.kubernetes.io/proxy-http-version: "1.1"
nginx.ingress.kubernetes.io/proxy-read-timeout: "3600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "3600"
spec:
ingressClassName: nginx
tls:
- hosts:
- iot.kube5s.ru
secretName: iot-kube5s-ru-tls
rules:
- host: iot.kube5s.ru
http:
@@ -53,8 +59,8 @@ spec:
port:
number: 8083
# IoT Консоль (UI) — HTML SPA встроенный в бинарник sless-operator
# URL: http://iot.kube5s.ru/console
# Почему здесь: UI работает по HTTP чтобы ws:// (без TLS) не вызывал mixed content
# URL: https://iot.kube5s.ru/console
# TLS termination на Ingress → wss:// MQTT и https:// API работают без mixed content
- path: /console
pathType: Exact
backend:
+1 -1
View File
@@ -75,7 +75,7 @@ spec:
- name: operator
# При обновлении версии оператора — менять тег здесь (не latest!)
# v0.1.50 — добавлены IoT controller, IoT REST API, MQTT auth endpoint
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.53
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.54
# Always — чтобы всегда тянуть по точному тегу (не кешировать старый)
imagePullPolicy: Always
ports: