Настройка Yandex Cloud DNS для доступа к кластеру Yandex Managed Service for ClickHouse® из других облачных сетей
Клиенты (например, виртуальные машины), которые находятся в той же облачной сети, что и кластер, могут обращаться к хостам кластера по их полному доменному имени (Fully Qualified Domain Name, FQDN). Однако, если клиенты находятся в другой облачной сети, эта возможность станет недоступна. Это происходит потому, что нужные сервисные зоны DNS создаются автоматически и обеспечивают возможность разрешения имен только в пределах одной облачной сети.
Сервис Yandex Cloud DNS позволяет настроить DNS-зону, общую сразу для нескольких облачных сетей. Это даст возможность обращаться к хостам кластера по их FQDN, даже если клиент и кластер находятся в разных облачных сетях.
Важно
Изнутри облачных сетей, для которых создана общая DNS-зона, станут недоступны по FQDN хосты кластера с включенным публичным доступом. Однако такие хосты будут по-прежнему доступны по их FQDN из интернета.
Чтобы настроить общую DNS-зону:
Если созданные ресурсы вам больше не нужны, удалите их.
Далее будет приведен пример, в котором:
- В облачной сети
cluster-net
размещаются кластер и ВМcluster-vm
. - Создается новая облачная сеть
vm-net
с ВМother-vm
. - Проверяется доступность кластера с этих ВМ.
- Создается DNS-зона
vpc-peering-zone
и проводится миграция. - Повторно проверяется доступность кластера с этих ВМ.
Перед началом работы
Назначьте роли
Убедитесь, что у вас есть права для работы с облачными сетями в каталогах, где будут располагаться сети cluster-net
и vm-net
.
У вас должна быть одна из следующих ролей:
admin
.editor
.vpc.admin
.
О том, как назначить роль, см. в документации Yandex Identity and Access Management.
Создайте кластер
- В командной строке перейдите в каталог, в котором будут расположены конфигурационные файлы Terraform с планом инфраструктуры примера. Если такой директории нет — создайте ее.
- Создайте кластер Managed Service for ClickHouse® из нескольких хостов с помощью Terraform, следуя примеру.
Создайте прочие ресурсы
-
Опишите новую облачную сеть
vm-net
с подсетьюvm-subnet-ru-central1-a
: CIDR172.17.1.0/24
, зона доступностиru-central1-a
. Для этого добавьте в конфигурационный файлnetworks.tf
следующие строки:networks.tfresource "yandex_vpc_network" "vm-net" { name = "vm-net" } resource "yandex_vpc_subnet" "vm-subnet-a" { name = "vm-subnet-ru-central1-a" zone = "ru-central1-a" network_id = yandex_vpc_network.vm-net.id v4_cidr_blocks = ["172.17.1.0/24"] }
-
Опишите группы безопасности:
- Дополнительную группу безопасности
cluster-vm-sg
в сетиcluster-net
для виртуальной машиныcluster-vm
. - Группу безопасности по умолчанию
other-vm-sg
в сетиvm-net
для ВМother-vm
.
Для этого добавьте в конфигурационный файл
security-groups.tf
следующие строки:security-groups.tfresource "yandex_vpc_security_group" "cluster-vm-sg" { name = "cluster-vm-sg" network_id = yandex_vpc_network.cluster-net.id ingress { description = "Allow any ingress traffic" protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] } egress { description = "Allow any egress traffic" protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] } } resource "yandex_vpc_default_security_group" "other-vm-sg" { network_id = yandex_vpc_network.vm-net.id ingress { description = "Allow any ingress traffic" protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] } egress { description = "Allow any egress traffic" protocol = "ANY" v4_cidr_blocks = ["0.0.0.0/0"] } }
Важно
Приведенные выше группы безопасности разрешают прохождение любого трафика в любом направлении и используются в демонстрационных целях. Это позволяет устанавливать на ВМ необходимые для подключения утилиты и подключаться к кластеру.
Для реальных задач настройте группы безопасности так, чтобы они разрешали только необходимый трафик.
- Дополнительную группу безопасности
-
Опишите ВМ, которые будут использоваться при процедуре миграции и при проверке работы DNS:
cluster-vm
: в облачной сетиcluster-net
(подсетьcluster-subnet-ru-central1-a
), с группой безопасностиcluster-vm-sg
.other-vm
: в облачной сетиvm-net
(подсетьvm-subnet-ru-central1-a
), с группой безопасностиother-vm-sg
.
Для этого создайте конфигурационный файл
vms.tf
с описанием ВМ.В этот конфигурационный файл также добавьте открытые части SSH-ключей, чтобы можно было подключаться к ВМ по SSH.
vms.tfresource "yandex_compute_disk" "boot-disk-1" { name = "boot-disk" type = "network-hdd" zone = "ru-central1-a" size = "20" image_id = fd81hgrcv6ls******** } resource "yandex_compute_disk" "boot-disk-2" { name = "boot-disk" type = "network-hdd" zone = "ru-central1-a" size = "20" image_id = fd81hgrcv6ls******** } resource "yandex_compute_instance" "cluster-vm" { name = "cluster-vm" platform_id = "standard-v3" zone = "ru-central1-a" resources { cores = 2 memory = 2 } boot_disk { disk_id = yandex_compute_disk.boot-disk-1.id } network_interface { subnet_id = yandex_vpc_subnet.cluster-subnet-a.id security_group_ids = [yandex_vpc_security_group.cluster-vm-sg.id] nat = true } metadata = { ssh-keys = "<любое_имя_пользователя>:<содержимое_SSH-ключа>" } } resource "yandex_compute_instance" "other-vm" { name = "other-vm" platform_id = "standard-v3" zone = "ru-central1-a" resources { cores = 2 memory = 2 } boot_disk { disk_id = yandex_compute_disk.boot-disk-2.id } network_interface { subnet_id = yandex_vpc_subnet.vm-subnet-a.id security_group_ids = [yandex_vpc_default_security_group.other-vm-sg.id] nat = true } metadata = { ssh-keys = "<любое_имя_пользователя>:<содержимое_SSH-ключа>" } }
Подробнее процедура создания ВМ описана в документации Yandex Compute Cloud.
-
Проверьте корректность файлов конфигурации Terraform:
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Примените сделанные изменения:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Настройте маршрутизацию между облачными сетями
Настройте маршрутизацию между облачными сетями cluster-net
и vm-net
таким образом, чтобы любая подсеть одной сети была доступна из любой подсети другой сети.
Существует несколько способов организовать такую маршрутизацию, см. сценарии сетевой маршрутизации. Например, можно создать туннель IPSec.
Проверьте доступность кластера (необязательный шаг)
-
Подключитесь к виртуальным машинам
cluster-vm
иother-vm
по SSH.Важно
-
Если вы создали виртуальные машины с Ubuntu 20.04 LTS из образа
fd81hgrcv6ls********
Yandex Cloud Marketplace, используйте имя пользователяubuntu
при подключении. -
Если вы использовали другой образ, имя пользователя может отличаться. О том, как узнать это имя, см. в документации Yandex Compute Cloud.
-
-
Попытайтесь подключиться к кластеру:
-
Из виртуальной машины
cluster-vm
, которая находится в той же облачной сети, что и кластер.Подключение будет успешным.
-
Из ВМ
other-vm
, которая находится в другой облачной сети.Подключение будет неуспешным, т. к. будет невозможно узнать IP-адрес хоста кластера по FQDN из другой сети. Однако, вы можете узнать IP-адрес хоста кластера и подключиться к нему по IP-адресу: такое подключение будет успешным.
Далее будет показано, как с помощью настройки общей DNS-зоны сохранить возможность подключения к кластеру из другой облачной сети с использованием FQDN.
-
Создайте зону в Cloud DNS
Чтобы получить возможность разрешать FQDN кластера в IP-адреса из других облачных сетей, нужно создать DNS-зону, которая будет включать в себя необходимые облачные сети.
Создайте внутреннюю DNS-зону vpc-peering-zone
, которая обеспечит возможность разрешения FQDN кластера из облачных сетей vm-net
и cluster-net
:
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры примера.
-
Создайте конфигурационный файл
dns.tf
с описанием DNS-зоны:dns.tfresource "yandex_dns_zone" "vpc-peering-zone" { name = "vpc-peering-zone" zone = "mdb.yandexcloud.net." public = false private_networks = [yandex_vpc_network.vm-net.id, yandex_vpc_network.cluster-net.id] }
-
Проверьте корректность файлов конфигурации Terraform:
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры.
-
Выполните команду:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
-
Примените сделанные изменения:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
-
Обеспечьте миграцию DNS-записей в зону
DNS-записи для существующего до создания DNS-зоны кластера не мигрируют автоматически в эту DNS-зону.
Чтобы DNS-записи для такого кластера мигрировали в новую DNS-зону, необходимо, чтобы поменялась хотя бы одна DNS-запись во внутренних зонах облачных сетей cluster-net
и vm-net
.
Для этого можно, например, создать по одной виртуальной машине в каждой облачной сети. Эти ВМ можно удалить после миграции DNS-записей.
Но, поскольку ранее уже были созданы ВМ cluster-vm
и other-vm
, для достижения желаемого эффекта достаточно остановить и затем запустить их.
Когда процесс миграции будет завершен, в DNS-зоне с именем vpc-peering-zone
появятся DNS-записи кластера.
Совет
Перед миграцией DNS-записей production-кластеров выполните миграцию записей в тестовом каталоге с тестовым кластером. Это позволит убедиться в том, что процесс миграции происходит без ошибок.
Проверьте доступность кластера
-
Подключитесь к ВМ
cluster-vm
иother-vm
по SSH.Важно
-
Если вы создали виртуальные машины с Ubuntu 20.04 LTS из образа
fd81hgrcv6ls********
Yandex Cloud Marketplace, используйте имя пользователяubuntu
при подключении. -
Если вы использовали другой образ, имя пользователя может отличаться. О том, как узнать это имя, см. в документации Yandex Compute Cloud.
-
-
Попытайтесь подключиться к кластеру:
- Из виртуальной машины
cluster-vm
, которая находится в той же облачной сети, что и кластер. - Из ВМ
other-vm
, которая находится в другой облачной сети.
Оба подключения должны выполниться успешно.
- Из виртуальной машины
Удалите созданные ресурсы
Если созданные ресурсы вам больше не нужны, удалите их:
-
В командной строке перейдите в каталог, в котором расположены актуальные конфигурационные файлы Terraform с планом инфраструктуры примера.
-
Выполните команду:
terraform destroy
-
Введите слово
yes
и нажмите Enter.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc