feat(iot): деплой IoT MVP — Dockerfile, RBAC, EMQX fix, operator v0.1.50, mqtt-bridge, doc/iot

This commit is contained in:
Naeel
2026-04-04 10:29:47 +03:00
parent b920dc5c9d
commit 857d057af9
9 changed files with 471 additions and 26 deletions
+9
View File
@@ -31,6 +31,15 @@ data:
## EMQX 5.x configuration (HOCON format)
## Изменено: 2026-04-04
## Обязательные поля node — без них EMQX 5.x падает при старте
## node.cookie — секрет кластерного Erlang-соединения, для single-node любая строка
## node.data_dir — директория данных (mnesia, конфиги), должна существовать в контейнере
node {
name = "emqx@127.0.0.1"
cookie = "sless-emqx-cookie-mvp"
data_dir = "/opt/emqx/data"
}
## HTTP Auth Backend для IoT-устройств
## EMQX посылает POST с {username, password, clientid} → наш сервис отвечает {"result":"allow"|"deny"}
authentication = [
+3 -2
View File
@@ -42,8 +42,9 @@ spec:
spec:
containers:
- name: mqtt-bridge
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:latest
# TODO: отдельный образ iot-mqtt-bridge После сборки через Makefile
# Тот же образ что и оператор — оба бинаря в одном слое (manager + iot-mqtt-bridge).
# При смене версии оператора — менять тег и здесь.
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.50
imagePullPolicy: Always
command: ["/iot-mqtt-bridge"]
env:
+2 -1
View File
@@ -74,7 +74,8 @@ spec:
containers:
- name: operator
# При обновлении версии оператора — менять тег здесь (не latest!)
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.49
# v0.1.50 — добавлены IoT controller, IoT REST API, MQTT auth endpoint
image: pearlharbor.registryk8s.services.ngcloud.ru/naeel/sless-operator:v0.1.50
# Always — чтобы всегда тянуть по точному тегу (не кешировать старый)
imagePullPolicy: Always
ports:
+13 -2
View File
@@ -1,4 +1,4 @@
# Изменено: 2026-03-20 (добавлен Service CRD sless.kube5s.ru — services + status + finalizers)
# Изменено: 2026-04-04 — добавлены IoT CRD права (iot.kube5s.ru)
# RBAC для sless оператора.
# ServiceAccount + ClusterRole + ClusterRoleBinding.
# ClusterRole нужен (не namespaced Role) потому что оператор создаёт
@@ -15,7 +15,7 @@ kind: ClusterRole
metadata:
name: sless-operator
rules:
# Наши CRD
# Наши CRD (sless.kube5s.ru)
- apiGroups: ["sless.kube5s.ru"]
resources: ["functions", "triggers", "functionjobs", "services"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
@@ -25,6 +25,17 @@ rules:
- apiGroups: ["sless.kube5s.ru"]
resources: ["functions/finalizers", "triggers/finalizers", "functionjobs/finalizers", "services/finalizers"]
verbs: ["update"]
# IoT CRD (iot.kube5s.ru) — IoTDevice lifecycle + Secret генерация в контроллере
# Права нужны во всех namespace где пользователи создают IoT-устройства
- apiGroups: ["iot.kube5s.ru"]
resources: ["iotdevices"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- apiGroups: ["iot.kube5s.ru"]
resources: ["iotdevices/status"]
verbs: ["get", "update", "patch"]
- apiGroups: ["iot.kube5s.ru"]
resources: ["iotdevices/finalizers"]
verbs: ["update"]
# Deployments для функций
- apiGroups: ["apps"]
resources: ["deployments"]