aegida-console / k8s / README.md
README.md
Raw

Kubernetes: AI Control Chat

Манифесты разворачивают corp-ui, PostgreSQL и MinIO для чтения legacy-вложений в namespace aegida-services. Новые загрузки идут в Aegida Gate Files API; локальный MinIO можно удалить только после миграции/retention всех строк с object_key и отдельного удаления bucket bootstrap из entrypoint.

До запуска должны существовать:

  • user-service.aegida-services.svc.cluster.local:8080;
  • aegida-gate.aegida-services.svc.cluster.local:8080.

Gate должен использовать JWT_ISSUER=corp-ui, JWT_AUDIENCE=aegida-gate и JWT_HS256_SECRET, совпадающий с JWT_SECRET из ai-control-chat-secrets. AEGIDA_TENANT_ID в ConfigMap определяет claim tenant_id.

minikube image build \
  --build-opt build-arg=NEXT_PUBLIC_APP_URL=https://chat.aegida.test:8443 \
  -t ai-control-chat-ui:minikube \
  .
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/config.yaml
kubectl apply -f k8s/postgres.yaml
kubectl apply -f k8s/minio.yaml
kubectl apply -f k8s/app.yaml

Общий HTTPS Ingress

При совместном развёртывании с aegida-admin-ui корпоративный интерфейс доступен по https://chat.aegida.test:8443. Общий Ingress и локальный TLS-мост управляются из соседнего репозитория aegida-admin-ui.

Его deploy-helper собирает этот образ с указанным выше build argument и изменяет только поле NEXT_PUBLIC_APP_URL в существующем ConfigMap. Он намеренно не применяет второй документ ai-control-chat-secrets из k8s/config.yaml, поэтому действующие значения Secret сохраняются.

Постоянный доступ с macOS

UI остаётся приватным ClusterIP Service. На macOS с Docker-драйвером Minikube постоянный адрес http://127.0.0.1:3000 поддерживает per-user LaunchAgent:

mkdir -p "$HOME/Library/LaunchAgents"
install -m 0644 ops/macos/com.aegida.corp-ui-port-forward.plist \
  "$HOME/Library/LaunchAgents/com.aegida.corp-ui-port-forward.plist"
launchctl bootstrap "gui/$(id -u)" \
  "$HOME/Library/LaunchAgents/com.aegida.corp-ui-port-forward.plist"
launchctl kickstart -k "gui/$(id -u)/com.aegida.corp-ui-port-forward"

Статус и health-check:

launchctl print "gui/$(id -u)/com.aegida.corp-ui-port-forward"
curl --fail-with-body http://127.0.0.1:3000/api/health

Логи:

tail -n 100 /tmp/aegida-corp-ui-port-forward.stdout.log
tail -n 100 /tmp/aegida-corp-ui-port-forward.stderr.log

Перезапуск:

launchctl kickstart -k "gui/$(id -u)/com.aegida.corp-ui-port-forward"

Отключение и удаление установленного LaunchAgent:

launchctl bootout "gui/$(id -u)" \
  "$HOME/Library/LaunchAgents/com.aegida.corp-ui-port-forward.plist"
rm "$HOME/Library/LaunchAgents/com.aegida.corp-ui-port-forward.plist"

Перед установкой освободите порт 3000 только после проверки владельца процесса. Не используйте pkill, killall или принудительный сигнал.

Checked-in Secret содержит только development-значения. Замените все секреты вне локального кластера и согласуйте JWT secret с Gate.

Проверка без изменения состояния кластера:

kubectl apply --dry-run=client -f k8s/namespace.yaml
kubectl apply --dry-run=client -f k8s/config.yaml
kubectl apply --dry-run=client -f k8s/postgres.yaml
kubectl apply --dry-run=client -f k8s/minio.yaml
kubectl apply --dry-run=client -f k8s/app.yaml