feat(iot-console): IoT управляющий UI v0.1.53

- Добавлен HTML SPA: internal/api/ui/iot-console.html
  Ванильный JS + mqtt.js (CDN), без фреймворков.
  Страницы: вход, список устройств, credentials, эмулятор MQTT, заглушка телеметрии.
- Добавлен go:embed: internal/api/console_embed.go, GET /console
- Добавлен CORS middleware в router.go для http://iot.kube5s.ru
- Ingress emqx-ws-ingress.yaml: /console → sless-operator:9090
- Версия образа v0.1.53, задеплоен

Доступно: http://iot.kube5s.ru/console
This commit is contained in:
Naeel
2026-04-04 19:28:30 +03:00
parent d57558c798
commit b48c300ac5
7 changed files with 1104 additions and 11 deletions
+14 -1
View File
@@ -1,9 +1,11 @@
# Создано: 2026-04-04
# Изменено: 2026-04-04 (iot-console: добавлен path /console → sless-operator:9090)
# ВРЕМЕННЫЙ WORKAROUND: MQTT over WebSocket через порт 443.
# Причина: порт 1883 заблокирован NSX-T Edge firewall на уровне облака.
# Решение: EMQX WebSocket listener (8083) проксируется через nginx-ingress.
#
# IoT устройство подключается: ws://iot.kube5s.ru/mqtt
# IoT Консоль (UI): http://iot.kube5s.ru/console
#
# DNS A-запись: iot.kube5s.ru → 185.247.187.147 (создана через Nubes API, zoneUid=498096ee)
#
# Когда DevOps откроет порт 1883 — этот файл можно удалить.
@@ -42,6 +44,7 @@ spec:
- host: iot.kube5s.ru
http:
paths:
# MQTT over WebSocket — для подключения IoT устройств и браузерного эмулятора
- path: /mqtt
pathType: Exact
backend:
@@ -49,3 +52,13 @@ spec:
name: emqx-ws
port:
number: 8083
# IoT Консоль (UI) — HTML SPA встроенный в бинарник sless-operator
# URL: http://iot.kube5s.ru/console
# Почему здесь: UI работает по HTTP чтобы ws:// (без TLS) не вызывал mixed content
- path: /console
pathType: Exact
backend:
service:
name: sless-operator
port:
number: 9090
+1 -1
View File
@@ -44,7 +44,7 @@ spec:
- name: mqtt-bridge
# Тот же образ что и оператор — оба бинаря в одном слое (manager + iot-mqtt-bridge).
# При смене версии оператора — менять тег и здесь.
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.50
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.53
imagePullPolicy: Always
command: ["/iot-mqtt-bridge"]
env:
+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.50
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.53
# Always — чтобы всегда тянуть по точному тегу (не кешировать старый)
imagePullPolicy: Always
ports: