Как работает DNS и как это используется в DevOps?

«Как работает DNS и как это используется в DevOps?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps понимание DNS критически важно для развертывания, маршрутизации трафика и отказоустойчивости инфраструктуры. DNS преобразует удобочитаемые имена хостов (например, api.myapp.com) в IP-адреса.

Как это работает на практике в инфраструктуре:

  1. Развертывание и Blue-Green деплой: Мы используем DNS-записи для управления трафиком. Например, чтобы переключиться на новую версию приложения ("green"), мы обновляем IP-адрес в A-записи для app.mycompany.com с адреса старого стека ("blue") на адрес нового.

  2. Балансировка нагрузки: Вместо прямого указания IP-адреса балансировщика, мы настраиваем CNAME-запись, которая указывает на DNS-имя облачного LB (например, myapp-lb-1234567890.eu-west-1.elb.amazonaws.com). Это позволяет менять инфраструктуру за балансировщиком, не трогая основную запись приложения.

  3. Отказоустойчивость и геораспределение: Используются такие типы записей, как:

    • A/AAAA записи с Health Checks: Современные DNS-провайдеры (Route 53, Cloudflare) могут проверять здоровье эндпоинта и автоматически убирать его из DNS-ответов при падении.
    • GeoDNS: Возвращает разные IP-адреса в зависимости от географического местоположения пользователя, направляя его на ближайший дата-центр.

Пример диагностики с dig (ключевой инструмент):

# Получить все записи для домена
$ dig myapp.com ANY

# Проследить весь путь разрешения имени, полезно для отладки
$ dig +trace myapp.com

# Запросить конкретный тип записи (например, MX для почты)
$ dig myapp.com MX

# Указать конкретный DNS-сервер для запроса (например, проверить, что обновилось)
$ dig @8.8.8.8 myapp.com A

Важные для DevOps концепции:

  • TTL (Time to Live): Указывает, как долго резолверы и клиенты могут кэшировать ответ. При изменениях инфраструктуры низкий TTL (например, 60 секунд) ускоряет распространение изменений, но увеличивает нагрузку на DNS-серверы.
  • Private DNS: Используется внутри VPC или корпоративных сетей для разрешения имен внутренних сервисов (например, database.staging.vpc.internal).