0Pricing
Kubernetes Basics · Урок

DNS и обнаружение служб

Поймите, как Pod находят друг друга с помощью встроенного DNS Kubernetes и как работает обнаружение служб.

«DNS и обнаружение служб» — бесплатный урок Kubernetes Basics на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kubernetes Basics, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kubernetes Basics содержит 4 уроков всего.

Проблема обнаружения сервисов

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

Вместо IP-адреса вы обращаетесь к стабильному имени.

DNS кластера

В каждом кластере работает сервис DNS (обычно CoreDNS). Он автоматически создаёт DNS-записи для сервисов и подов, поэтому имена преобразуются в правильный ClusterIP.

DNS-имена сервисов

Сервис получает DNS-имя по предсказуемому шаблону:

service-name.namespace.svc.cluster.local

В пределах одного пространства имён можно использовать только короткое имя service-name.

# from a Pod in the same namespace
curl http://payment-service:8080

# fully qualified, from any namespace
curl http://payment-service.shop.svc.cluster.local:8080

Пространства имён и имена

Пространство имён является частью имени. Чтобы обратиться к сервису в другом пространстве имён, укажите его: service.namespace.

# Pod in 'frontend' namespace calling 'backend' namespace
curl http://api.backend.svc.cluster.local

Проверка DNS из пода

Для проверки разрешения имён можно запустить временный под.

kubectl run dnstest --image=busybox:1.36 --rm -it --restart=Never -- nslookup payment-service

Как CoreDNS разрешает имена

Когда под запрашивает имя, запрос отправляется в CoreDNS. CoreDNS находит соответствующий сервис и возвращает его ClusterIP. Для сервисов без виртуального IP-адреса CoreDNS напрямую возвращает IP-адреса подов.

Сервисы без виртуального IP-адреса

Сервис без виртуального IP-адреса (clusterIP: None) не использует один виртуальный IP-адрес. Вместо этого DNS возвращает отдельные IP-адреса подов, что особенно важно для приложений с состоянием, которые обращаются к подам напрямую.

apiVersion: v1
kind: Service
metadata:
  name: db
spec:
  clusterIP: None
  selector:
    app: db
  ports:
  - port: 5432

DNS-записи подов

При использовании сервиса без виртуального IP-адреса каждый обслуживаемый им под также может получить собственную DNS-запись. Это полезно для StatefulSets, в которых поды имеют стабильные идентификаторы, например db-0 и db-1.

# stable per-Pod name in a StatefulSet
curl http://db-0.db.default.svc.cluster.local:5432

Проверка resolv.conf пода

Kubernetes добавляет конфигурацию DNS в каждый под. Домены поиска позволяют правильно разрешать короткие имена.

kubectl exec -it mypod -- cat /etc/resolv.conf
# nameserver 10.96.0.10
# search default.svc.cluster.local svc.cluster.local cluster.local

Переменные окружения и DNS

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

Распространённые проблемы с DNS

  • Забыть указать пространство имён при обращении между пространствами имён
  • Ожидать DNS-запись для сервиса, у которого нет соответствующих подов (нет конечных точек)
  • Кэшировать устаревшие IP-адреса в приложении вместо повторного разрешения имени

Быстрая проверка

Выберите правильный формат DNS-имени.

Итоги

Вы узнали, что Kubernetes использует CoreDNS, чтобы предоставлять сервисам стабильные DNS-имена по шаблону service.namespace.svc.cluster.local. Короткие имена работают внутри пространства имён, сервисы без виртуального IP-адреса предоставляют IP-адреса отдельных подов, а DNS всегда отражает текущее состояние кластера.

Часто задаваемые вопросы

Урок «DNS и обнаружение служб» бесплатный?

Да — полный текст урока «DNS и обнаружение служб» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kubernetes Basics, подпишись на CoddyKit PRO. Курс Kubernetes Basics содержит 4 уроков всего.

Чему я научусь в уроке «DNS и обнаружение служб»?

Поймите, как Pod находят друг друга с помощью встроенного DNS Kubernetes и как работает обнаружение служб. Ты практикуешь Kubernetes Basics с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kubernetes Basics?

Предыдущий опыт не требуется. Kubernetes Basics на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «DNS и обнаружение служб»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kubernetes Basics?

Да. Каждый урок Kubernetes Basics включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Открытие доступа к приложениям с помощью сервисов
  2. Типы сервисов: ClusterIP, NodePort, LoadBalancer
  3. Ingress для внешнего доступа
  4. DNS и обнаружение служб
← Назад к Kubernetes Basics