The "default" security group VK Cloud auto-creates in every project has a UUID unique to that project, but main.tf hardcoded one project's UUID across all 4 instance resources (router, priv_srv_01/02/03) - not portable to another project. Replaced with data.vkcs_networking_secgroup (matched by name = "default", verified against the real provider schema via terraform providers schema -json on the local provider mirror) behind local.default_security_group_id. The new default_security_group_id variable is a last-resort manual override via coalesce() for projects where the lookup doesn't fit (non-standard name/SDN) - not the normal path. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011hXR2ftXZZhJ4Y3XuSoR8r
4.2 KiB
Quick Start (самостоятельное развёртывание)
Пошаговая инструкция для самостоятельного развёртывания сценария из этого репозитория на VK Cloud.
1. Подготовка
- Аккаунт VK Cloud с включённым API/CLI-доступом,
project_id. - SSH-ключ загружен в VK Cloud (имя ключа понадобится в
terraform.tfvars). - Установлены
terraform(≥1.13) иansible.
2. Клонировать репозиторий и задать credentials
Отредактировать terraform/terraform.tfvars:
username = "<ваш VK Cloud логин>"
password = "<пароль>"
project_id = "<ваш project_id>"
ssh_key_name = "<имя загруженного SSH-ключа>"
private_network_cidrs = [
"10.90.0.0/29",
"10.90.0.8/29",
]
private_network_cidrs — обязательная переменная без значения по умолчанию: один CIDR-префикс на каждую приватную сеть, к которой будут подключены интерфейсы роутеров (один префикс = одна общая сеть = один приватный интерфейс на роутер). Автоматической нарезки нет — префиксы не должны пересекаться и должны вмещать минимум router_count + 2 адреса.
UUID системной Security Group default (уникален для каждого проекта VK Cloud) вычисляется автоматически через data.vkcs_networking_secgroup, вручную задавать не нужно. Переменная default_security_group_id — override только на крайний случай (нестандартное имя/SDN группы в проекте), не для обычного использования.
3. (Опционально) масштабирование
По умолчанию: 2 роутера × 3 интерфейса (1 публичный + 2 приватных, по числу префиксов в private_network_cidrs). Меняется без правки кода — либо через terraform.tfvars, либо через переменные окружения:
export TF_VAR_router_count=4
export TF_VAR_private_network_cidrs='["10.90.0.0/28","10.90.0.16/28","10.90.0.32/28"]'
4. Развернуть
cd terraform
terraform init
terraform plan
terraform apply
Каждая ВМ сама донастроит сеть при первой загрузке (network-init.sh.tpl) и перезагрузится.
5. Настроить Ansible
⚠️ Важно:
ansible/inventory.iniи роли (base/frr_router/keepalived) пока жёстко рассчитаны на 2 роутера с интерфейсамиeth0/eth1(VRRP-схема) — под новую N-роутерную/N-NIC архитектуру ещё не адаптированы. Для дефолтных значений (router_count=2, 2 записи вprivate_network_cidrs) впишите реальныеwan_ip/lan_ip/GRE/BGP-параметры роутеров вinventory.iniвручную. При масштабировании выше 2 роутеров или интерфейсов Ansible-слой нужно дорабатывать отдельно.
cd ansible
ansible-playbook -i inventory.ini site.yml
6. Проверить
- SSH на публичные IP роутеров,
cat /var/log/network-config.log— лог настройки интерфейсов. ip a,networkctl— убедиться, чтоeth0(WAN) иeth1..ethN(приватные) подняты корректно.- FRR/strongSwan/keepalived статусы — см. раздел "Under the Hood" в README.md.
Локальная офлайн-проверка поставки (без облака)
terraform/tests/setup-local-terraform.sh
venv/bin/pytest terraform/tests -v