tocdepth

2

Создание сетевой связанности

Чтобы опубликовать сервис VM в интернет, нужно добавить сеть организации и сеть vApp, подключить VM к сети и настроить правило межсетевого экранирования.

Для создания сетевой связности и публикации веб-приложения опишите создание следующих ресурсов:

  1. В файл terraform.tfvars добавьте имя Edge Gateway/T1:

    edge_name = "CSA-student-10-VDC01-EDGE01"
    

    Например, если имя тенаната CSA-student-10, имя Edge Gateway/T1 может быть CSA-student-10-VDC01-EDGE01.

    Теперь файл terraform.tfvars полностью выглядт следующим образом:

    vcd_url = "https://vcd30.msk.sbercloud.ru/api"
    org_name = "CSA-student-10-dmbBK8eMQ"
    org_vdc = "CSA-student-10-VDC01"
    edge_name = "CSA-student-10-VDC01-EDGE01"
    vcd_storage_policy = "Gold"
    ova = "photon-hw11-4.0-1526e30ba0.ova"
    
  2. В файле main.tf опишите переменные:

    # variables
    variable "vcd_url" {}
    variable "org_name" {}
    variable "org_vdc" {}
    variable "edge_name" {}
    variable "vcd_storage_policy" {}
    variable "ova" {}
    variable "vcd_max_retry_timeout" {
    default = "1800"
    }
    variable "vcd_allow_unverified_ssl" {
    default = "true"
    }
    variable "server_web_ip" {
    default = "172.16.100.1"
    }
    variable "gateway_web_ip" {
    default = "172.16.100.254"
    }
    
  3. Опишите провайдеры:

    # terraform
    terraform {
    required_providers {
    vcd = {
    source = "vmware/vcd"
    version = ">=3.10.0"
    }
    }
    required_version = ">= 1.5.5"
    }
    
  4. Опишите подключение:

    # provider
    provider "vcd" {
    user = "none"
    password = "none"
    auth_type = "api_token_file"
    api_token_file = "token.json"
    allow_api_token_file = true
    org = var.org_name
    vdc = var.org_vdc
    url = var.vcd_url
    max_retry_timeout = var.vcd_max_retry_timeout
    allow_unverified_ssl = var.vcd_allow_unverified_ssl
    }
    
  5. Опишите создание каталога:

    # catalog
    resource "vcd_catalog" "catalog" {
    name = "test-deploy-catalog"
    delete_force = "true"
    delete_recursive = "true"
    }
    
  6. Опишите создание шаблона OVA в каталоге:

    resource "vcd_catalog_vapp_template" "ova" {
    catalog_id = vcd_catalog.catalog.id
    name = "test-deploy-ova"
    description = "PhotonOS 4.0 GA"
    ova_path = "./${var.ova}"
    }
    
  7. Опишите источник данных для получения ID Edge Gateway:

    # nsxt edge
    data "vcd_org_vdc" "my_vdc" {
    name = var.org_vdc
    }
    data "vcd_nsxt_edgegateway" "nsxt-edge" {
    name = var.edge_name
    owner_id = data.vcd_org_vdc.my_vdc.id
    }
    
  8. Опишите создание сети организации «test-deploy-net-web»:

    # nsxt networks
    resource "vcd_network_routed_v2" "test-deploy-net-web" {
    name = "test-deploy-net-web"
    edge_gateway_id = data.vcd_nsxt_edgegateway.nsxt-edge.id
    gateway = var.gateway_web_ip
    prefix_length = 24
    tatic_ip_pool {
    start_address = var.server_web_ip
    end_address = var.server_web_ip
    }
    }
    
  9. Опишите создание профиля приложения Edge Gateway:

    # nsxt port profiles
    resource "vcd_nsxt_app_port_profile" "web-profile" {
    name = "test-deploy-web-profile"
    scope = "TENANT"
    context_id = data.vcd_org_vdc.my_vdc.id
    app_port {
    protocol = "TCP"
    port = ["80"]
    }
    }
    
  10. Опишите создание DNAT-правила «test-deploy-dnat-rule» для публикации веб-приложения:

    resource "vcd_nsxt_nat_rule" "dnat" {
    edge_gateway_id = data.vcd_nsxt_edgegateway.nsxt-edge.id
    name = "test-deploy-dnat-rule"
    rule_type = "DNAT"
    firewall_match = "MATCH_EXTERNAL_ADDRESS"
    external_address = data.vcd_nsxt_edgegateway.nsxt-edge.primary_ip
    dnat_external_port = "80"
    internal_address = var.server_web_ip
    app_port_profile_id = vcd_nsxt_app_port_profile.web-profile.id
    depends_on = [vcd_nsxt_app_port_profile.web-profile]
    }
    
  11. Опишите создание IPSet:

    # nsxt ipset
    resource "vcd_nsxt_ip_set" "server_web_set" {
    edge_gateway_id = data.vcd_nsxt_edgegateway.nsxt-edge.id
    name = "test-deploy-server-web-set"
    description = var.server_web_ip
    ip_addresses = [var.server_web_ip]
    }
    resource "vcd_nsxt_ip_set" "edge_ip_set" {
    edge_gateway_id = data.vcd_nsxt_edgegateway.nsxt-edge.id
    name = "test-deploy-edge-ip-set"
    description = data.vcd_nsxt_edgegateway.nsxt-edge.primary_ip
    ip_addresses = [data.vcd_nsxt_edgegateway.nsxt-edge.primary_ip]
    }
    
  12. Опишите создание правила межсетевого экрана:

    # nsxt firewall
    resource "vcd_nsxt_firewall" "rules" {
    edge_gateway_id = data.vcd_nsxt_edgegateway.nsxt-edge.id
    depends_on = [vcd_nsxt_ip_set.server_web_set]
    rule {
    action = "ALLOW"
    name = "test-deploy-web-from-internet"
    direction = "IN_OUT"
    ip_protocol = "IPV4"
    destination_ids = [vcd_nsxt_ip_set.edge_ip_set.id]
    app_port_profile_ids = [vcd_nsxt_app_port_profile.web-profile.id]
    }
    }
    
  13. Опишите создание vApp:

    # vapp
    resource "vcd_vapp" "test-deploy-vapp-web" {
    name = "test-deploy-vapp-web"
    depends_on = [vcd_network_routed_v2.test-deploy-net-web]
    }
    
  14. Опишите создание сети vApp:

    # vapp networks
    resource "vcd_vapp_org_network" "vapp_web_network" {
    vapp_name = vcd_vapp.test-deploy-vapp-web.name
    org_network_name = vcd_network_routed_v2.test-deploy-net-web.name
    depends_on = [vcd_vapp.test-deploy-vapp-web]
    reboot_vapp_on_removal = true
    }
    
  15. Опишите создание VM:

    # vms
    resource "vcd_vapp_vm" "test-deploy-vm-web" {
    vapp_name = vcd_vapp.test-deploy-vapp-web.name
    name = "test-deploy-vm-web"
    vapp_template_id = vcd_catalog_vapp_template.ova.id
    memory = 384 cpus = 1
    accept_all_eulas = "true"
    depends_on = [vcd_vapp.test-deploy-vapp-web, vcd_vapp_org_network.vapp_web_network]
    network {
    type = "org"
    name = vcd_network_routed_v2.test-deploy-net-web.name
    ip_allocation_mode = "POOL"
    is_primary = "true"
    connected = "true"
    }
    customization {
    enabled = "true"
    allow_local_admin_password = "true"
    auto_generate_password = "false"
    admin_password = "P@ssw0rd"
    initscript = "mkdir /tmp/node && cd /tmp/node && echo 'CSA-Lab WEB server on 80 port' > index.html && /bin/systemctl stop iptables && /usr/bin/python3 -m http.server 80 &"
    }
    }
    
  16. Проверьте веб-адрес:

    # output
    output "web_address_for_check" {
    value = "http://${data.vcd_nsxt_edgegateway.nsxt-edge.primary_ip}"
    }
    
  17. Выполните проверку с помощью команды terraform plan.

    Terraform показывает планируемые изменения.

  18. Выполните команду terraform apply.

    Terraform разворачивает 11 ресурсов и создает веб-сервис в облаке.

Запустили Evolution free tier
для Dev & Test
Получить