K8s. Добавление hosts в CoreDNS
Бывают такие ситуации, когда необходимо ip-адресу дать fqdn. Например, для обращения к ресурсам во внутренней сети. Или же, переопределить адрес у нужного ресурса, не меняя при этом dns-запись на сервере.
Если мы говорим про дистрибутивы линукса, то в таком случае мы добавляем необходимую запись в файл /etc/hosts. В случае с windows-системами, ситуация аналогичная (только путь немного другой).
В случаях с K8s-кластером, добавление записей в /etc/hosts не всего срабатывает корректно. А если в кластере несколько сотен узлов, то ситуация становится сложнее.
Для того, чтоб такие изменения применить в кластере достаточно исправить два ConfigMap для CoreDNS и NodeLocalDNS (если такой установлен).
Модификация CoreDNS
Чтоб это сделать, достаточно перейти в режим редактирования ресурса ConfigMap. Сделать это можно командой
kubectl edit -n kube-system cm coredns
В нем мы можем отредактировать Corefile, добавив строки
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
labels:
addonmanager.kubernetes.io/mode: EnsureExists
data:
Corefile: |
.:53 {
errors
health {
lameduck 5s
}
ready
# Добавляем блок hosts именно в это место
hosts {
123.123.123.123 our.new.site.ru
fallthrough
}
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf {
prefer_udp
max_concurrent 1000
}
cache 30
loop
reload
loadbalance
}
И перезапускаем командой kubectl rollout restart deploy -n kube-system coredns.
Модификация NodeLocalDNS
Если же в кластере еще установлен NodeLocalDNS, также необходимо отредактировать и его ConfigMap. Открываем на рекдактирование его конфиг
kubectl edit -n kube-system cm nodelocaldns
И по аналогии с CoreDNS добавляем блок hosts.
apiVersion: v1
kind: ConfigMap
metadata:
name: nodelocaldns
namespace: kube-system
data:
Corefile: |
# ... существующая конфигурация ...
.:53 {
errors
cache 30
reload
loop
bind 169.254.25.10
# Добавить hosts плагин
hosts {
123.123.123.123 our.new.site.ru
fallthrough
}
forward . __PILLAR__CLUSTER__DNS__
prometheus :9253
}
После чего, перезапускаем NodeLocalDns, но уже его DaemonSet kubectl rollout restart daemonset nodelocaldns -n kube-system.