Files
tf_registry/HISTORY/CHAT_SUMMARY_2026-08-06.md
T

8.0 KiB

Chat Summary — Реестр Terraform-провайдера Nubes

Дата: 2026-08-06
Тема: Разбор архитектуры registry-сервера, план переноса с Go/K8s на Flask managed-сервис в облаке
Для нового чата: прочитай этот файл — и ты в контексте


1. Что такое провайдер nubes

Кастомный Terraform-провайдер для облака NGCloud. Написан на Go (~/tf_provider/provider/main.go). Публикуется в собственном реестре registry.kube5s.ru.

Terraform-конфиг (как у пользователя):

terraform {
  required_providers {
    nubes = {
      source  = "registry.kube5s.ru/nubes-test/nubes"
      version = "5.1.16"
    }
  }
}

provider "nubes" {
  api_token    = var.api_token
  api_endpoint = "https://lk-api-gateway-test.ngcloud.ru/api/v1/svc"
  # log_level  = "debug"   # none | info | debug
}

Разбор адреса registry.kube5s.ru/nubes-test/nubes:

  • registry.kube5s.ru — домен реестра (DNS пользователя → IP балансировщика K8s)
  • nubes-testnamespace внутри реестра (для тестовых версий)
  • nubes — имя провайдера

Namespace'ы реестра:

Namespace Где используется
nubes-test Тестовый стенд
nubes-dev Dev-стенд
nubes Прод (PROD)

2. Где и как запущен реестр (текущее состояние)

Подтверждено через SSH → ВМ → kubectl:

  • ВМ: naeel@5.172.178.213 (ключ ~/remote_dev/terraform/secrets/id_ed25519.txt, или по умолчанию из ~/.ssh)
  • Кластер: iot-naeel (self-managed K8s, личный кластер пользователя)
  • Namespace: terra

Деплойменты:

Компонент Образ Статус
registry-server naeel/terraform-registry-server:gpg-fix-2 1/1 Running
terraform-operator naeel/terraform-registry-operator:latest 1/1 Running
cloud-dashboard naeel/cloud-dashboard:v9.52 1/1 Running

Ingress registry-ingress:

  • Хосты: terra.k8c.ru, registry.kube5s.ru
  • TLS: registry-kube5s-tls (Ready)
  • Балансировщик: 185.247.187.151

ENV registry-server:

REGISTRY_HOSTNAME = registry.kube5s.ru
S3_ENDPOINT       = s3.msk-1.ngcloud.ru
S3_BUCKET         = terraform-registry
S3_USE_SSL        = true

Проверка живого реестра (HTTP 200):

GET /.well-known/terraform.json → {"providers.v1":"/v1/providers/"}
GET /v1/providers/nubes-test/nubes/versions → версии 5.1.0 ... 5.1.16

3. Код реестра — ~/tf_registry

  • Репозиторий: https://gitea.services.ngcloud.ru/Nail/tf_registry.git
  • Ветка: master
  • Язык: Go
  • Структура:
    • server/main.goактуальный код HTTP-сервера реестра
    • operator/ — Kubernetes Operator
    • k8s/, charts/ — манифесты деплоя
    • registrykeys/ — GPG-ключ

Архитектура текущего реестра:

registry.kube5s.ru (DNS)
   → K8s Ingress (личный кластер iot-naeel)
   → Deployment registry-server (Go, Docker)
   → S3 bucket terraform-registry/
      └── {REGISTRY_HOSTNAME}/nubes-test/nubes/{version}/
           ├── terraform-provider-nubes_{version}_{os}_{arch}.zip
           ├── ..._SHA256SUMS
           └── ..._SHA256SUMS.sig

Протокол (Terraform Registry Protocol v1):

Эндпоинт Назначение
GET /.well-known/terraform.json Discovery
GET /v1/providers/{ns}/{name}/versions Список версий и платформ
GET /v1/providers/{ns}/{name}/{ver}/download/{os}/{arch} URL для скачивания
GET /v1/proxy?url=... Прокси из S3
GET /docs/... Документация

4. План: перенос реестра на Flask (managed-сервис в облаке)

Проблема:

Кубер — личный кластер пользователя. Реестр должен быть чисто облачным, как managed-сервис (Flask или Node.js), который создаётся через UI облака.

Выбор языка: Flask (Python)

  • boto3 — лучший S3-клиент
  • Уже есть работающий Flask managed-сервис (tfflaskcrud/)
  • Проще и короче, чем Node.js для этой задачи

Новая архитектура:

registry.pythonk8s.dev.nubes.ru (managed-сервис, URL даёт облако)
   → Flask app (app.py)
   → S3 bucket terraform-registry/ (тот же)

Что больше НЕ нужно:

  • K8s-деплой registry-server
  • K8s Ingress registry-ingress
  • Сертификат registry-kube5s-tls + cert-manager
  • Домен registry.kube5s.ru (заменяется на managed URL)
  • Docker-образы для реестра
  • Go-код для реестра

План реорганизации Git-репозитория:

git checkout -b golang          # сохранить Go-код в ветку golang
git checkout master             # вернуться в master
# удалить всё лишнее
# оставить только app.py + requirements.txt + README.md
  • master → Flask-реестр (основная ветка)
  • golang → старый Go-код (архив, можно поправить и задеплоить при необходимости)

Имя managed-сервиса: registry

https://registry.pythonk8s.dev.nubes.ru/

Terraform-конфиг пользователя после миграции:

source = "registry.pythonk8s.dev.nubes.ru/nubes-test/nubes"

Файлы Flask-реестра:

tf_registry/
├── app.py              # весь код (~300 строк)
├── requirements.txt    # Flask, boto3, python-gnupg
└── README.md

5. Managed-сервисы в облаке

Пользовательские managed-сервисы (Flask, Node.js, Lucee) создаются через UI облака (не через Terraform). Terraform-провайдер nubes тоже умеет их создавать (nubes_flask, nubes_nodejs, nubes_lucee), но это вторичный способ.


6. Ключевые файлы и репозитории

Что Путь
Код registry-сервера (Go) ~/tf_registry/server/main.go
Код провайдера (Go) ~/tf_provider/provider/main.go
Git реестра https://gitea.services.ngcloud.ru/Nail/tf_registry.git
Пример Flask managed-сервиса ~/tf_provider/tfflaskcrud/site/app.py
Пример Node.js managed-сервиса ~/tf_provider/tfnodejscrud/server.js
SSH-доступ к ВМ naeel@5.172.178.213
Кластер iot-naeel, namespace terra

7. Следующие шаги (для нового чата)

  1. Прочитать ~/tf_registry/server/main.go (весь) — понять точную логику
  2. Написать app.py — Flask-реестр с теми же эндпоинтами
  3. Проверить синтаксис Python
  4. Создать ветку golang из master и сохранить Go-код
  5. Очистить master, оставить только Flask
  6. Залить app.py в managed-сервис registry через UI облака
  7. Проверить: curl https://registry.pythonk8s.dev.nubes.ru/.well-known/terraform.json
  8. Обновить source в Terraform-конфигах пользователей