Подключить приватную сеть облачной платформы к DNS-резолверу
Если приватная сеть облачной платформы подключена к DNS-резолверу, облачные серверы в этой сети могут резолвить доменные имена всех зон в рамках своего пула и проекта.
Мы рекомендуем создавать ресурсы по порядку. Если вы создаете все ресурсы единовременно, Terraform будет учитывать зависимости между ресурсами, которые вы указали в конфигурационном файле. Если зависимости не указаны, ресурсы будут создаваться параллельно, что может приводить к ошибкам. Например, ресурс, который требуется для создания другого ресурса, может быть еще не создан.
- Опционально: настройте провайдеры.
- Создайте приватную сеть и подсеть.
- Подключите сеть к DNS-резолверу.
- Укажите IP-адреса DNS-резолвера в настройках подсети.
Конфигурационные файлы
Пример файла для настройки провайдеров
terraform {
required_providers {
selectel = {
source = "selectel/selectel"
version = "~> 6.0"
}
openstack = {
source = "terraform-provider-openstack/openstack"
version = "2.1.0"
}
}
}
provider "selectel" {
domain_name = "123456"
username = "user"
password = "password"
auth_region = "ru-9"
auth_url = "https://cloud.api.selcloud.ru/identity/v3/"
}
resource "selectel_vpc_project_v2" "project_1" {
name = "project"
}
resource "selectel_iam_serviceuser_v1" "serviceuser_1" {
name = "username"
password = "password"
role {
role_name = "member"
scope = "project"
project_id = selectel_vpc_project_v2.project_1.id
}
}
provider "openstack" {
auth_url = "https://cloud.api.selcloud.ru/identity/v3"
domain_name = "123456"
tenant_id = selectel_vpc_project_v2.project_1.id
user_name = selectel_iam_serviceuser_v1.serviceuser_1.name
password = selectel_iam_serviceuser_v1.serviceuser_1.password
region = "ru-9"
}
Пример файла для подключения приватной сети к DNS-резолверу
resource "openstack_networking_network_v2" "network_1" {
name = "network"
port_security_enabled = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "subnet"
network_id = openstack_networking_network_v2.network_1.id
cidr = "192.168.0.0/24"
}
resource "selectel_private_dns_service_v1" "service_1" {
region = openstack_networking_network_v2.network_1.region
project_id = openstack_networking_network_v2.network_1.tenant_id
network_id = openstack_networking_network_v2.network_1.id
}
1. Опционально: настроить провайдеры
Если вы настроили провайдеры Selectel и OpenStack, пропустите этот шаг.
-
Убедитесь, что в панели управления вы создали сервисного пользователя с ролями
memberв области доступа Аккаунт иiam.admin. -
Создайте директорию для хранения конфигурационных файлов и отдельный файл с расширением
.tfдля настройки провайдеров. -
В файл для настройки провайдеров добавьте провайдеры Selectel и OpenStack:
terraform {required_providers {selectel = {source = "selectel/selectel"version = "~> 7.1.0"}openstack = {source = "terraform-provider-openstack/openstack"version = "2.1.0"}}}Здесь
version— версии провайдеров. Актуальную версию можно посмотреть в документации Selectel (в Terraform Registry и GitHub) и OpenStack (в Terraform Registry и GitHub).Подробнее о продуктах, услугах и сервисах, которыми можно управлять с помощью провайдеров, в инструкции Провайдеры Selectel и OpenStack.
-
Инициализируйте провайдер Selectel:
provider "selectel" {domain_name = "123456"username = "user"password = "password"auth_region = "ru-9"auth_url = "https://cloud.api.selcloud.ru/identity/v3/"}Здесь:
domain_name— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;username— имя сервисного пользователя с ролямиmemberв области доступа Аккаунт иiam.admin. Можно посмотреть в панели управления: в верхнем меню нажмите Аккаунт → раздел Сервисные пользователи (раздел доступен только Владельцу аккаунта и пользователю с рольюiam.admin);password— пароль сервисного пользователя. Можно посмотреть при создании пользователя или изменить на новый;auth_region— пул для авторизации, напримерru-9. Создавать ресурсы можно в других пулах. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Создайте проект:
resource "selectel_vpc_project_v2" "project_1" {name = "project"}Посмотрите подробное описание ресурса selectel_vpc_project_v2.
-
Создайте сервисного пользователя для доступа к проекту и назначьте ему роль
memberв области доступа Проект:resource "selectel_iam_serviceuser_v1" "serviceuser_1" {name = "username"password = "password"role {role_name = "member"scope = "project"project_id = selectel_vpc_project_v2.project_1.id}}Здесь:
username— имя пользователя;password— пароль пользователя. Пароль должен быть не короче восьми символов и содержать латинские буквы разных регистров и цифры;project_id— ID проекта. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты и выберите Облачные серверы → откройте меню проектов → в строке нужного проекта нажмите .
Посмотрите подробное описание ресурса selectel_iam_serviceuser_v1.
-
Инициализируйте провайдер OpenStack:
provider "openstack" {auth_url = "https://cloud.api.selcloud.ru/identity/v3"domain_name = "123456"tenant_id = selectel_vpc_project_v2.project_1.iduser_name = selectel_iam_serviceuser_v1.serviceuser_1.namepassword = selectel_iam_serviceuser_v1.serviceuser_1.passwordregion = "ru-9"}Здесь:
domain_name— номер аккаунта Selectel. Можно посмотреть в панели управления в правом верхнем углу;region— пул, напримерru-9. Все ресурсы будут создаваться в этом пуле. Список доступных пулов можно посмотреть в инструкции Матрицы доступности.
-
Если одновременно с настройкой провайдеров вы создаете ресурсы, то для ресурсов OpenStack добавьте аргумент
depends_on. Например, для ресурса openstack_networking_network_v2:resource "openstack_networking_network_v2" "network_1" {name = "private-network"admin_state_up = "true"depends_on = [selectel_vpc_project_v2.project_1,selectel_iam_serviceuser_v1.serviceuser_1]} -
Опционально: если вы хотите использовать зеркало, создайте отдельный конфигурационный файл Terraform CLI и добавьте в него блок:
provider_installation {network_mirror {url = "https://tf-proxy.selectel.ru/mirror/v1/"include = ["registry.terraform.io/*/*"]}direct {exclude = ["registry.terraform.io/*/*"]}}Подробнее о настройках зеркал в инструкции CLI Configuration File документации HashiCorp.
-
Откройте CLI.
-
Инициализируйте конфигурацию Terraform в директории:
terraform init -
Проверьте, что конфигурационные файлы составлены без ошибок:
terraform validate -
Отформатируйте конфигурационные файлы:
terraform fmt -
Проверьте, какие ресурсы будут созданы:
terraform plan -
Примените изменения и создайте ресурсы:
terraform apply -
Подтвердите создание — введите yes и нажмите Enter. Созданные ресурсы отобразятся в панели управления.
-
Если для создания ресурсов оказалось недостаточно квот, увеличьте квоты.
2. Создать приватную сеть и подсеть
resource "openstack_networking_network_v2" "network_1" {
name = "private-network"
admin_state_up = "true"
}
resource "openstack_networking_subnet_v2" "subnet_1" {
name = "private-subnet"
network_id = openstack_networking_network_v2.network_1.id
cidr = "192.168.199.0/24"
}
Здесь cidr — CIDR приватной подсети, например 192.168.199.0/24.
Посмотрите подробное описание ресурсов:
3. Подключить сеть к DNS-резолверу
resource "selectel_private_dns_service_v1" "service_1" {
region = openstack_networking_network_v2.network_1.region
project_id = openstack_networking_network_v2.network_1.tenant_id
network_id = openstack_networking_network_v2.network_1.id
}
Посмотрите подробное описание ресурса selectel_private_dns_service_v1.
4. Указать IP-адреса DNS-резолвера в настройках подсети
Вы можете указать IP-адреса DNS-резолвера в настройках подсети через панель управления или OpenStack CLI. Используйте подраздел Изменить DNS-серверы в приватной подсети инструкции Приватные сети и подсети.
IP-адреса DNS-резолвера в сети можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Облачные серверы → Приватный DNS → вкладка DNS-резолверы → строка сети → поле DNS-резолвер.