Вопрос или проблема
Я запускаю 1 мастер-узел и 2 рабочих узла на VirtualBox с Vagrant, и у меня есть несколько других ВМ, которые выполняют различные утилиты, такие как сервер Git. Я хочу дать своим подам доступ к серверу Git, но не могу сделать это с помощью CoreDNS. Поскольку я использую K3S, я следовал этому руководству и руководству от Microsoft. Вкратце, они используют ConfigMap coredns-custom и настраивают необходимый плагин для хостов.
coredns-custom.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns-custom
namespace: kube-system
data:
default.server: |
gitea.local {
hosts {
192.168.56.41 gitea.local
fallthrough
}
}
vagrant@control1:~$ kubectl run -it –rm –restart=Never –image=infoblox/dnstools:latest dnstools
Если вы не видите приглашение командной строки, попробуйте нажать Enter.
dnstools# nslookup gitea.local
;; время ожидания подключения истекло; сервера не могут быть достигнуты
Соединение между ВМ само по себе в порядке
vagrant@control1:~$ ping gitea.local
PING gitea.local (192.168.56.41) 56(84) байт данных.
64 байт от gitea.local (192.168.56.41): icmp_seq=1 ttl=64 время=0.793 мс
64 байт от gitea.local (192.168.56.41): icmp_seq=2 ttl=64 время=0.302 мс
^C
— статистика ping gitea.local —
2 пакета отправлено, 2 получено, 0% потеря пакетов, время 1028мс
rtt min/avg/max/mdev = 0.302/0.547/0.793/0.245 м
Меня беспокоит то, что .server не работает, а .override выдает ошибку, так как я не могу определить 2 плагина для хостов.
Ответ или решение
Для решения проблемы с добавлением A-записи в CoreDNS на вашем кластере K3S, следует учесть несколько факторов, связанных с конфигурацией и особенностями работы CoreDNS.
Шаг 1: Проверьте существующую конфигурацию CoreDNS
Сначала убедитесь, что текущая конфигурация CoreDNS корректна. Для этого выполните:
kubectl -n kube-system get configmap coredns -o yaml
Обратите внимание на текущее содержимое сервера CoreDNS и проверьте, что ваш coredns-custom
не затеняет основную конфигурацию.
Шаг 2: Создайте и примените корректный ConfigMap
Вам нужно использовать правильный формат для вашего coredns-custom.yaml
. Вот пример, который может помочь:
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns-custom
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
hosts {
192.168.56.41 gitea.local
fallthrough
}
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
Шаг 3: Примените конфигурацию
Примените свой ConfigMap
:
kubectl apply -f coredns-custom.yaml
Шаг 4: Обновите CoreDNS
После изменения конфигурации вам нужно перезагрузить CoreDNS, чтобы применить изменения. Для этого выполните:
kubectl rollout restart deploy/coredns -n kube-system
Шаг 5: Проверьте работоспособность DNS
Теперь вы можете проверить, работает ли DNS, используя ваш dnstools
:
kubectl run -it --rm --restart=Never --image=infoblox/dnstools:latest dnstools
dnstools# nslookup gitea.local
Шаг 6: Дополнительные проверки
Если все еще возникает проблема с разрешением имени, проверьте следующие моменты:
-
Проверка журнала CoreDNS: Для получения дополнительной информации о возможных ошибках можно просмотреть логи CoreDNS:
kubectl logs -l k8s-app=kube-dns -n kube-system
-
Сеть: Убедитесь, что в сети нет проблем. Вы уже проверили связь через
ping
, что является хорошим знаком. -
Подсетевые правила: Убедитесь, что нет сетевых полисов, которые блокируют доступ к CoreDNS.
Если все шаги выполнены правильно, ваш CoreDNS должен успешно разрешать адрес gitea.local
в 192.168.56.41
. Если проблемы продолжаются, стоит проверить общие настройки сети и конфигурацию самого кластера K3S.