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-test— namespace внутри реестра (для тестовых версий)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 Operatork8s/,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. Следующие шаги (для нового чата)
- Прочитать
~/tf_registry/server/main.go(весь) — понять точную логику - Написать
app.py— Flask-реестр с теми же эндпоинтами - Проверить синтаксис Python
- Создать ветку
golangизmasterи сохранить Go-код - Очистить
master, оставить только Flask - Залить
app.pyв managed-сервисregistryчерез UI облака - Проверить:
curl https://registry.pythonk8s.dev.nubes.ru/.well-known/terraform.json - Обновить
sourceв Terraform-конфигах пользователей