1. Введение

Последнее обновление: 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)!