﻿# Установка NodeLocal DNS Cache

> [HTML Version](install-nodelocal-dns-cache.html)

NodeLocal DNS Cache позволяет снизить нагрузку по DNS-запросам в кластере Kubernetes. NodeLocal DNS позволяет повысить стабильность преобразования DNS-имён, что в свою очередь позволит избежать правил DNAT, connection tracking и ограничений по количеству соединений.

````
начало внимание 

````
Для Kubernetes-кластеров, развёрнутых на платформе Deckhouse, не требуется установка NodeLocal DNS. В этом случае используйте встроенный [модуль](https://deckhouse.ru/documentation/v1/modules/350-node-local-dns/). 

````
конец внимание 

````
Установка состоит из четырёх этапов:

1. [Получение IP-адреса сервиса kube-dns](#get-ip-addresses).

2. [Загрузка Helm-чарта и конфигурационного файла](#download-helm-chart-and-config-file).

3. [Заполнение конфигурационного файла](#fill-config-file).

4. [Установка чарта Node Local DNS с помощью Helm в Kubernetes-кластер](#install-nodelocaldns-chart).

## Шаг 1. Получение IP-адреса сервиса kube-dns

Сервис kube-dns как правило расположен в \[OBJECT\] кластера Kubernetes.

Определите IP-адрес сервиса kube-dns, выполнив команду:

````
kubectl get svc kube-dns -n kube-system -o jsonpath=\{.spec.clusterIP\}

````
Результатом выполнения команды должен быть IP-адрес, который будет использован на шаге 3. В рамках статьи результатом выполнения команды стал IP-адрес 172.20.0.10.

Получите IP-адрес сервиса kube-dns в Deckhouse, выполнив команду:

````
kubectl get svc d8-kube-dns -n kube-system -o jsonpath=\{.spec.clusterIP\}

## ````
Шаг 2. Загрузка Helm-чарта и конфигурационного файла

Для установки через интернет получите конфигурационный файл \[OBJECT\], выполнив команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm show values elma365/node-local-dns > values-nodelocal-dns.yaml

````
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет

1. На компьютере с доступом в интернет скачайте образы ELMA365 и загрузите их в локальный реестр образов, выполнив следующую команду:

````
helm repo add elma365 https://charts.elma365.tech  
helm repo update  
helm pull elma365/node-local-dns

````
Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Полученный архив чарта \[OBJECT\] скопируйте на сервер, где будет производиться установка.

3. Распакуйте этот чарт и скопируйте конфигурационный файл по умолчанию \[OBJECT\] в \[OBJECT\]: 

````
tar -xf node-local-dns-X.Y.Z.tgz  
cp node-local-dns/values.yaml values-nodelocal-dns.yaml
````

## ````
Шаг 3. Заполнение конфигурационного файла

Заполните конфигурационный файл \[OBJECT\] для установки NodeLocal DNS Cache.

````
\# Настройки NodeLocal DNS Cache  
node-local-dns:  
  config:  
    # домен кластера  
    dnsDomain: "cluster.local"  
    # IP-адрес сервиса kube-dns  
    dnsServer: "172.20.0.10"  
    # IP-адрес для NodeLocal DNS Cache.  
    localDns: "169.254.20.25"

````
где:

- \[OBJECT\] — домен кластера Kubernetes;

- \[OBJECT\] — IP-адрес сервиса kube-dns, полученный на шаге 1;

- \[OBJECT\] — локальный IP-адрес для NodeLocal DNS Cache.

Заполнение параметров подключения к приватному registry для установки в закрытом контуре без доступа в интернет

  
Для подключения к приватному **registry** нужно:

1. Скачать образы ELMA365 и загрузить их в локальный реестр образов. Подробнее об этом читайте в статье [«Загрузка образов ELMA365»](downloadin-images-elma365.md).

2. Задать адрес и путь для параметра \[OBJECT\].

3. Указать наименование секрета с правами доступа к приватному **registry** в параметре \[OBJECT\]. Секрет должен быть создан вручную и зашифрован в Base64.

````
\# Настройки NodeLocal DNS Cache  
node-local-dns:  
  # Параметры подключения к приватному registry  
  image:  
    # адрес и путь для приватного registry  
    repository: registry.example.com/dns/k8s-dns-node-cache  
  # секрет с правами доступа к приватному registry должен быть создан вручную, зашифрованный в Base64  
  imagePullSecrets:  
    - myRegistryKeySecretName

````
где формат **repository**:

- адрес — \[OBJECT\]; 

- путь — \[OBJECT\]. 

## Шаг 4. Установка чарта Node Local DNS с помощью Helm в Kubernetes-кластер

Выполните установку чарта Node Local DNS в \[OBJECT\].

Для установки через интернет:

````
helm upgrade --install nodelocaldns elma365/node-local-dns -f values-nodelocal-dns.yaml -n kube-system

````
Для установки без доступа в интернет:

````
helm upgrade --install nodelocaldns ./node-local-dns -f values-nodelocal-dns.yaml -n kube-system

## ````
Удалить чарт Node Local DNS с помощью Helm в Kubernetes-кластере

Чтобы удалить чарт Node Local DNS в \[OBJECT\], выполните команду:

````
helm uninstall nodelocaldns -n kube-system
````