С помощью этого руководства вы настроите сетевую связность между подсетями из разных VPC, принадлежащих одному проекту, с помощью Terraform. Схема сетевой связности представлена ниже.
Вы будете использовать следующие сервисы:
Terraform — сервис для декларативного управления инфраструктурой с помощью конфигурационных файлов.
VPC — изолированная виртуальная сеть для создания безопасной инфраструктуры.
Magic Router — сервис для управления сетевыми связями между ресурсами внутри облачной инфраструктуры.
«Группы безопасности» — сервис для контроля трафика виртуальных машин.
«Виртуальные машины» — сервис, в рамках которого предоставляется виртуальная машина.
Для успешного выполнения сценария используйте версию провайдера Terraform 2.0.0.
Шаги:
Зарегистрируйтесь в личном кабинете Cloud.ru.
Если вы уже зарегистрированы, войдите под своей учетной записью.
В личном кабинете получите идентификаторы групп безопасности SSH-access_ru.AZ-1, SSH-access_ru.AZ-2.
Создайте папку для проекта и проинициализируйте провайдер командой:
terraform init
В папке проекта создайте конфигурационный файл cloudru_evolution_vpc_vpc.tf.
В файле укажите следующие параметры:
# Создание vpc-1resource "cloudru_evolution_vpc_vpc" "resource_vpc1" {name = "vpc-1"project_id = "<project_id>" # Укажите идентификатор проектаdescription = "First VPC"}# Создание vpc-2resource "cloudru_evolution_vpc_vpc" "resource_vpc2" {name = "vpc-2"project_id = "<project_id>" # Укажите идентификатор проектаdescription = "Second VPC"}# Создание подсети 10.1.1.0/24 в vpc-1resource "cloudru_evolution_compute_subnet" "resource_subnet1" {project_id = "<project_id>" # Укажите идентификатор проектаvpc_id = cloudru_evolution_vpc_vpc.resource_vpc1.idname = "subnet-1"subnet_address = "10.1.1.0/24"routed_network = truedefault = falsezone_identifier = {name = "ru.AZ-1"}}# Создание подсети 10.2.2.0/24 в vpc-1resource "cloudru_evolution_compute_subnet" "resource_subnet2" {project_id = "<project_id>" # Укажите идентификатор проектаvpc_id = cloudru_evolution_vpc_vpc.resource_vpc1.idname = "subnet-2"subnet_address = "10.2.2.0/24"routed_network = truedefault = true # Если в зоне доступности ru.AZ-2 уже есть основная подсеть, укажите falsezone_identifier = {name = "ru.AZ-2"}}# Создание подсети 10.3.3.0/24 в vpc-2resource "cloudru_evolution_compute_subnet" "resource_subnet3" {project_id = "<project_id>" # Укажите идентификатор проектаvpc_id = cloudru_evolution_vpc_vpc.resource_vpc2.idname = "subnet-3"subnet_address = "10.3.3.0/24"routed_network = truedefault = falsezone_identifier = {name = "ru.AZ-1"}}# Создание Magic Routerresource "cloudru_evolution_magic_router_magic_router" "resource_magic_router" {project_id = "<project_id>" # Укажите идентификатор проектаname = "magic-router"}# Создание соединения с vpc-1resource "cloudru_evolution_magic_router_vpc_connection" "resource_vpc_connection1" {name = "first_vpc_connection"magic_router_id = cloudru_evolution_magic_router_magic_router.resource_magic_router.idvpc_id = cloudru_evolution_vpc_vpc.resource_vpc1.id}# Создание соединения с vpc-2resource "cloudru_evolution_magic_router_vpc_connection" "resource_vpc_connection2" {name = "second_vpc_connection"magic_router_id = cloudru_evolution_magic_router_magic_router.resource_magic_router.idvpc_id = cloudru_evolution_vpc_vpc.resource_vpc2.id}# Создание статических маршрутов на Magic Routerresource "cloudru_evolution_magic_router_static_route" "resource_static_route1" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1]magic_router_id = cloudru_evolution_magic_router_magic_router.resource_magic_router.idsubnet = "10.1.1.0/24"next_hop_vpc = {az_name = "ru.AZ-1"vpc_connection_id = cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1.id}}resource "cloudru_evolution_magic_router_static_route" "resource_static_route2" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1]magic_router_id = cloudru_evolution_magic_router_magic_router.resource_magic_router.idsubnet = "10.2.2.0/24"next_hop_vpc = {az_name = "ru.AZ-2"vpc_connection_id = cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1.id}}resource "cloudru_evolution_magic_router_static_route" "resource_static_route3" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection2]magic_router_id = cloudru_evolution_magic_router_magic_router.resource_magic_router.idsubnet = "10.3.3.0/24"next_hop_vpc = {az_name = "ru.AZ-1"vpc_connection_id = cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection2.id}}# Создание пользовательских маршрутов в vpc-1resource "cloudru_evolution_vpc_static_route" "resource_static_route1" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1]vpc_id = cloudru_evolution_vpc_vpc.resource_vpc1.idproject_id = "<project_id>" # Укажите идентификатор проектаnext_hop = {magic_router = {magic_router_identifier = {id = cloudru_evolution_magic_router_magic_router.resource_magic_router.id}az_name = "ru.AZ-1"}}subnet = "10.3.3.0/24"}resource "cloudru_evolution_vpc_static_route" "resource_static_route2" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection1]vpc_id = cloudru_evolution_vpc_vpc.resource_vpc1.idproject_id = "<project_id>" # Укажите идентификатор проектаnext_hop = {magic_router = {magic_router_identifier = {id = cloudru_evolution_magic_router_magic_router.resource_magic_router.id}az_name = "ru.AZ-2"}}subnet = "10.3.3.0/24"}# Создание пользовательских маршрутов в vpc-2resource "cloudru_evolution_vpc_static_route" "resource_static_route3" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection2]vpc_id = cloudru_evolution_vpc_vpc.resource_vpc2.idproject_id = "<project_id>" # Укажите идентификатор проектаnext_hop = {magic_router = {magic_router_identifier = {id = cloudru_evolution_magic_router_magic_router.resource_magic_router.id}az_name = "ru.AZ-1"}}subnet = "10.1.1.0/24"}resource "cloudru_evolution_vpc_static_route" "resource_static_route4" {depends_on = [cloudru_evolution_magic_router_vpc_connection.resource_vpc_connection2]vpc_id = cloudru_evolution_vpc_vpc.resource_vpc2.idproject_id = "<project_id>" # Укажите идентификатор проектаnext_hop = {magic_router = {magic_router_identifier = {id = cloudru_evolution_magic_router_magic_router.resource_magic_router.id}az_name = "ru.AZ-1"}}subnet = "10.2.2.0/24"}# Настройка правил входящего трафика для группы безопасности SSH-access_ru.AZ-1resource "cloudru_evolution_compute_security_group_rule" "resource_security_group_rule1" {direction = "TRAFFIC_DIRECTION_INGRESS"ether_type = "ETHER_TYPE_IPV4"ip_protocol = "IP_PROTOCOL_ANY"port_range = "any"remote_ip_prefix = "10.2.2.0/24"security_group_id = "<SSH-access_ru.AZ-1_id>" # Укажите идентификатор группы безопасности}resource "cloudru_evolution_compute_security_group_rule" "resource_security_group_rule2" {direction = "TRAFFIC_DIRECTION_INGRESS"ether_type = "ETHER_TYPE_IPV4"ip_protocol = "IP_PROTOCOL_ANY"port_range = "any"remote_ip_prefix = "10.3.3.0/24"security_group_id = "<SSH-access_ru.AZ-1_id>" # Укажите идентификатор группы безопасности}# Настройка правил входящего трафика для группы безопасности SSH-access_ru.AZ-2resource "cloudru_evolution_compute_security_group_rule" "resource_security_group_rule3" {direction = "TRAFFIC_DIRECTION_INGRESS"ether_type = "ETHER_TYPE_IPV4"ip_protocol = "IP_PROTOCOL_ANY"port_range = "any"remote_ip_prefix = "10.1.1.0/24"security_group_id = "<SSH-access_ru.AZ-2_id>" # Укажите идентификатор группы безопасности}resource "cloudru_evolution_compute_security_group_rule" "resource_security_group_rule4" {direction = "TRAFFIC_DIRECTION_INGRESS"ether_type = "ETHER_TYPE_IPV4"ip_protocol = "IP_PROTOCOL_ANY"port_range = "any"remote_ip_prefix = "10.3.3.0/24"security_group_id = "<SSH-access_ru.AZ-2_id>" # Укажите идентификатор группы безопасности}
Где:
<project_id> — идентификатор проекта.
<SSH-access_ru.AZ-1_id>, <SSH-access_ru.AZ-2_id> — идентификаторы групп безопасности SSH-access_ru.AZ-1, SSH-access_ru.AZ-2.
Проверьте правильность конфигурационного файла:
terraform validate
Если в конфигурации нет ошибок, появится сообщение:
Success! The configuration is valid.
Просмотрите планируемые изменения.
terraform plan
При успешном выполнении отобразится список ресурсов и их параметры.
Запустите создание ресурсов:
terraform apply
Подтвердите создание ресурсов: введите yes и нажмите Enter.
Если нет ошибок, появится сообщение:
Apply complete! Resources: 19 added, 0 changed, 0 destroyed.
В подсетях subnet-1, subnet-2 и subnet-3 разместите по одной виртуальной машине, создав их с помощью Terraform или в личном кабинете вручную.
Подключитесь к первой виртуальной машине через виртуальную консоль.
Чтобы проверить сетевую связность с другими виртуальными машинами, выполните команду:
ping <IP>
Где IP — IP-адрес виртуальной машины, связность с которой надо проверить.
Повторите шаги 2, 3 для второй и третьей виртуальной машины.
Вы настроили сетевую связность между подсетями в разных VPC, принадлежащих одному проекту, с помощью Terraform.