feat: пример fullpipe_chain (vDC → Edge → внешние IP → SNAT) + README с шагами

This commit is contained in:
Repinoid
2026-09-24 15:21:41 +03:00
parent 2c7c5378a2
commit 6b058051bd
6 changed files with 182 additions and 0 deletions
+66
View File
@@ -0,0 +1,66 @@
# vDC → Edge → внешние IP → SNAT
Поднимает сетевую основу: виртуальный датацентр, сетевой шлюз периметра, внешние IP на организации
и SNAT на шлюзе. **Кластер Штурвал сюда не входит** — он разворачивается очень долго, отдельным шагом.
Организацию создайте заранее в ЛК — в Terraform она не создаётся.
## 1. Возьмите значения в ЛК
| Что | Где взять | Пример |
|---|---|---|
| Токен API | ЛК → Профиль → Токены → «Технический» | `eyJhbGciOi...` |
| UUID организации | ЛК → услуга «Организация в Cloud Director» → UUID в карточке услуги | `57eeacd1-dc7f-4a52-b903-7e5f7d3c1164` |
| Имя организации | там же — название услуги | `organ` |
| Сетевой провайдер | ЛК → vDC → «Сетевой провайдер» | `snb1` |
| Provider VDC | ЛК → vDC → «Provider VDC» | `Intel Broadwell 2.4` |
| Дисковая политика | ЛК → vDC → доступные дисковые политики | `SATA` |
| Имя ipSpace | ЛК → организация → внешние IP | `internet-ipv4-v1` |
## 2. Заполните terraform.tfvars
```bash
cp terraform.tfvars.example terraform.tfvars
```
```hcl
api_token = "eyJhbGciOi..." # токен из шага 1
organization = "organ" # имя организации
org_uid = "57eeacd1-dc7f-4a52-b903-7e5f7d3c1164" # UUID организации
ip_space_name = "internet-ipv4-v1"
ip_count = "3"
```
## 3. Выполните команды
```bash
terraform init # один раз — скачает провайдер
terraform plan # покажет, что будет создано
terraform apply # создаст (подтвердить: yes)
```
## 4. Проверьте результат
- в ЛК появились виртуальный датацентр и сетевой шлюз;
- на организации выделены внешние IP;
- на шлюзе включён SNAT;
- `terraform plan` повторно не показывает изменений.
## 5. Удаление
```bash
terraform destroy
```
Порядок обратный: SNAT выключается, квота IP обнуляется, затем удаляются шлюз и vDC.
**Организация не удаляется.**
## Состав файлов
| Файл | Что делает |
|---|---|
| `main.tf` | провайдер и переменные |
| `vdc.tf` | виртуальный датацентр |
| `edge.tf` | сетевой шлюз периметра (Edge) |
| `modifiers.tf` | внешние IP на организации + SNAT на шлюзе |
| `terraform.tfvars.example` | шаблон значений из ЛК |
+16
View File
@@ -0,0 +1,16 @@
# Сетевой шлюз периметра (Edge)
resource "nubes_vc_nsxt" "edge" {
resource_name = "fullpipe-edge"
vdc_type = "vdc"
vdc_uid = nubes_vc_vdc.vdc.id # Edge создаётся после vDC
need_enable_avi = true
virtual_services_count = 3 # Штурвалу нужно не меньше 3
routed_net_configuration = {
ip_addr_pool = "10.10.102.0/24"
main_dns = "81.22.46.22"
second_dns = "185.247.187.77"
}
}
+42
View File
@@ -0,0 +1,42 @@
terraform {
required_providers {
nubes = {
source = "tf-registry.containerk8s.services.ngcloud.ru/nubes-dev/nubes"
version = "2.0.20"
}
}
}
provider "nubes" {
api_token = var.api_token
api_endpoint = "https://lk-api-gateway-dev.ngcloud.ru/api/v1/svc"
}
# --- значения берутся из ЛК (см. README) ---
variable "api_token" {
type = string
sensitive = true
description = "ЛК → Профиль → Токены → «Технический»"
}
variable "organization" {
type = string
description = "Имя организации из ЛК (например: organ)"
}
variable "org_uid" {
type = string
description = "UUID той же организации (нужен ресурсу аллокации IP)"
}
variable "ip_space_name" {
type = string
description = "Имя ipSpace, доступное организации (например: internet-ipv4-v1)"
}
variable "ip_count" {
type = string
default = "3"
description = "Сколько внешних IP выделить (строка)"
}
+30
View File
@@ -0,0 +1,30 @@
# Внешние IP на организации (создаётся после Edge)
resource "nubes_vc_org_ip_allocation" "org_ip" {
org_uid = var.org_uid
vip_configure = jsonencode([
{
name = var.ip_space_name
count = var.ip_count
}
])
depends_on = [nubes_vc_nsxt.edge]
}
# SNAT на шлюзе этим ipSpace.
# При удалении отправляется ipSpaceName = "no-needed" (SNAT выключается).
resource "nubes_vc_nsxt_snat" "snat" {
nsxt_uid = nubes_vc_nsxt.edge.id
ip_space_name = var.ip_space_name
depends_on = [nubes_vc_org_ip_allocation.org_ip]
}
output "vdc_id" {
value = nubes_vc_vdc.vdc.id
}
output "nsxt_id" {
value = nubes_vc_nsxt.edge.id
}
+9
View File
@@ -0,0 +1,9 @@
# Скопируйте в terraform.tfvars и заполните значениями из ЛК.
api_token = "eyJhbGciOi..." # ЛК → Профиль → Токены → «Технический»
organization = "organ" # имя организации из ЛК
org_uid = "57eeacd1-dc7f-4a52-b903-7e5f7d3c1164" # UUID той же организации
ip_space_name = "internet-ipv4-v1" # имя ipSpace организации
ip_count = "3" # сколько внешних IP выделить (строка)
+19
View File
@@ -0,0 +1,19 @@
# Виртуальный датацентр (vDC)
resource "nubes_vc_vdc" "vdc" {
resource_name = "fullpipe-vdc"
# организация из ЛК (имя или UUID)
organization_uid = var.organization
# значения из ЛК: страница vDC → сетевой провайдер / Provider VDC / дисковые политики
network_provider = "snb1"
provider_vdc = "Intel Broadwell 2.4"
cpu_allocated = 8
cpu_guaranteed = 0
mem_allocated = 32
storage_config = jsonencode([{ name = "SATA", size = "200" }])
suspend_on_destroy = true
}