CoreDNS — это DNS‑сервер, который обеспечивает разрешение доменных имён для кластеров Kubernetes с помощью цепочечных плагинов.
CoreDNS — это программное обеспечение с открытым исходным кодом, являющееся частью CNCF. Оно предоставляет способы обнаружения облачных сервисов друг другом в развертываниях cloud native. CoreDNS использует архитектуру цепочки плагинов, позволяющую гибко настраивать и эффективно обрабатывать DNS, комбинируя плагины по мере необходимости. При использовании в кластере Kubernetes CoreDNS может автоматически обнаруживать сервисы в кластере и обеспечивать разрешение доменных имён для этих сервисов. Работая с DNS‑серверами, CoreDNS может разрешать внешние доменные имена для рабочих нагрузок в кластере.
Это дополнение устанавливается по умолчанию при создании кластера.
Kubernetes поддерживает CoreDNS в качестве официального DNS по умолчанию для всех кластеров в дальнейшем.
Официальный веб‑сайт CoreDNS: https://coredns.io/
Сообщество с открытым исходным кодом: https://github.com/coredns/coredns
Для получения подробностей см. DNS.
Чтобы корректно запустить CoreDNS или обновить CoreDNS в кластере, убедитесь, что количество доступных узлов в кластере больше или равно количеству pod‑ов CoreDNS и все pod‑ы CoreDNS находятся в состоянии Running. В противном случае дополнение будет работать некорректно или обновление завершится неудачей.
Это дополнение устанавливается по умолчанию. Если оно было удалено по какой‑то причине, вы можете переустановить его, выполнив следующие действия:
Малый вариант может обрабатывать до 2500 внешних и 10 000 внутренних доменных имен QPS. Средняя спецификация может обрабатывать до 5000 внешних и 20 000 внутренних доменных имен QPS. Большая спецификация может обрабатывать до 10 000 внешних и 40 000 внутренних доменных имен QPS.
Узлы | Рекомендуемый QPS | Pods | Запрошенные vCPU | Лимит vCPU | Запрошенная память | Лимит памяти |
|---|---|---|---|---|---|---|
50 | 2500 | 2 | 500m | 500m | 512 MiB | 512 MiB |
200 | 5000 | 2 | 1000m | 1000m | 1024 MiB | 1024 MiB |
1000 | 10000 | 2 | 2000m | 2000m | 2048 MiB | 2048 MiB |
2000 | 20000 | 4 | 2000m | 2000m | 2048 MiB | 2048 MiB |
Parameter | Description |
|---|---|
Stub Domain | Сервер доменных имен для пользовательского доменного имени, представленный в виде пар ключ‑значение. Ключом является суффикс доменного имени, а значением — один или несколько IP‑адресов DNS, например, acme.local -- 1.2.3.4,6.7.8.9. Для получения подробной информации см. Configuring the Stub Domain for CoreDNS. CAUTION: В пользовательских доменных именах недопустимы заглавные буквы. |
Extended Parameter Settings |
Пример:
|
Имя плагина | Тип | Описание |
|---|---|---|
bind | Конфигурация по умолчанию | IP‑адрес хоста, прослушиваемый CoreDNS. Сохраните значение по умолчанию {$POD_IP}. Для получения подробностей см. bind. |
cache | Конфигурация по умолчанию | Включает кэш DNS. Для получения подробностей см. cache. Если версия дополнения 1.25.10 или новее, кэш servfail можно отключить. Чтобы отключить кэш servfail, установите configBlock в значение servfail 0. В противном случае единица измерения кэша servfail — секунды, и её нельзя опустить. |
errors | Конфигурация по умолчанию | Ошибки записываются в stdout. Для получения подробной информации см. errors. |
health | Конфигурация по умолчанию | Проверка работоспособности CoreDNS. Она прослушивает {$POD_IP}:8080. Сохраните настройку по умолчанию. В противном случае проверка работоспособности CoreDNS завершится с ошибкой, и дополнение будет постоянно перезапускаться. Для получения подробной информации см. health. |
ready | Конфигурация по умолчанию | Готов ли сервер бэкенда принимать трафик. Он прослушивает {$POD_IP}:8081. Если сервер бэкенда не готов, CoreDNS приостановит разрешение DNS, пока сервер бэкенда не станет готов. Для получения подробной информации см. ready. |
kubernetes | Конфигурация по умолчанию | Плагин CoreDNS Kubernetes, который обеспечивает возможность разбора сервисов в кластере. Для получения подробной информации см. kubernetes. |
loadbalance | Конфигурация по умолчанию | DNS‑балансировщик round‑robin, который случайным образом переставляет порядок записей A, AAAA и MX в ответе. Для получения подробной информации см. loadbalance. |
prometheus | Конфигурация по умолчанию | API для получения метрик CoreDNS. Он прослушивает {$POD_IP}:9153 по умолчанию. Сохраните настройку по умолчанию. В противном случае Prometheus не сможет собирать метрики CoreDNS. Для получения подробной информации см. Prometheus. |
forward | Конфигурация по умолчанию | Перенаправляет любые запросы, которые не находятся в домене кластера Kubernetes, к предопределённым резольверам (/etc/resolv.conf). Для получения подробной информации см. forward. |
reload | Конфигурация по умолчанию | Автоматически перезагружает изменённые Corefiles. После изменения ConfigMap подождите две минуты, чтобы изменение вступило в силу. Для получения подробной информации см. reload. |
log | Расширенная конфигурация | Включает логирование CoreDNS. Для получения подробной информации см. log. Ниже приведён пример:
|
template | Расширенная конфигурация | Шаблон быстрого ответа, где AAAA указывает запрос IPv6. Если NXDOMAIN возвращается в ответе rcode, результат разрешения IPv6 не возвращается. Подробнее см. template. Следующий пример:
|
Параметр | Описание |
|---|---|
Multi-AZ Deployment |
|
Node Affinity |
|
Толерация | Использование как taint‑ов, так и толераций позволяет (но не требует) pod‑ам Deployment дополнения планироваться на узлах с соответствующими taint‑ами и обеспечивает контроль над политиками выселения pod‑ов, когда узлы‑хосты помечены taint‑ами. Дополнение применяет толерации по умолчанию для taint‑ов node.kubernetes.io/not-ready и node.kubernetes.io/unreachable. Временное окно толерации составляет 60 секунд. Подробности см. в Configuring Tolerance Policies. |
Компонент | Описание | Тип ресурса |
|---|---|---|
CoreDNS | DNS‑сервер для кластеров | Deployment |
Если вы устанавливаете add-on CoreDNS, конфигурация Corefile view недоступна. Эта конфигурация поддерживается только при редактировании или обновлении add-on.
После включения функции ConfigMap CoreDNS в пространстве имён kube-system будет напрямую сконфигурирован в формате Corefile. Любые существующие конфигурации stub domain и параметры, такие как parameterSyncStrategy, servers и upstream_nameservers в расширенных настройках, более не будут действовать. Важно убедиться, что конфигурация Corefile точна.
Для описания формата Corefile см. Configuration.
DNS policies can be configured per pod. Kubernetes supports DNS policies Default, ClusterFirst, ClusterFirstWithHostNet, and None. For details, see DNS for Services and Pods. These policies are specified in the pod-specific dnsPolicy field.
Маршрутизация
Без конфигураций stub domain: Любой запрос, который не соответствует настроенному суффиксу домена кластера, например www.kubernetes.io, перенаправляется к upstream‑DNS‑серверу, унаследованному от узла.
С конфигурациями stub domain: Если stub‑домены и upstream‑DNS‑серверы настроены, DNS‑запросы маршрутизируются согласно следующему потоку:
Рисунок 1 Маршрутизация
