docs: IoT telemetry storage architecture decisions and thinking log

This commit is contained in:
Naeel
2026-04-04 18:41:29 +03:00
parent b23ae40975
commit d57558c798
4 changed files with 386 additions and 13 deletions
+47 -1
View File
@@ -1597,5 +1597,51 @@ G15 перезапущен → **21/21 PASS ✅**
| 4 | nginx `client_max_body_size` ограничивает upload → 413 (не настроено явно) | G13F-4 NOTE |
### Версия оператора
`v0.1.51` — задеплоен, работает
`v0.1.52` — задеплоен, работает
---
## 2026-04-04 — IoT WebSocket workaround + MQTT ACL + Архитектура телеметрии
### Выполнено
#### MQTT WebSocket workaround (порт 1883 закрыт NSX-T)
- Создан Ingress `emqx-mqtt-websocket`: `iot.kube5s.ru/mqtt → EMQX:8083`
- DNS A-запись `iot.kube5s.ru → 185.247.187.147` создана пользователем
- Отлажена цепочка: убран `configuration-snippet` (заблокирован в nginx v1.12.6),
добавлен `ssl-redirect: false`, `pathType: Exact`
- Тест: `Connected rc=0` через paho-mqtt WebSocket ✅
- Коммит: `6e3e473` (ветка Ioter)
#### MQTT ACL изоляция топиков
- Найдена уязвимость: `authorization { no_match = allow }` — любой клиент мог
читать топики других клиентов после успешного CONNECT
- EMQX 5.x: ACL в ответе auth игнорируется (это EMQX 4.x фича)
- Добавлен endpoint `POST /internal/mqtt/acl` в sless-operator
- Обновлён `emqx.conf`: HTTP authorization backend, `no_match = deny`
- Тест: `sless/iot-bridge/#` → ALLOWED, `sless/other-device/telemetry` → DENIED + disconnect
- Лог EMQX: `authorization_permission_denied` ✅
- Оператор v0.1.52 задеплоен
- Коммит: `b23ae40` (ветка Ioter)
### Архитектурные решения (обсуждение, не реализовано)
Принято решение о хранении IoT телеметрии:
- Отдельная DATABASE per tenant в одном Postgres инстансе
- REST API для доступа (не прямой доступ к Postgres)
- JSONB payload (разные данные у разных клиентов)
- Отдельный iot-operator независимо от sless-operator
- schema.sql при деплое функции
- DB_DSN в env var функции
Подробно: `doc/decisions/iot-telemetry-storage-2026-04-04.md`
### Следующий этап (ветка iot-pg-telemetry)
- [ ] Postgres StatefulSet в namespace `iot`
- [ ] Provisioning БД при создании tenant
- [ ] INSERT telemetry из iot-mqtt-bridge
- [ ] REST API чтения телеметрии
- [ ] DB_DSN в function pod env
- [ ] schema.sql при деплое функции