feat: пример fullpipe_chain (vDC → Edge → внешние IP → SNAT) + README с шагами
This commit is contained in:
@@ -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` | шаблон значений из ЛК |
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 выделить (строка)"
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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 выделить (строка)
|
||||||
@@ -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
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user