docs: enhance EvoBGP architecture plan with new risk mitigation strategies, testing matrix for BIRD2, and CI/CD workflow details. Updated section titles for clarity and added completed todos for deployment practices.
This commit is contained in:
@@ -26,6 +26,15 @@ todos:
|
||||
- id: replica-bundle
|
||||
content: Подписанный бандл ревизии, API, evobgp-node
|
||||
status: pending
|
||||
- id: risk-hardening
|
||||
content: Двухфазный deploy, LKG, pin BIRD, политика миграций, обязательная подпись бандла на ноде
|
||||
status: completed
|
||||
- id: test-bird-matrix
|
||||
content: Матрица сценариев BIRD + golden-тесты birdfmt + bird -p в CI
|
||||
status: completed
|
||||
- id: ci-gitea
|
||||
content: .gitea/workflows/ci.yaml, документация для act runner
|
||||
status: completed
|
||||
isProject: false
|
||||
---
|
||||
|
||||
@@ -50,7 +59,10 @@ Control-plane на **Go**, анонс префиксов через **BIRD**, п
|
||||
10. [Реплика evobgp-node](#10-реплика-evobgp-node)
|
||||
11. [Выбор СУБД](#11-выбор-субд)
|
||||
12. [Профиль microVPS — детализация](#12-профиль-microvps-детализация)
|
||||
13. [Риски и этапы](#13-риски-и-этапы-внедрения)
|
||||
13. [Снижение рисков (меры и процессы)](#13-снижение-рисков-меры-и-процессы)
|
||||
14. [Тестирование BIRD2 и матрица сценариев](#14-тестирование-bird2-и-матрица-сценариев)
|
||||
15. [CI/CD (Gitea Actions)](#15-cicd-gitea-actions)
|
||||
16. [Риски и этапы внедрения](#16-риски-и-этапы-внедрения)
|
||||
|
||||
---
|
||||
|
||||
@@ -576,7 +588,75 @@ Raft, HTTP/`gorqlite`; для HA control-plane; не замена дефолтн
|
||||
|
||||
---
|
||||
|
||||
## 13. Риски и этапы внедрения
|
||||
## 13. Снижение рисков (меры и процессы)
|
||||
|
||||
Дополняет [§9](#9-эксплуатация-и-масштаб) и [§10](#10-реплика-evobgp-node) конкретными обязательными практиками.
|
||||
|
||||
### Конфигурация BIRD: безопасное применение
|
||||
|
||||
- **Двухфазный deploy:** (1) запись новой ревизии во **временный** каталог на общем volume и проверка `**bird -c <path> -p`** (парсинг без запуска демона; см. `bird(8)`); (2) только при нулевом коде выхода — **атомарная** подмена активных файлов (rename) и `**birdc configure`**. Опционально перед фазой (2) — `preview`/diff в control-plane (REST).
|
||||
- **Last-known-good (LKG):** хранить на volume **предыдущую** применённую ревизию; при неуспехе `configure` или ненулевом exit **автоматически** восстановить файлы LKG, зафиксировать событие в логах/метриках и **не** оставлять BIRD в полусобранном состоянии.
|
||||
- **Canary в production:** перед полным apply — отдельный `bgp_speaker` или подмножество `bgp_peer` (см. [§9](#9-эксплуатация-и-масштаб)); полный выкат только после проверки сессий/префиксов на канареечном спикере.
|
||||
|
||||
### Данные, очередь, microVPS
|
||||
|
||||
- **Миграции:** в основной ветке — только **вперёд**; откат схемы — явные down-миграции (если приняты в процессе) или восстановление БД из бэкапа; политика фиксируется в операторской документации.
|
||||
- **Jobs:** обязательные `**idempotency_key`** и уникальность в `job_audit` там, где это предотвращает двойной apply/reload.
|
||||
- **microVPS:** пороги мониторинга на рост таблиц ревизий/артефактов, **retention** старых ревизий, лимиты ротации логов Docker (см. [§12](#12-профиль-microvps-детализация)) — с **алертами** при приближении к лимиту диска и OOM.
|
||||
|
||||
### Безопасность
|
||||
|
||||
- **evobgp-node:** в production **обязательна** проверка **подписи** бандла (отдельно от TLS транспорта); ключ подписи не смешивать с другими ролями.
|
||||
- Секреты BGP (пароли, ключи) — только secret store / Docker secrets; **не** логировать полные конфиги с секретами.
|
||||
|
||||
### Поставка и совместимость
|
||||
|
||||
- В **Dockerfile** / Compose зафиксировать **версию образа BIRD 2** (тег minor или digest), совпадающую с образом, в котором выполняется `**bird -p`** в CI ([§15](#15-cicd-gitea-actions)).
|
||||
- **Статический каркас** (router id, локальные интерфейсы, операторские правки) — в файлах **вне** автогенерируемых фрагментов; сгенерированное — только в согласованных путях `bird.d/` (см. [§8](#8-генерация-bird-и-ревизии), [§10](#10-реплика-evobgp-node)).
|
||||
|
||||
### Порядок внедрения (уточнение)
|
||||
|
||||
Перед полным набором микросервисов целесообразен параллельный этап: **контракт OpenAPI + каркас `internal/birdfmt` + golden-тесты + проверка `bird -p` в CI** ([§14](#14-тестирование-bird2-и-матрица-сценариев), [§15](#15-cicd-gitea-actions)), затем миграции PG и один вертикальный сценарий (например `IP_RANGES`).
|
||||
|
||||
---
|
||||
|
||||
## 14. Тестирование BIRD2 и матрица сценариев
|
||||
|
||||
Цель — покрыть **поверхность генератора** EvoBGP, а не весь язык BIRD. Комбинации фиксируются **матрицей** и каталогом сценариев в репозитории (`internal/birdfmt/testdata/scenarios/`).
|
||||
|
||||
### Матрица покрытия (ориентир)
|
||||
|
||||
|
||||
| Измерение | Варианты для покрытия |
|
||||
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Роль спикера | master (полный набор фрагментов); реплика / **бандл** для `evobgp-node` (manifest + подмножество includes + локальный `local.conf`) |
|
||||
| Типы модулей (выход render) | `AS_PREFIXES`, `CDN_CIDRS`, `DOMAINS` (материализованные префиксы), `IP_RANGES` — минимум по одному сценарию; комбинация **2+ типов** в одной ревизии |
|
||||
| Пиры | при поддержке каркасом — только static; **1× IPv4**, **1× IPv6**, несколько пиров, смешанный v4/v6 |
|
||||
| Community | каждый поддерживаемый `kind` в справочнике + вариант без community (default) |
|
||||
| Фильтры | экспорт «разрешить анонс»; при генерации — отрицательные кейсы (reject) |
|
||||
| Граничные данные | пустой префикс-лист; один префикс; большой список (нагрузка на размер файла) |
|
||||
| Шаблоны include | каждый именуемый фрагмент из `internal/birdfmt` участвует хотя бы в одном интеграционном сценарии |
|
||||
|
||||
|
||||
По мере расширения генератора матрица **дополняется**; регрессия — новыми строками в таблице тестов и при необходимости новыми подкаталогами сценариев.
|
||||
|
||||
### Виды тестов
|
||||
|
||||
1. **Unit / snapshot (Go):** пакет `internal/birdfmt` — вход из фикстур, выход сравнивается с `*.golden` или `txtar`.
|
||||
2. **Синтаксис BIRD в CI:** для каждого сценария с `bird.conf` выполняется `**bird -c … -p`** в контейнере с **той же major/minor версией BIRD 2**, что в production ([§13](#13-снижение-рисков-меры-и-процессы)).
|
||||
3. **Позже:** контрактные тесты HTTP по `docs/openapi.yaml` после реализации `internal/httpapi`.
|
||||
|
||||
---
|
||||
|
||||
## 15. CI/CD (Gitea Actions)
|
||||
|
||||
- Workflows: каталог `**.gitea/workflows/`** в корне репозитория; синтаксис совместим с GitHub Actions ([документация Gitea Actions](https://docs.gitea.com/usage/actions/quickstart/)).
|
||||
- Нужен зарегистрированный **act runner** с меткой `ubuntu-latest` (или согласованной с инсталляцией) и при job с Docker — доступ **Docker** на runner.
|
||||
- Рекомендуемый pipeline: **lint OpenAPI** (`npx @redocly/cli lint docs/openapi.yaml`), `**go vet` / `go test` / `go build ./...`**, **проверка всех `testdata/scenarios/*/bird.conf` через `bird -p`** (см. workflow в репозитории).
|
||||
|
||||
---
|
||||
|
||||
## 16. Риски и этапы внедрения
|
||||
|
||||
### Риски
|
||||
|
||||
|
||||
Reference in New Issue
Block a user