Желілер арасындағы трафикті бағдарлау
Төменде Terraform көмегімен екі желі арасындағы бағдарлауды баптау мысалы келтірілген.
Мысал инфрақұрылымы:
-
Мысалда екі желі жасалған:
common-privateжеке желісі жәнеcommon-publicжария желісі. Әрбір желі бір ішкі желіден тұрады. -
Әрбір желі үшін тиісті ішкі желілерде интерфейстері бар бағдарлауыштар жасалған.
-
Жария желі бағдарлауышы үшін сыртқы желіге қатынау бапталған, сондықтан осы желідегі объектілерге Floating IP мекенжайларын тағайындауға болады.
-
Әрбір желіде оның жалғыз ішкі желісіне сәйкес келетін порт жасалған. Осы порттарға екі желі арасындағы бағдарлауыш рөлін атқаратын
common-routerвиртуалды машинасы қосылады. -
Бағдарлауыштарда виртуалды машина порты арқылы басқа ішкі желіге апаратын статикалық маршруттар бапталған.
-
Әрбір ішкі желіде бір виртуалды машинадан жасалған. Жария желідегі виртуалды машинада Floating IP мекенжайы бар.
Бұл машиналар желілер арасындағы бағдарлаудың бапталуын тексеру үшін пайдаланылады: олардың арасындағы сәтті ping дұрыс баптауды білдіреді.
Параметрлердің толық сипаттамасы — Terraform провайдерінің құжаттамасында.
-
Квоталарды тексеріңіз. Таңдалған аймақта желілер мен виртуалды машиналарды жасау үшін ресурстар жеткілікті екеніне көз жеткізіңіз. Әртүрлі аймақтар үшін әртүрлі квоталар бапталуы мүмкін.
Қажет болса, квоталарды ұлғайтыңыз.
-
OpenStack клиенті орнатылғанына көз жеткізіңіз және жоба ішінде аутентификациядан өтіңіз.
-
Бұл әлі жасалмаған болса, Terraform орнатып, ортаны баптаңыз.
Провайдер баптауларын Terraform конфигурациясының
provider.tfфайлына орналастырыңыз. -
Айнымалылары бар Terraform конфигурациясының
variables.tfфайлын жасаңыз:variable "image_flavor" {type = stringdefault = "Ubuntu-22.04-202208"}variable "compute_flavor" {type = stringdefault = "STD2-2-4"}variable "key_pair_name" {type = stringdefault = "default"}variable "availability_zone_name" {type = stringdefault = "MS1"}Бұл файлда келесі айнымалылар жарияланады:
image_flavor: виртуалды машина бейнесінің атауы;compute_flavor: виртуалды машина конфигурациясы қалыбының атауы;key_pair_name: виртуалды машинаға SSH арқылы қосылу үшін пайдаланылатын кілт жұбының атауы;availability_zone_name: виртуалды машина орналастырылатын қолжетімділік аймағының атауы.
Қажет болса, олардың рұқсат етілген мәндерін нақтылап, айнымалылар мәндерін түзетіңіз:
image_flavorcompute_flavorkey_pair_nameavailability_zone_nameOpenStack CLI көмегімен:
openstack image list
-
Terraform конфигурациясының
common-public.tfфайлын жасаңыз. Онда мыналар сипатталады:- жария желі мен ішкі желі;
internetсыртқы желісіне қатынауы және жария ішкі желідегі интерфейсі бар бағдарлауыш.
data "vkcs_networking_network" "extnet" {name = "internet"}resource "vkcs_networking_network" "common-public" {name = "common-public-net"}resource "vkcs_networking_subnet" "common-public" {name = "common-public-subnet"network_id = vkcs_networking_network.common-public.idcidr = "192.168.200.0/24"dns_nameservers = ["8.8.8.8", "8.8.4.4"]}resource "vkcs_networking_router" "common-public" {name = "common-public-router"admin_state_up = trueexternal_network_id = data.vkcs_networking_network.extnet.id}resource "vkcs_networking_router_interface" "common-public" {router_id = vkcs_networking_router.common-public.idsubnet_id = vkcs_networking_subnet.common-public.id} -
Terraform конфигурациясының
common-private.tfфайлын жасаңыз. Онда мыналар сипатталады:- жеке желі мен ішкі желі;
- жеке ішкі желідегі интерфейсі бар бағдарлауыш.
resource "vkcs_networking_network" "common-private" {name = "common-private-net"}resource "vkcs_networking_subnet" "common-private" {name = "common-private-subnet"network_id = vkcs_networking_network.common-private.idcidr = "192.168.199.0/24"dns_nameservers = ["8.8.8.8", "8.8.4.4"]}resource "vkcs_networking_router" "common-private" {name = "common-private-router"admin_state_up = true}resource "vkcs_networking_router_interface" "common-private" {router_id = vkcs_networking_router.common-private.idsubnet_id = vkcs_networking_subnet.common-private.id}
Terraform конфигурациясының main.tf файлын жасаңыз. Онда мыналар сипатталады:
-
Виртуалды машина қосылатын жария және жеке ішкі желілердегі порттар.
-
Виртуалды машинаның конфигурациясы.
Конфигурацияда бағдарлауды қосатын команданы
cloud-initкөмегімен орындау үшінuser_dataпараметрі пайдаланылады:sysctl -w net.ipv4.ip_forward=1 -
Виртуалды машина порттары арқылы қажетті желілерге арналған статикалық маршруттар.
-
Виртуалды машинаға SSH арқылы қосылуға арналған Floating IP мекенжайы.
data "vkcs_compute_flavor" "router-compute" {name = var.compute_flavor}data "vkcs_images_image" "router-image" {name = var.image_flavor}resource "vkcs_networking_port" "common-private" {name = "common-private"network_id = vkcs_networking_network.common-private.idallowed_address_pairs {ip_address = vkcs_networking_subnet.common-public.cidr}admin_state_up = "true"}resource "vkcs_networking_port" "common-public" {name = "common-public"network_id = vkcs_networking_network.common-public.idallowed_address_pairs {ip_address = vkcs_networking_subnet.common-private.cidr}admin_state_up = "true"}resource "vkcs_compute_instance" "common-router" {name = "common-router"flavor_id = data.vkcs_compute_flavor.router-compute.idsecurity_groups = ["default", "ssh"]availability_zone = var.availability_zone_namekey_pair = var.key_pair_nameconfig_drive = trueuser_data = <<EOF#cloud-configruncmd:- sysctl -w net.ipv4.ip_forward=1EOFblock_device {uuid = data.vkcs_images_image.router-image.idsource_type = "image"volume_size = 10volume_type = "ceph-ssd"boot_index = 0destination_type = "volume"delete_on_termination = true}network {port = vkcs_networking_port.common-public.id}network {port = vkcs_networking_port.common-private.id}depends_on = [vkcs_networking_network.common-private,vkcs_networking_subnet.common-private,vkcs_networking_network.common-public,vkcs_networking_subnet.common-public]}resource "vkcs_networking_router_route" "common-public" {router_id = vkcs_networking_router.common-public.iddestination_cidr = vkcs_networking_subnet.common-private.cidrnext_hop = vkcs_networking_port.common-public.all_fixed_ips[0]depends_on = [vkcs_networking_router_interface.common-public,vkcs_networking_port.common-public,vkcs_compute_instance.common-router]}resource "vkcs_networking_router_route" "common-private" {router_id = vkcs_networking_router.common-private.iddestination_cidr = vkcs_networking_subnet.common-public.cidrnext_hop = vkcs_networking_port.common-private.all_fixed_ips[0]depends_on = [vkcs_networking_router_interface.common-private,vkcs_networking_port.common-private,vkcs_compute_instance.common-router]}resource "vkcs_networking_floatingip" "fip-router" {pool = data.vkcs_networking_network.extnet.name}resource "vkcs_compute_floatingip_associate" "fip-router" {floating_ip = vkcs_networking_floatingip.fip-router.addressinstance_id = vkcs_compute_instance.common-router.id}
Terraform конфигурациясының test-vms.tf файлын жасаңыз. Онда мыналар сипатталады:
-
Виртуалды машиналар:
- Floating мекенжайы бар жария ішкі желідегі
common-instance-public. Мұндай виртуалды машинаға интернеттен SSH арқылы қосылуға болады. - Жеке ішкі желідегі
common-instance-private. Мұндай виртуалды машинаға басқа виртуалды машинадан SSH арқылы қосылуға болады.
Бұл виртуалды машиналар екі желі арасындағы бағдарлаудың жұмысқа қабілеттілігін тексеру үшін пайдаланылады.
- Floating мекенжайы бар жария ішкі желідегі
-
Виртуалды машиналардың IP мекенжайлары бар Terraform шығулары (output).
data "vkcs_compute_flavor" "vm-compute" {name = var.compute_flavor}data "vkcs_images_image" "vm-image" {name = var.image_flavor}resource "vkcs_compute_instance" "common-private" {name = "common-instance-private"flavor_id = data.vkcs_compute_flavor.vm-compute.idsecurity_groups = ["default", "ssh"]availability_zone = var.availability_zone_namekey_pair = var.key_pair_nameblock_device {uuid = data.vkcs_images_image.vm-image.idsource_type = "image"volume_size = 10volume_type = "ceph-ssd"boot_index = 0destination_type = "volume"delete_on_termination = true}network {uuid = vkcs_networking_network.common-private.id}depends_on = [vkcs_networking_network.common-private,vkcs_networking_subnet.common-private]}resource "vkcs_compute_instance" "common-public" {name = "common-instance-public"flavor_id = data.vkcs_compute_flavor.vm-compute.idsecurity_groups = ["default", "ssh"]availability_zone = var.availability_zone_namekey_pair = var.key_pair_nameblock_device {uuid = data.vkcs_images_image.vm-image.idsource_type = "image"volume_size = 10volume_type = "ceph-ssd"boot_index = 0destination_type = "volume"delete_on_termination = true}network {uuid = vkcs_networking_network.common-public.id}depends_on = [vkcs_networking_network.common-public,vkcs_networking_subnet.common-public]}resource "vkcs_networking_floatingip" "fip" {pool = data.vkcs_networking_network.extnet.name}resource "vkcs_compute_floatingip_associate" "fip" {floating_ip = vkcs_networking_floatingip.fip.addressinstance_id = vkcs_compute_instance.common-public.id}output "common-instance-public-floating-ip" {description = "The common-public VM floating IP address"value = vkcs_networking_floatingip.fip.address}output "common-instance-public-ip" {description = "The common-public VM IP address"value = vkcs_compute_instance.common-public.network[0].fixed_ip_v4}output "common-instance-private-ip" {description = "The common-private VM IP address"value = vkcs_compute_instance.common-private.network[0].fixed_ip_v4}
-
Жасалған Terraform конфигурация файлдарын бір директорияға орналастырыңыз:
provider.tf;variables.tf;main.tf;common-public.tf;common-private.tf;test-vms.tf.
-
Осы директорияға өтіңіз.
-
Команданы орындаңыз:
terraform init -
Команданы орындаңыз:
terraform applyРастауды сұрағанда,
yesенгізіңіз. -
Операцияның аяқталуын күтіңіз.
Ресурстарды жасау аяқталғаннан кейін Terraform мынадай шығуларды көрсетеді:
common-instance-private-ip: жеке ішкі желідегі виртуалды машинаның IP мекенжайы.common-instance-public-ip: жария ішкі желідегі виртуалды машинаның IP мекенжайы.common-instance-public-floating-ip: жария ішкі желідегі виртуалды машинаның Floating IP мекенжайы.
Бұл IP мекенжайларын мысалдың жұмысқа қабілеттілігін тексеру кезінде пайдаланыңыз.
-
common-instance-publicвиртуалды машинасына SSH арқылы қосылыңыз.Қосылу үшін мыналарды пайдаланыңыз:
common-instance-public-floating-ipшығуындағы IP мекенжайы.variables.tfфайлындағыkey_pair_nameайнымалысында көрсетілген атауы бар SSH кілті.
-
common-instance-private-ipшығуындағы IP мекенжайға ping орындаңыз:ping 192.168.199.XXXСәтті ping мысалдың дұрыс жұмыс істейтінін білдіреді:
PING 192.168.199.XXX (192.168.199.XXX) 56(84) bytes of data.64 bytes from 192.168.199.XXX: icmp_seq=1 ttl=63 time=1.82 ms64 bytes from 192.168.199.XXX: icmp_seq=2 ttl=63 time=0.875 ms64 bytes from 192.168.199.XXX: icmp_seq=3 ttl=63 time=0.903 ms64 bytes from 192.168.199.XXX: icmp_seq=4 ttl=63 time=0.966 ms^C--- 192.168.199.10 ping statistics ---4 packets transmitted, 4 received, 0% packet loss, time 3004msrtt min/avg/max/mdev = 0.875/1.139/1.815/0.391 ms
Егер Terraform көмегімен жасалған ресурстар енді қажет болмаса, оларды жойыңыз:
-
Terraform конфигурация файлдары бар директорияға өтіңіз.
-
Команданы орындаңыз:
terraform destroyРастауды сұрағанда,
yesенгізіңіз. -
Операцияның аяқталуын күтіңіз.