API облачных DNS ResourceRecordSets

1. Введение

64e18005b6cdcd83.png

Последнее обновление: 06.01.2021

Что такое Cloud DNS?

Посетите нашу главную страницу .

Что вы построите

В этом практическом занятии вы создадите управляемую зону Cloud DNS и соответствующие наборы записей ресурсов (ResourceRecordSets) с помощью gcloud для управления разрешением имен для экземпляра виртуальной машины.

Что вы узнаете

Как создавать, читать, удалять и обновлять отдельные объекты ResourceRecordSet.

Что вам понадобится

2. Настройка

Настройте свой проект на платформе Google Cloud Platform.

Войдите в gcloud

gcloud auth login

Создать проект

gcloud projects create my-codelab-project

Включите API облачного DNS.

gcloud services enable dns.googleapis.com

Для того чтобы это вступило в силу, может потребоваться несколько минут.

3. Создание частной управляемой зоны

ManagedZone содержит ResourceRecordSets.

Запишите доменное имя, для которого вы хотите добавить DNS-записи. В этом примере мы будем использовать "my-domain.com" и предположим, что ваш экземпляр виртуальной машины находится в сети по умолчанию.

gcloud dns managed-zones create my-zone \
    --description="ManagedZone for Cloud DNS ResourceRecordSets codelab." \
    --dns-name=my-domain.com. \
    --networks=default \
    --visibility=private

4. Управление наборами записей ресурсов

К концу этого раздела DNS-запросы по вашей виртуальной частной сети для вашего домена будут разрешаться в IP-адрес виртуальной машины.

Например, если IP-адрес вашей виртуальной машины — "1.2.3.4", и вы хотите, чтобы "my-domain.com." разрешался в этот IP-адрес, вам необходимо создать запись "A".

СОЗДАТЬ запись типа А

gcloud dns record-sets create "my-domain.com." --type="A" --ttl="60" --rrdatas="1.2.3.4" --zone="my-zone"
  • Позиционный аргумент "my-domain.com." , также известный как dnsName, — это имя, для которого мы хотим определить разрешение DNS-запросов.
  • –type : обозначает тип DNS-записи, которую мы пытаемся создать.
  • –ttl : обозначает время жизни этой записи.
  • –rrdatas : содержит фактический ответ на запрос.
  • –zone : необходимо указать, в какой управляемой зоне (ManagedZone) должна быть создана эта запись.

Подробнее о концепциях DNS можно прочитать здесь .

Теперь, когда вы создали запись A, вы можете проверить разрешение DNS-имен.

Подключитесь к своему компьютеру по SSH. В этом примере мы используем экземпляр виртуальной машины с именем "dns-codelab" в "us-central1-a".

gcloud compute ssh codelab --zone=us-central1-a

Установите dnsutils, чтобы иметь возможность использовать команду 'dig'.

sudo apt install dnsutils

запросить ваш домен

dig my-domain.com.

В результате должен получиться результат, аналогичный следующему.

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19979
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;my-domain.com.                        IN        A

;; ANSWER SECTION:
my-domain.com.                60        IN        A        1.2.3.4
...

СОЗДАТЬ, ИЗМЕНИТЬ и ПОЛУЧИТЬ запись CNAME

Теперь, когда вы сопоставили my-domain.com с 1.2.3.4, вам, вероятно, захочется убедиться, что www.my-domain.com также разрешается в 1.2.3.4. Записи для префиксов "www." не создаются автоматически.

Если вы запрашиваете www.my-domain.com.

dig www.my-domain.com.

вы получите результат, похожий на следующий:

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

указывает на отсутствие DNS-записи для этого домена.

Вместо создания еще одной записи типа A, следует создать запись типа CNAME, которая будет указателем на другую запись. Это позволит избежать необходимости изменять обе записи в случае, если потребуется использовать другой IP-адрес.

выйти из виртуальной машины

exit

Создать запись CNAME

gcloud dns record-sets create "www.my-domain.com." --type="CNAME" --ttl="60" --rrdatas="my-domin.com." --zone="my-zone"

Теперь, когда вы создали запись CNAME, вы можете проверить разрешение DNS-имен.

Снова подключитесь к своему компьютеру по SSH.

gcloud compute ssh codelab --zone=us-central1-a

запросить ваш домен

dig www.my-domain.com.

Вы должны были получить результат, аналогичный следующему.

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 61964
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
...

О нет! Похоже, при создании записи CNAME мы допустили опечатку в параметре "–rrdatas". Вместо того чтобы удалять и создавать запись заново, мы можем внести правильное изменение.

выйти из экземпляра виртуальной машины

exit

Исправьте запись CNAME

gcloud dns record-sets update "www.my-domain.com." --type="CNAME" --rrdatas="my-domain.com." --zone="my-zone"

Обратите внимание, что флаг "–ttl" можно опустить, поскольку мы его не изменяем, но все остальные флаги необходимо включить, так как они являются частью универсального уникального идентификатора ResourceRecordSet.

Мы также можем проверить, соответствует ли запись ожидаемому значению, используя gcloud.

gcloud dns record-sets describe "www.my-domain.com." --type="CNAME" --zone="my-zone"

который должен выдавать результат

NAME                    TYPE    TTL  DATA
www.my-domain.com.      CNAME   60  "my-domain.com."

Убедитесь, что запись CNAME разрешается корректно.

gcloud compute ssh codelab --zone=us-central1-a
dig www.my-domain.com.

Вы должны были получить результат, аналогичный следующему.

...
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7471
;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1
...
;; QUESTION SECTION:
;www.my-domain.com.                IN        A

;; ANSWER SECTION:
www.my-domain.com.        60        IN        CNAME         my-domain.com..
...

Удалить для очистки

Перед удалением управляемой зоны необходимо сначала удалить все наборы записей ресурсов (ResourceRecordSets) внутри этой зоны (за исключением записей NS и SOA, которые генерируются автоматически и всегда должны существовать в управляемой зоне).

выйти из экземпляра виртуальной машины

exit

Удалите запись CNAME.

gcloud dns record-sets delete "www.my-domain.com." --type="CNAME" --zone="my-zone"

Удалите запись A.

gcloud dns record-sets delete "my-domain.com." --type="A" --zone="my-zone"

Удалите управляемую зону

gcloud dns managed-zones delete "my-zone"

5. Поздравляем!

Поздравляем, вы успешно освоили управление наборами записей ресурсов (ResourceRecordSets)!

Дополнительная информация

Справочная документация