Назад в блог

DNS-служба Kubernetes: руководство для начинающих

DNS-служба Kubernetes: руководство для начинающих

Kubernetes, также известный как K8s, — это открытая система оркестрации для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Его портативность, гибкость и возможности автоматического масштабирования делают его широко используемой системой. Помимо всех выдающихся функций, возможность создания DNS-записей для служб и подов делает его непревзойденным по сравнению с другими программными системами. DNS-служба Kubernetes позволяет обращаться к службам по постоянным именам DNS вместо IP-адресов.

Предварительные требования

Чтобы получить максимальную пользу от этого руководства и лучше понять DNS-службу Kubernetes, обязательно освежите в памяти основы Kubernetes. Вам также будет полезно прочитать Обзор терминологии, компонентов и концепций DNS, чтобы лучше понять концепции DNS. Кроме того, обзор экосистемы Docker и основы технологии контейнеризации станут отличным преимуществом.

Что такое система DNS?

Система доменных имен (DNS) — это механизм для связывания различных видов информации с легко запоминающимися именами, такими как IP-адреса. Использование системы DNS для преобразования запрашиваемых имен в IP-адреса позволяет конечным пользователям легко и без усилий находить целевое доменное имя. Большинство кластеров Kubernetes включают внутреннюю службу DNS, настроенную по умолчанию, чтобы предложить легковесный подход для обнаружения служб. Даже когда поды и службы создаются, удаляются или перемещаются между узлами, встроенное обнаружение служб упрощает приложениям идентификацию и взаимодействие с кластерами Kubernetes.

В последних версиях Kubernetes, технические особенности DNS-службы Kubernetes изменились. Это руководство призвано познакомить вас с реализациями DNS-службы Kubernetes как на базе kube-dns, так и на базе CoreDNS. Мы подробно разберем DNS-записи Kubernetes и продемонстрируем, как работает DNS в Kubernetes.

Что входит в DNS-службу Kubernetes?

Ранее, до выпуска версии 1.11, DNS-служба Kubernetes базировалась на kube-dns. Однако безопасность и конфиденциальность по-прежнему вызывали серьезную озабоченность. Позже сообщество Kubernetes представило CoreDNS в новой версии 1.11 для решения проблем безопасности и стабильности kube-dns.

Независимо от того, какую версию программного обеспечения вы используете для управления DNS-записями, kube-dns и CoreDNS работают аналогичным образом:

  • Служба kube-dns и один или несколько подов создаются.
  • Служба kube-dns отслеживает API Kubernetes на предмет событий служб и конечных точек и соответствующим образом изменяет свои DNS-записи. Когда вы изменяете эти службы Kubernetes и связанные с ними поды путем создания, редактирования или удаления, эти события запускаются автоматически.
  • Kubelet назначает IP-адрес кластера службы kube-dns каждому новому поду в опцию etc/resolv.conf nameserver, а также подходящие параметры search для поддержки более коротких имен хостов:
  • После этого контейнеризированные приложения могут разрешать имена хостов, такие как example-service.namespace в соответствующий IP-адрес кластера.

Обзор DNS-записей Kubernetes

Давайте лучше разберем DNS-записи Kubernetes на примере. Полная DNS-запись типа A для службы Kubernetes будет выглядеть следующим образом:

service.namespace.svc.cluster.local

У пода будет запись в таком формате, которая будет представлять реальный IP-адрес пода:

10.32.0.125.namespace.pod.cluster.local

Кроме того, создаются SRV-записи для указанных портов службы Kubernetes:

В результате ваше приложение или микросервис может обращаться к простому и постоянному имени хоста для связи с другими службами или подами в кластере благодаря встроенному механизму обнаружения служб на основе DNS.

Разрешение более коротких имен хостов и поиск доменов

Вам не всегда нужно будет использовать полное имя хоста для доступа к другой службе из-за суффиксов домена поиска, заданных в resolv.conf файле. Если вы обращаетесь к службе в том же пространстве имен, вы можете просто вызвать ее по имени:

Добавьте other-service к запросу, если служба находится в другом пространстве имен:

Вам понадобится использовать как минимум следующее, если вы обращаетесь к поду:

Только суффиксы .svc автоматически дополняются в файле по умолчанию resolv.conf . Поэтому важно указать настройки вплоть до .pod. Далее давайте рассмотрим тонкости двух альтернативных реализаций DNS в Kubernetes, о которых мы узнали к этому моменту.

Реализация DNS в Kubernetes

