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‑ы находятся в состоянии Running. В противном случае дополнение будет работать некорректно или обновление завершится неудачей.
Это дополнение устанавливается по умолчанию. Если оно было удалено по какой‑то причине, вы можете переустановить его, выполнив следующие шаги:
Малый вариант может обрабатывать до 2500 внешних и 10,000 внутренних доменных имен QPS. Средняя спецификация может обрабатывать до 5000 внешних и 20,000 внутренних доменных имен QPS. Большая спецификация может обрабатывать до 10,000 внешних и 40,000 внутренних доменных имен QPS.
Nodes | Recommended QPS | Pods | Requested vCPUs | vCPU Limit | Requested Memory | Memory Limit |
|---|---|---|---|---|---|---|
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 |
Параметр | Описание |
|---|---|
Stub Domain | Сервер доменных имен для пользовательского доменного имени, представленный в виде пар ключ‑значение. Ключ — суффикс доменного имени, значение — один или несколько IP‑адресов DNS, например, acme.local -- 1.2.3.4,6.7.8.9. Для получения подробной информации см. Configuring the Stub Domain for CoreDNS. ВНИМАНИЕ: В пользовательских доменных именах недопустимы заглавные буквы. |
Extended Parameter Settings |
Пример:
|
Plugin Name | Type | Description |
|---|---|---|
bind | Конфигурация по умолчанию | IP‑адрес, прослушиваемый CoreDNS. Сохраните значение по умолчанию {$POD_IP}. Для получения подробностей см. bind. |
cache | Конфигурация по умолчанию | Включает кэш DNS. Для получения подробностей см. cache. Если версия дополнения 1.25.10 или новее, кэш servfail можно отключить. Чтобы отключить кэш servfail, задайте configBlock значение servfail 0. В противном случае единица измерения кэша servfail — секунда, и её нельзя опустить. |
errors | Конфигурация по умолчанию | Ошибки записываются в stdout. Для получения подробностей см. errors. |
health | Конфигурация по умолчанию | Health check for CoreDNS. It listens on {$POD_IP}:8080. Keep the default setting. Otherwise, the CoreDNS health check will fail and the add-on will restart repeatedly. For details, see health. |
ready | Конфигурация по умолчанию | Определяет, готов ли backend server принимать трафик. Он прослушивает {$POD_IP}:8081. Если backend server не готов, CoreDNS приостановит разрешение DNS, пока сервер не станет готов. Для получения подробностей см. ready. |
kubernetes | Конфигурация по умолчанию | Плагин CoreDNS Kubernetes, предоставляющий возможность разбора сервисов в кластере. Для получения подробностей см. kubernetes. |
loadbalance | Конфигурация по умолчанию | Round-robin DNS‑балансировщик, который случайным образом меняет порядок записей 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. Ниже приведён пример:
|
Parameter | Description |
|---|---|
Multi-AZ Deployment |
|
Node Affinity |
|
Toleration | Использование как taints, так и tolerations позволяет (не принудительно) pod‑ам Deployment дополнения планироваться на узел с соответствующими taints и может управлять политиками выселения pod‑ов Deployment после пометки узлов taints. Дополнение добавляет политику toleration по умолчанию для taint node.kubernetes.io/not-ready и taint node.kubernetes.io/unreachable соответственно. Окно времени toleration составляет 60 с. Подробности см. в Configuring Tolerance Policies. |
Компонент | Описание | Тип ресурса |
|---|---|---|
CoreDNS | DNS‑сервер для кластеров | Развертывание |
Если вы устанавливаете дополнение CoreDNS, конфигурация Corefile view недоступна. Эта конфигурация поддерживается только при редактировании или обновлении дополнения.
После включения функции ConfigMap CoreDNS в пространстве имён kube-system будет напрямую сконфигурирован в формате Corefile. Любые существующие конфигурации stub domain и параметры, такие как parameterSyncStrategy, servers и upstream_nameservers в расширенных настройках, более не будут действовать. Важно убедиться, что конфигурация Corefile точна.
Для описания формата Corefile см. Configuration.
Политики DNS можно настроить для каждого pod. Kubernetes поддерживает политики DNS Default, ClusterFirst, ClusterFirstWithHostNet и None. Подробнее см. DNS for Services and Pods. Эти политики указываются в специфичном для pod поле dnsPolicy.
Маршрутизация
Without stub domain configurations: Любой запрос, который не соответствует настроенному суффиксу домена кластера, например www.kubernetes.io, перенаправляется к upstream‑DNS‑серверу, унаследованному от узла.
With stub domain configurations: Если stub‑домены и upstream‑DNS‑серверы настроены, DNS‑запросы маршрутизируются согласно следующему потоку:
Рисунок 1 Маршрутизация
