docs: add chat summary 2026-08-06
This commit is contained in:
@@ -0,0 +1,199 @@
|
|||||||
|
# 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-конфиг (как у пользователя)**:
|
||||||
|
```hcl
|
||||||
|
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 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-конфиг пользователя после миграции:
|
||||||
|
```hcl
|
||||||
|
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-конфигах пользователей
|
||||||
Reference in New Issue
Block a user