В Kubernetes версии 1.11 появилось новое программное обеспечение для управления службой kube-dns , как упоминалось в предыдущем разделе. Основной причиной нового обновления было повышение производительности и безопасности службы. Давайте начнем с интеграции kube-dns с самого начала.

  1. kube-dns

В предыдущей версии Kubernetes 1.11 служба kube-dns работала в трех контейнерах в поде kube-dns в пространстве имен kube-system . Посмотрите на эти три контейнера ниже:

  • kube-dns: контейнер, который запускает SkyDNS и работает как служба разрешения DNS-запросов.
  • dnsmasq: ответы SkyDNS кэшируются с помощью dnsmasq, популярного легковесного DNS-резолвера и кэша.
  • sidecar: контейнер на стороне службы, который выполняет отправку метрик и реагирует на проверки работоспособности.

CoreDNS был создан в результате уязвимостей безопасности в Dnsmasq и проблем с производительностью масштабирования в SkyDNS.

  1. CoreDNS

В качестве новой службы DNS для Kubernetes, CoreDNS был обновлен до статуса General Availability в Kubernetes 1.11. Это означает, что он готов к промышленной эксплуатации и будет использоваться многими инструментами установки и управляемыми провайдерами Kubernetes в качестве службы DNS кластера по умолчанию.

CoreDNS — это гибкий и расширяемый DNS-сервер, который работает как DNS-кластер Kubernetes. Он выполняет все функции предыдущей системы. DNS-контейнер отвечает за разрешение и кэширование DNS-запросов. CoreDNS отвечает на проверки работоспособности и предоставляет метрики в одном контейнере. Кроме того, он устраняет несколько мелких недостатков и предоставляет новые возможности для решения проблем с производительностью и безопасностью:

  • Были разрешены некоторые конфликты между использованием stubDomains и внешних служб.
  • Благодаря рандомизации порядка возврата некоторых записей, CoreDNS может улучшить основанную на DNS балансировку нагрузки round-robin.
  • . Благодаря более эффективному перебору каждого из суффиксов домена поиска, определенных в resolv.conf, функция под названием autopath может сократить время ответа DNS при разрешении внешних имен хостов.
  • Даже если под не существует, kube-dns 10.32.0.125.namespace.pod.cluster.local всегда будет разрешать в 10.32.0.125. CoreDNS предлагает режим проверки подов (pods validated mode), который будет выполнять разрешение только в том случае, если существует под с правильным IP-адресом и пространством имен.

Чтобы расширить свои знания о Kubernetes endpoints, autopaths, и wildcards, ознакомьтесь с руководством по том, как Kubernetes позволяет читать данные зон из своего кластера.

Функции настройки

Kubernetes позволяет настраивать DNS-поды и кастомизировать разрешение DNS в кластере благодаря службе кастомизации DNS в Kubernetes. Администраторы могут использовать эти службы для изменения вышестоящих серверов имен или суффиксов домена поиска, определенных в resolv.conf. Кроме того, существует дополнительная функция для персонализации подов и контейнеров с помощью опции dnsConfig :

Kubernetes DNS Demo Pod Yaml

Обновление этой конфигурации приведет к принудительной перезаписи resolv.conf пода, что позволит изменениям вступить в силу. Описанная выше настройка создаст файл, содержащий строки nameserver 203.0.113.44 и search custom.dns.local , которые напрямую переносятся в обычные параметры resolv.conf .

Заключение

В этом руководстве мы познакомили вас с основами службы Kubernetes DNS и ее реализацией в различных версиях. Мы также рассмотрели записи Kubernetes DNS на примере. Кроме того, мы выделили некоторые дополнительные параметры конфигурации для настройки подов и разрешения DNS-запросов. Это охватывает основы службы Kubernetes DNS, но ваше обучение не должно на этом заканчиваться. Ознакомьтесь с официальной документацией Kubernetes, чтобы узнать больше об этой теме.

Чтобы расширить свои знания в области DevOps и погрузиться в основы Kubernetes, ознакомьтесь со следующими руководствами в нашем блоге:

Приятной работы!

author

Pranay Kapgate

Автор · CloudSigma

Preslav Dobrev — креативный дизайнер в CloudSigma, сосредоточенный на формировании последовательного корпоративного образа с помощью традиционных и инновационных маркетинговых каналов. Он умело сочетает художественное видение со стратегическим маркетингом, создавая убедительные истории бренда.

Комментарии

Комментариев пока нет. Будьте первым.