Модуль kube-dns обеспечивает работу сервиса разрешения доменных имён на базе CoreDNS в Deckhouse Kubernetes Platform (DKP).
Подробнее о настройках модуля и примерах его использования можно узнать в соответствующем разделе документации.
Модуль kube-dns
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля kube-dns на уровне 2 модели C4 и его взаимодействие с другими компонентами Deckhouse Kubernetes Platform (DKP) показаны на следующей диаграмме:

Компоненты модуля
Модуль kube-dns состоит из следующих компонентов:
-
D8-kube-dns (Deployment) — основной компонент модуля, реализующий DNS-сервер в кластере Kubernetes.
Компонент d8-kube-dns отслеживает изменения стандартных ресурсов Service, EndpointSlice, Namespace, Pod, а также периодически запрашивает ресурсы Node. На основе полученных данных d8-kube-dns обновляет записи в локальной базе объектов.
Состоит из следующих контейнеров:
- coredns — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для защищённого доступа к метрикам coredns. Является Open Source-проектом.
-
D8-kube-dns-sts-pods-hosts-appender-webhook (Deployment) — опциональный компонент, состоящий из одного контейнера webhook.
Deckhouse-контроллер модуля
deckhouseсоздаёт этот компонент, если в ModuleConfig задан параметр.spec.settings.clusterDomainAliases.Компонент реализует мутирующий вебхук-сервер, добавляющий init-контейнер render-etc-hosts-with-cluster-domain-aliases в под, созданный StatefulSet-контроллером, если в спецификации пода указана опция
.spec.subdomain.Init-контейнер изменяет файл
/etc/hosts, чтобы подсистема разрешения имён корректно работала с алиасами домена кластера.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- наблюдение за стандартными ресурсами Service, Endpoint, EndpointSlice, Namespace, Pod и Node;
- авторизация запросов на получение метрик.
С модулем взаимодействуют следующие внешние компоненты:
- Kube-apiserver — изменение ресурсов Pod, созданных StatefulSet-контроллером.
- Prometheus-main — собирает метрики модуля.
Модуль node-local-dns
Модуль node-local-dns предоставляет на каждом узле кластера кеширующий DNS-сервис и механизм перенаправления DNS-запросов, тем самым снижая нагрузку на coredns модуля kube-dns.
В зависимости от используемого CNI-плагина модуль node-local-dns реализует разные механизмы перенаправления DNS-запросов:
- при использовании
cni-ciliumза перенаправление DNS-запросов отвечает Cilium, который использует для этого кастомный ресурс CiliumLocalRedirectPolicy; - при использовании
cni-flannelилиcni-simple-bridgeза перенаправление DNS-запросов отвечает iptables.
Подробнее о настройках модуля и примерах его использования можно узнать в соответствующем разделе документации.
При использовании cni-cilium
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля node-local-dns при использовании Cilium в качестве CNI-плагина на уровне 2 модели C4 и его взаимодействие с другими компонентами Deckhouse Kubernetes Platform (DKP) показаны на следующей диаграмме:

Компоненты модуля
Модуль node-local-dns состоит из следующих компонентов:
-
Node-local-dns (DaemonSet) — основной компонент модуля, реализующий кеширующий DNS-сервер в кластере Kubernetes.
Компонент node-local-dns отслеживает изменения стандартных ресурсов EndpointSlice и на их основе обновляет список DNS-серверов для перенаправления запросов.
Состоит из следующих контейнеров:
- check-linux-kernel — init-контейнер, выполняющий проверку версии ядра Linux;
- coredns — основной контейнер;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для защищенного доступа к метрикам coredns. Является Open Source-проектом.
-
Stale-dns-connections-cleaner (DaemonSet) — компонент, который удаляет устаревшие UDP-соединения, оставшиеся после перезапуска Pod
node-local-dns. Состоит из одного контейнера stale-dns-connections-cleaner.Компонент имеет привилегированный доступ к сетевой системе каждого узла. В Linux для этого требуется capability
CAP_NET_ADMIN. Такой доступ необходим для выполнения операций с сетевыми подключениями на уровне ядра ОС Linux. -
Safe-updater (Deployment) — компонент, обеспечивающий безопасный перезапуск node-local-dns при изменении спецификации DaemonSet.
Safe-updater проверяет, что Cilium на узле запущен и находится в корректном состоянии, и только после этого отправляет команду на удаление Pod
node-local-dns.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- наблюдение за стандартными ресурсами EndpointSlice, DaemonSet, ControllerRevision и Pod;
- периодическое получение ресурсов Node;
- удаление Pod
node-local-dnsпри устаревании конфигурации DaemonSet; - авторизация запросов на получение метрик.
-
D8-kube-dns — выполнение DNS-запросов.
С модулем взаимодействуют следующие внешние компоненты:
- Prometheus-main — собирает метрики модуля.
При использовании cni-flannel или cni-simple-bridge
Архитектура модуля
Для упрощения схемы приняты следующие допущения:
- На схеме показано, что контейнеры разных подов взаимодействуют друг с другом напрямую. Фактически они взаимодействуют через соответствующие сервисы Kubernetes (внутренние балансировщики). Названия сервисов не указываются, если они очевидны из контекста. В остальных случаях название сервиса указано над стрелкой.
- Поды могут быть запущены в нескольких репликах, однако на схеме все поды изображены в одной реплике.
Архитектура модуля node-local-dns при использовании CNI-плагина cni-flannel или cni-simple-bridge на уровне 2 модели C4 и его взаимодействие с другими компонентами Deckhouse Kubernetes Platform (DKP) показаны на следующей диаграмме:

Компоненты модуля
Модуль node-local-dns состоит из следующих компонентов:
-
Node-local-dns (DaemonSet) — основной компонент модуля, реализующий кеширующий DNS-сервер в кластере Kubernetes.
Компонент node-local-dns отслеживает изменения стандартных ресурсов EndpointSlice и на их основе обновляет список DNS-серверов для перенаправления запросов.
Состоит из следующих контейнеров:
- iptables-wrapper — init-контейнер, выполняющий подготовку необходимых для работы с iptables исполняемых файлов;
- coredns — основной контейнер;
- iptables-loop — сайдкар-контейнер, обновляющий iptables-правила перенаправления DNS-запросов с учётом готовности node-local-dns;
- kube-rbac-proxy — сайдкар-контейнер с авторизующим прокси на основе Kubernetes RBAC для организации защищённого доступа к метрикам контейнера coredns. Является Open Source-проектом.
Взаимодействия модуля
Модуль взаимодействует со следующими компонентами:
-
Kube-apiserver:
- наблюдение за стандартными ресурсами EndpointSlice;
- авторизация запросов на получение метрик.
-
D8-kube-dns — выполнение DNS-запросов.
С модулем взаимодействуют следующие внешние компоненты:
- Prometheus-main — собирает метрики модуля.