“Naeel”
a4fe253768
docs(thinking): update session log with UI deployment and shared-SQS repo creation
2026-04-09 18:25:49 +03:00
Naeel
65dea8aa6b
shared-sqs: doc thinking — итог сессии 2 (этапы 4-8)
2026-04-09 13:17:42 +03:00
Naeel
d1d1bffd7c
v0.1.13: Strategy Recreate + preStop + liveness fix (ERR-SQS-06 root cause)
...
- ensureDeployment: Strategy Recreate (not RollingUpdate) — prevents H2 file lock
when two pods mount same PVC simultaneously during rollout restart
- preStop: sleep 3 — graceful H2 shutdown before SIGTERM
- livenessProbe timeoutSeconds: 3 — prevents false positive on GC pause
- terminationGracePeriodSeconds: 15
- doc: thinking log, ERR-SQS-06, progress.md, architecture SVG schema
2026-04-09 07:49:11 +03:00
Naeel
6b7b60db1b
doc: sqs-operator v0.1.7-v0.1.12 — UI fixes, errors, thinking log 2026-04-08
2026-04-09 06:25:38 +03:00
Naeel
c4efc5c960
sqs-operator: docs + third test results (41 PASS, 0 OOM, 0 infra errors)
2026-04-07 20:44:56 +03:00
Naeel
18e57cadc7
test(sqs-operator): полный тест-сьют 30мин — результаты + 2 новых бага (MT03, SH02)
2026-04-07 16:54:42 +03:00
Naeel
66dcd99465
refactor(sqs-operator): переделка через Operator SDK v1.37.0
...
- operator-sdk init + create api (QueueService kind, group sqs, v1alpha1)
- Стандартная kubebuilder структура: cmd/, internal/controller/, config/
- CRD types с kubebuilder маркерами (validation, defaults, printcolumns)
- Reconciler перенесён из ручного кода в internal/controller/
- controller-gen v0.17.0 (совместимость с Go 1.26.1)
- Автогенерация: deepcopy, CRD YAML, RBAC ClusterRole
- Удалены все ручные файлы (controllers/, main.go, deployments/)
2026-04-07 14:25:14 +03:00
Naeel
a22a37bef3
doc: SQS Operator plan — ElasticMQ per-tenant, 10 этапов
2026-04-07 13:24:40 +03:00
Naeel
69451007f6
test: re-test v0.1.69 — все 8 тестов PASS, 1000/1000 при нагрузке
2026-04-06 18:45:57 +03:00
Naeel
387932ce10
fix: bridge Kafka write async (v0.1.69) — MQTT callback не блокируется
2026-04-06 18:26:03 +03:00
Naeel
c0a08ae78d
test: полное суровое тестирование IoT pipeline — 7 сценариев, 4 критических находки
2026-04-06 18:14:50 +03:00
Naeel
815b861417
docs: Kafka pipeline v0.1.68 — полная документация, race condition fix, тесты
2026-04-06 17:42:44 +03:00
Naeel
e46a8bb3e3
doc: 2026-04-06 thinking log + kafka integration plan
2026-04-06 16:03:57 +03:00
Naeel
184f5ceb91
doc: session 2026-04-05 thinking log + progress update (v0.1.66, incident)
2026-04-05 17:37:38 +03:00
Naeel
36789d6da2
doc: MQTTX Web подключение работает через wss://iot.kube5s.ru/mqtt
2026-04-05 10:14:18 +03:00
Naeel
661218bb73
doc: session 2026-04-05 — autoTimer fix deploy, progress и thinking log
2026-04-05 09:53:11 +03:00
Naeel
d51e33d876
doc: detailed telemetry pipeline plan for Sonnet (Postgres + REST API + UI)
2026-04-05 08:27:53 +03:00
Naeel
d078d3156f
doc(thinking): лог сессии 2026-04-04 — TLS, UX, Nubes rebrand
...
- Разбор проблемы crypto.subtle (HTTP → HTTPS)
- Проблема 404 после apply (Docker layer cache)
- Убраны поля API/MQTT из формы входа
- Ребрендинг Nubes: палитра #001C34, логотип SVG, favicon
- Таблица версий v0.1.54–v0.1.58 с коммитами
2026-04-04 20:39:51 +03:00
Naeel
b48c300ac5
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
2026-04-04 19:28:30 +03:00
Naeel
d57558c798
docs: IoT telemetry storage architecture decisions and thinking log
2026-04-04 18:41:29 +03:00
Naeel
b23ae40975
security(iot): MQTT ACL isolation via EMQX HTTP authorization
...
Each IoT device can only pub/sub to its own topics: {namespace}/{deviceId}/#
Any attempt to access foreign topics → EMQX denies and disconnects.
Changes:
- internal/api/handler: add MQTTAcl handler (POST /internal/mqtt/acl)
- internal/api/router: register /internal/mqtt/acl route
- deployments/k8s/emqx.yaml: add HTTP authorization backend, no_match=deny
- Operator v0.1.52 deployed
Tested: own topic ALLOWED, foreign topic → authorization_permission_denied + disconnect
2026-04-04 17:51:51 +03:00
Naeel
6e3e473551
feat(iot): MQTT over WebSocket workaround via nginx-ingress
...
Port 1883 blocked by NSX-T Edge firewall (DevOps to open on Monday).
Temporary solution: EMQX WebSocket listener (8083) via nginx-ingress.
- Service emqx-ws: selector app=emqx, port 8083
- Ingress emqx-mqtt-websocket: iot.kube5s.ru/mqtt → emqx-ws:8083
- pathType: Exact (prevents trailing slash redirect breaking WS handshake)
- ssl-redirect: false (IoT devices cannot follow HTTP 301 redirects)
- DNS A record iot.kube5s.ru → 185.247.187.147 created by user
Tested: Connected rc=0 via paho-mqtt WebSocket from inside cluster.
2026-04-04 14:06:17 +03:00
Naeel
857d057af9
feat(iot): деплой IoT MVP — Dockerfile, RBAC, EMQX fix, operator v0.1.50, mqtt-bridge, doc/iot
2026-04-04 10:29:47 +03:00
Naeel
1e53766c46
feat(iot): Этапы 2-7 — MQTT auth, IoT API, EMQX, mqtt-bridge, E2E demo
...
Этап 2+4: internal/api/handler/iot_device_handler.go
- MQTTAuth: POST /internal/mqtt/auth (без JWT, для EMQX)
- CreateIoTDevice, ListIoTDevices, GetIoTDevice (c password), DeleteIoTDevice, UpdateIoTDevice
- crypto/subtle.ConstantTimeCompare против timing attacks
Этап 4: internal/api/router.go
- /v1/namespaces/{ns}/iot/devices CRUD
- /internal/mqtt/auth (без JWT middleware)
Этап 3: deployments/k8s/emqx.yaml
- EMQX 5.5.1, emqx.conf (HOCON) с HTTP auth backend
- Сервис exposure: 1883 (MQTT), 8083 (WS), 18083 (Dashboard)
Этап 3: iot/cmd/mqtt-bridge/main.go
- paho.mqtt.golang: подписка на +/telemetry/+
- amqp091-go: publish в iot.{namespace}.telemetry
- deployments/k8s/iot-mqtt-bridge.yaml
Этап 7: examples/IOT/ — E2E demo (main.tf, handler.py, README.md)
go.mod: добавлен github.com/eclipse/paho.mqtt.golang v1.5.1
go build ./... — ошибок нет
2026-04-04 09:45:23 +03:00
Naeel
716efafda8
feat(iot): Этап 1 — CRD IoTDevice + контроллер credentials
...
- iot/api/v1alpha1/device_types.go — CRD IoTDevice
- iot/api/v1alpha1/groupversion_info.go — API group iot.kube5s.ru/v1alpha1
- iot/api/v1alpha1/zz_generated.deepcopy.go — deepcopy (controller-gen)
- iot/config/crd/bases/iot.kube5s.ru_iotdevices.yaml — CRD манифест
- iot/controllers/iotdevice_controller.go — Reconcile: Secret с MQTT credentials
- main.go — регистрация IoT схемы и IoTDeviceReconciler
go build ./... — ошибок нет
2026-04-04 09:32:47 +03:00
Repinoid
6dc2dc69ba
IoT MVP: архитектура, план реализации, лог рассуждений
...
- Определена архитектура managed IoT service
- Согласовано решение: RabbitMQ (MVP), потом Kafka; EMQX + CRD контроллер
- Создан подробный план для Sonnet (doc/iot-mvp-plan.md)
- Добавлено правило в copilot-instructions: лог мышления в doc/thinking/ по датам
- Полный ход рассуждений в doc/thinking/2026-04-04.md
Ключевые решения:
- IoT код в iot/ (легко вынести потом)
- CRD IoTDevice + контроллер (как все остальное в sless)
- EMQX HTTP Auth Backend для динамической аутентификации устройств
- Архитектура broker-agnostic (легко переключить на Kafka)
- Terraform: расширяем текущий provider (sless_iot_device ресурс)
2026-04-04 08:34:14 +03:00