Вопрос или проблема
Я настроил minikube с драйвером docker, но проблема сохраняется и с драйвером virtualbox.
Я на Fedora 39 и следовал объяснению здесь:
https://minikube.sigs.k8s.io/docs/handbook/addons/ingress-dns/
nslookup hello-jane.test $(minikube ip)
Сервер: 192.168.49.2
Адрес: 192.168.49.2#53
Неавторизованный ответ:
Имя: hello-jane.test
Адрес: 192.168.49.2
Имя: hello-jane.test
Адрес: 192.168.49.2
Это работает!
Также из контейнера:
root@debian2:/# ping hello-jane.test
PING hello-jane.test (192.168.49.2) 56(84) байтов данных.
64 байта от 192-168-49-2.kubernetes.default.svc.cluster.local (192.168.49.2): icmp_seq=1 ttl=64 время=0.015 мс
Однако из хоста, без указания IP кластера:
nslookup hello-jane.test
Сервер: 127.0.0.53
Адрес: 127.0.0.53#53
** сервер не может найти hello-jane.test: NXDOMAIN
Естественно, ping не работает.
Думаю, это связано с systemd-resolve
, который может мешать…
systemd-resolve --status
Глобальный
Протоколы: LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf режим: stub
Ссылка 2 (enp0s31f6)
Текущие области: none
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 3 (wlp0s20f3)
Текущие области: DNS LLMNR/IPv4 LLMNR/IPv6
Протоколы: +DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Текущий DNS-сервер: 192.168.15.153
DNS-серверы: 192.168.15.153
Ссылка 4 (br-236f66aa6691)
Текущие области: none
Протоколы: -DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 5 (docker0)
Текущие области: none
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 16 (ipsec0)
Текущие области: LLMNR/IPv4 LLMNR/IPv6
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 17 (vboxnet0)
Текущие области: none
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 18 (br-288fd084c2f1)
Текущие области: LLMNR/IPv4 LLMNR/IPv6
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Ссылка 22 (veth9f99f5c)
Текущие области: LLMNR/IPv6
Протоколы: -DefaultRoute LLMNR=resolve -mDNS -DNSOverTLS DNSSEC=no/unsupported
Его конфигурация не изменена. Но если я добавлю IP minikube в /etc/systemd/resolved.conf
как DNS, это работает! Но, конечно, другие DNS больше не разрешаются.
Должен упомянуть, что я просто не сделал раздел Linux OS с resolvconf
, так как Fedora использует systemd-resolved. Это причина, почему?
Настройте CoreDNS для пересылки “.” на ваш DNS-сервер вне Kubernetes, затем измените DNS хоста, чтобы использовать CoreDNS с помощью resolvconf. Это позволит хосту разрешать адреса cluster.local, а затем обычные вещи вне K8 через пересылку “.”.
Вы делаете это, редактируя configmap CoreDNS. В следующем примере 10.254.24.4, 10.254.24.2 и 10.254.24.3 – это три пода CoreDNS из развертывания, по одному на узел. 10.254.12.8 и 10.254.142.8 – это внешние DNS-серверы вне Kubernetes.
Corefile: |
. {
bind 10.254.24.4 10.254.24.2 10.254.24.3
log
errors
health 127.0.0.1:8082
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
forward . 10.254.12.8 10.254.142.8
cache 30
loop
reload
loadbalance
}
Другой вариант – сделать наоборот, т.е. настроить ваш внешний DNS-сервер на условную пересылку cluster.local обратно в CoreDNS. Тогда у вас будет как обычный DNS, так и способ разрешения cluster.local. Есть несколько способов сделать это, один из них – открыть службу CoreDNS через тип LoadBalancer, другой – в зависимости от окружения, переслать к адресам подов, предполагая, что они маршрутизируемы – например, с CNI antrea-nsx.
Другой путь – настроить systemd-resolved, чтобы иметь DNS-серверы и суффиксы, специфичные для интерфейса, т.е. поместить интерфейс кластера с DNS CoreDNS с суффиксом cluster.local и обычный управляющий NIC (или как бы вы его ни называли) с DNS, внешним для Kubernetes.
Все три метода раньше работали для меня.
Просто для справки:
Документация покрывает ваш случай сейчас: https://minikube.sigs.k8s.io/docs/handbook/addons/ingress-dns/#installation
С Fedora, вероятно, вы используете systemd-resolved. Документация рекомендует:
sudo mkdir -p /etc/systemd/resolved.conf.d
sudo tee /etc/systemd/resolved.conf.d/minikube.conf << EOF
[Resolve]
DNS=$(minikube ip)
Domains=~test
EOF
sudo systemctl restart systemd-resolved
Ответ или решение
Чтобы решить проблему с разрешением DNS для Minikube на хостовой системе Fedora 39 с использованием systemd-resolved, вы можете выполнить следующие шаги:
-
Создание конфигурации для systemd-resolved:
Создайте файл конфигурации, который добавит IP-адрес Minikube в качестве DNS-сервера для домена.test
. Это позволит вашему хосту разрешать имена, связанные с Minikube, без необходимости указывать каждый раз IP-адрес кластера.Выполните следующие команды в терминале:
sudo mkdir -p /etc/systemd/resolved.conf.d sudo tee /etc/systemd/resolved.conf.d/minikube.conf << EOF [Resolve] DNS=$(minikube ip) Domains=~test EOF
-
Перезапуск systemd-resolved:
После создания файла конфигурации, необходимо перезапустить службу systemd-resolved, чтобы изменения вступили в силу:sudo systemctl restart systemd-resolved
-
Проверка конфигурации DNS:
Убедитесь, что конфигурация была применена правильно, выполнив:systemd-resolve --status
Проверьте, что DNS-сервер теперь включает IP-адрес Minikube и домен
.test
. -
Проверка разрешения DNS:
Попробуйте снова выполнить командуnslookup
илиping
для вашего сервиса:nslookup hello-jane.test
Вы должны получить ответ, который указывает на IP-адрес Minikube и подтверждает успешное разрешение имени.
-
Дополнительные опции:
Если вам нужно использовать другие DNS-серверы для внешних запросов, вам нужно будет настроитьsystemd-resolved
так, чтобы он использовал несколько DNS-серверов или настроить CoreDNS для перенаправления внешних DNS-запросов:-
Перенаправление запросов в CoreDNS: Вы можете изменить конфигурацию CoreDNS в Kubernetes, чтобы он перенаправлял внешние запросы на ваши общие DNS-серверы, установив конфигурацию в ConfigMap. Это обеспечит разрешение имен, как внутри кластера, так и вне его.
-
Настройки интерфейсного DNS: Вы также можете настроить systemd-resolved так, чтобы использовать разные DNS-серверы для разных сетевых интерфейсов, назначая DNS-сервер CoreDNS для интерфейса кластера и внешний DNS для других.
-
Эти шаги должны помочь вам решить проблему с разрешением DNS для вашего Minikube на Fedora. Не забывайте также проверять официальную документацию Minikube для получения дополнительной информации и обновлений.