Подготовка
Ознакомитесь со статьей – Terraform быстрый старт.
Выполните все действия по настройке провайдера, составлению основных конфигурационных файлов.
Для настройки VPN-соединения нужно создать файл с именем vpn.tf и в нем описать конфигурацию требуемого подключения, используя пример ниже. Замените значения настроек на те, которые соответствуют вашему конкретному случаю.
Добавить описание ресурсов
После блока авторизации provider “openstack” {} необходимо добавить следующее:
resource "openstack_vpnaas_service_v2" "service_1" {
name = "my_service"
router_id = "Указать ID локального роутера"
admin_state_up = true
}
resource "openstack_vpnaas_ipsec_policy_v2" "policy_1" {
name = "testipsec"
}
resource "openstack_vpnaas_ike_policy_v2" "policy_2" {
name = "testike"
}
resource "openstack_vpnaas_endpoint_group_v2" "group_1" {
name = "Group1"
type = "subnet"
endpoints = ["Указать ID локальной подсети"]
}
resource "openstack_vpnaas_endpoint_group_v2" "group_2" {
name = "Group2"
type = "cidr"
endpoints = ["Указать CIDR удаленной подсети"]
}
resource "openstack_vpnaas_site_connection_v2" "conn_1" {
name = "TestVPN"
ikepolicy_id = openstack_vpnaas_ike_policy_v2.policy_2.id
ipsecpolicy_id = openstack_vpnaas_ipsec_policy_v2.policy_1.id
vpnservice_id = openstack_vpnaas_service_v2.service_1.id
psk = "secret"
peer_address = "Указать адрес удаленного маршрутизатора"
peer_id = "Указать адрес удаленного маршрутизатора"
local_ep_group_id = openstack_vpnaas_endpoint_group_v2.group_1.id
peer_ep_group_id = openstack_vpnaas_endpoint_group_v2.group_2.id
dpd {
action = "restart"
timeout = 42
interval = 21
}
}
Значение объектов
Для создания VPN-соединения, обязательны следующие параметры:
- openstack_vpnaas_service : Управляет VPN-сервисом. Основной параметр:
- router_id : ID роутера. Изменение этого параметра создает новый сервис. Если вы хотите использовать существующий роутер, укажите его ID.
- openstack_vpnaas_ipsec_policy : Управляет политикой IPSec. Основной параметр:
- name: Имя политики. Изменение этого параметра обновляет имя существующей политики.
- openstack_vpnaas_ike_policy : Управляет политикой IKE. Основной параметр:
- name: имя политики. Изменение этого параметра обновляет имя существующей политики.
- openstack_vpnaas_endpoint_group : Управляет группой конечных точек. Основные параметры:
- type : Тип конечных точек в группе. Возможные значения: subnet, cidr, network, router, vlan. Изменение этого параметра создает новую группу.
- endpoints : Список конечных точек одного типа, указанных в параметре type. Изменение этого параметра создает новую группу.
- openstack_vpnaas_site_connection : Управляет IPSec-подключением. Основные параметры:
- name : Имя подключения. Изменение этого параметра обновляет имя существующего подключения.
- ikepolicy_id : ID политики IKE. Изменение этого параметра создает новое подключение.
- ipsecpolicy_id : ID политики IPSec. Изменение этого параметра создает новое подключение.
- vpnservice_id : ID VPN-сервиса. Изменение этого параметра создает новое подключение.
- psk : Публичный ключ. Может быть любым значением типа string.
- peer_address : Публичный IPv4 или IPv6 адрес peer-шлюза или FQDN.
- peer_id : ID peer-роутера для аутентификации. Обычно совпадает с peer_address. Изменение этого параметра обновляет политику существующего подключения.
- local_ep_group_id : ID группы конечных точек для локальных частных подсетей. Требует указания peer_ep_group_id : Если не используется режим обратной совместимости. Изменение этого параметра обновляет существующее подключение.
- peer_ep_group_id : ID группы конечных точек для частных CIDR-адресов peer-подключения в формате net_address/prefix. Требует указания local_ep_group_id, если не используется режим обратной совместимости.
- dpd : Словарь настроек для протокола Dead Peer Detection (DPD). Включает в себя следующие ресурсы:
- action : Действие DPD. Возможные значения: clear, hold, restart, disabled, restart-by-peer. Значение по умолчанию: hold.
- timeout : Тайм-аут DPD в секундах. Принимаются данные типа positive integer, значения которых больше чем interval. Значение по умолчанию: 120.
- interval : Интервал DPD в секундах. Принимаются данные типа positive integer. Значение по умолчанию: 30.
Запуск развертывания
После добавления нового ресурса, стоит проверить корректность выполнения команды – terraform plan:
Terraform used the selected providers to generate the following execution plan.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# openstack_vpnaas_endpoint_group_v2.group_1 will be created
+ resource "openstack_vpnaas_endpoint_group_v2" "group_1" {
+ endpoints = [
+ "*****29a-1481-****-b3e1-*****2b32ac2",
]
+ id = (known after apply)
+ name = "Group1"
+ region = (known after apply)
+ tenant_id = (known after apply)
+ type = "subnet"
}
# openstack_vpnaas_endpoint_group_v2.group_2 will be created
+ resource "openstack_vpnaas_endpoint_group_v2" "group_2" {
+ endpoints = [
+ "192.168.1.0/24",
]
+ id = (known after apply)
+ name = "Group2"
+ region = (known after apply)
+ tenant_id = (known after apply)
+ type = "cidr"
}
# openstack_vpnaas_ike_policy_v2.policy_2 will be created
+ resource "openstack_vpnaas_ike_policy_v2" "policy_2" {
+ auth_algorithm = "sha1"
+ encryption_algorithm = "aes-128"
+ id = (known after apply)
+ ike_version = "v1"
+ name = "testike"
+ pfs = "group5"
+ phase1_negotiation_mode = "main"
+ region = (known after apply)
+ tenant_id = (known after apply)
}
# openstack_vpnaas_ipsec_policy_v2.policy_1 will be created
+ resource "openstack_vpnaas_ipsec_policy_v2" "policy_1" {
+ auth_algorithm = (known after apply)
+ encapsulation_mode = (known after apply)
+ encryption_algorithm = (known after apply)
+ id = (known after apply)
+ name = "testipsec"
+ pfs = (known after apply)
+ region = (known after apply)
+ tenant_id = (known after apply)
+ transform_protocol = (known after apply)
}
# openstack_vpnaas_service_v2.service_1 will be created
+ resource "openstack_vpnaas_service_v2" "service_1" {
+ admin_state_up = true
+ external_v4_ip = (known after apply)
+ external_v6_ip = (known after apply)
+ id = (known after apply)
+ name = "my_service"
+ region = (known after apply)
+ router_id = "d9ac****-0ebe-4534-9d5a-****69145***"
+ status = (known after apply)
+ tenant_id = (known after apply)
}
# openstack_vpnaas_site_connection_v2.conn_1 will be created
+ resource "openstack_vpnaas_site_connection_v2" "conn_1" {
+ admin_state_up = true
+ id = (known after apply)
+ ikepolicy_id = (known after apply)
+ initiator = (known after apply)
+ ipsecpolicy_id = (known after apply)
+ local_ep_group_id = (known after apply)
+ mtu = (known after apply)
+ name = "TestVPN"
+ peer_address = "212.**.**.145"
+ peer_ep_group_id = (known after apply)
+ peer_id = "212.**.**.145"
+ psk = "secret"
+ region = (known after apply)
+ tenant_id = (known after apply)
+ vpnservice_id = (known after apply)
+ dpd {
+ action = "restart"
+ interval = 21
+ timeout = 42
}
}
Удостоверившись, что ресурсы планируются создаться или удалиться, в зависимости от файла состояний, можно перейти к развертыванию:
terraform apply
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value:
Подтвердите выполнение командой yes.
Ресурсы создадутся, и информация будет добавлена в новый файл состояний.
Если какие-то ресурсы удалены из кода, но они присутствуют в файле состояния, то они будут удалены!
Применяйте команду terraform plan осторожно, во избежание непредвиденных последствий!