[Документация Yandex Cloud](../../../index.md) > [Все решения](../../index.md) > [Managed Service for Kubernetes](../index.md) > Устранение проблем с разрешением DNS-имен в Managed Service for Kubernetes

# Устранение проблем с разрешением DNS-имен в Managed Service for Kubernetes


## Описание проблемы {#issue-description}

Кластер Managed Service for Kubernetes не разрешает FQDN-имена как изнутри самого кластера, так и имена внешних по отношению к кластеру ресурсов.

## Решение {#issue-resolution}

Проверьте используемую версию Kubernetes на мастер-узлах и рабочих узлах. Для этого выполните команды:

```
yc managed-kubernetes cluster get $CLUSTER_ID | grep vers
yc managed-kubernetes node-group get $NODE_GROUP_ID | grep vers
```

{% note alert %}

Eсли версия кластера или группы узлов устарела и не входит в список актуальных версий `yc managed-kubernetes list-versions`, следует выполнить обновление кластера и группы узлов, перед тем как продолжать диагностику.

{% endnote %}

Если кластер и группа узлов используют актуальную версию Kubernetes, проверьте, корректно ли работает CoreDNS в кластере.
Для диагностики CoreDNS понадобится проанализировать состояние системных DNS-подов кластера командой `kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide`.

{% cut "Примерный вывод команды `kubectl get pods -n kube-system -l k8s-app=kube-dns -o wide`" %}

  ```

  NAME                       READY   STATUS    RESTARTS   AGE   IP              NODE                        NOMINATED NODE   READINESS GATES
  coredns-85fd96f799-2zzvw   1/1     Running   5          21d   10.96.138.252   cl1*****************-yxeg   <none>           <none>
  coredns-85fd96f799-9lz6b   1/1     Running   3          20d   10.96.140.90    cl1*****************-icos   <none>           <none>
  ```

  {% endcut %}

Обратите внимание на состояние подов в кластере. Если состояние отличается от `RUNNING`, системные журналы всех DNS-подов в кластере командой `kubectl logs -l k8s-app=kube-dns -n kube-system --all-containers=true` и найти причину проблем в этих журналах.

Если проблему с корректностью работы CoreDNS не удалось решить, воспользуйтесь одним из следующих методов:

{% list tabs %}

- Увеличьте количество подов CoreDNS
  
  Обычно в кластере два пода CoreDNS или один, если кластер одноузловый. Вы можете увеличить число реплик CoreDNS, изменив конфигурацию автомасштабирования деплоймента CoreDNS и задав значение для параметра `linear`:

  {% cut "Пример деплоймента kube-dns-autoscaler (`kubectl -n kube-system edit cm kube-dns-autoscaler`)" %}

  ```yaml
  apiVersion: v1
  data:
  linear: '{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}' # < это настройки масштабирования
  kind: ConfigMap
  metadata:
  name: kube-dns-autoscaler
  namespace: kube-system
  selfLink: /api/v1/namespaces/kube-system/configmaps/kube-dns-autoscaler
  ```

  {% endcut %}

  Подробнее про конфигурацию масштабирования можно узнать из материалов разработчиков Kubernetes на GitHub [по этой ссылке](https://github.com/kubernetes-sigs/cluster-proportional-autoscaler#control-patterns-and-configmap-formats)

- Используйте NodeLocal DNS 

  Чтобы снизить нагрузку по DNS-запросам в кластере Managed Service for Kubernetes, включите NodeLocal DNS Cache. Если кластер Managed Service for Kubernetes содержит более 50 узлов, используйте автоматическое масштабирование DNS.

  При включении NodeLocal DNS Cache в кластере Managed Service for Kubernetes разворачивается [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/). На каждом узле Managed Service for Kubernetes начинает работу кеширующий агент — под `node-local-dns`. Поды пользователя теперь отправляют запросы к агенту на своем узле Managed Service for Kubernetes.

  Если запрос в кеше агента, то он возвращает прямой ответ. В ином случае создается TCP-соединение с `kube-dns` `ClusterIP`. По умолчанию кеширующий агент делает cache-miss запросы к `kube-dns` для [DNS-зоны](../../../dns/concepts/dns-zone.md) кластера Managed Service for Kubernetes `cluster.local`.

  Установите [NodeLocal DNS](https://yandex.cloud/ru/marketplace/products/yc/node-local-dns) с помощью Cloud Marketplace, как описано в [инструкции](../../../managed-kubernetes/operations/applications/node-local-dns.md#marketplace-install) или [вручную](../../../managed-kubernetes/tutorials/node-local-dns.md).

{% endlist %}

{% note tip %}

Гарантированный результат при решении проблем с DNS в кластере также даст установка NodeLocal DNS Cache из Yandex Cloud Marketplace по следующим инструкциям:

* [Основы работы с Cloud Marketplace](../../../managed-kubernetes/operations/applications/marketplace.md);
* [Установка NodeLocal DNS](../../../managed-kubernetes/operations/applications/node-local-dns.md).

{% endnote %}

## Если проблема осталась {#if-issue-still-persists}

Если вышеописанные действия не помогли решить проблему, [создайте запрос в техническую поддержку](https://kz.center.yandex.cloud/support). При создании запроса укажите следующую информацию:

1. Идентификатор кластера Managed Service for Kubernetes.
1. Журнал событий кластера Managed Service for Kubernetes: вывод `kubectl get events`.
1. Журнал DNS-сервисов кластера: вывод `kubectl logs -l k8s-app=kube-dns -n kube-system --all-containers=true`.
1. Примеры ошибок при работе DNS-разрешения в кластере с фиксацией даты и времени проявления проблемы.