minikube DNS не разрешает на хосте Fedora с systemd-resolve

Вопрос или проблема

Я настроил 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, вы можете выполнить следующие шаги:

  1. Создание конфигурации для 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
  2. Перезапуск systemd-resolved:
    После создания файла конфигурации, необходимо перезапустить службу systemd-resolved, чтобы изменения вступили в силу:

    sudo systemctl restart systemd-resolved
  3. Проверка конфигурации DNS:
    Убедитесь, что конфигурация была применена правильно, выполнив:

    systemd-resolve --status

    Проверьте, что DNS-сервер теперь включает IP-адрес Minikube и домен .test.

  4. Проверка разрешения DNS:
    Попробуйте снова выполнить команду nslookup или ping для вашего сервиса:

    nslookup hello-jane.test

    Вы должны получить ответ, который указывает на IP-адрес Minikube и подтверждает успешное разрешение имени.

  5. Дополнительные опции:
    Если вам нужно использовать другие DNS-серверы для внешних запросов, вам нужно будет настроить systemd-resolved так, чтобы он использовал несколько DNS-серверов или настроить CoreDNS для перенаправления внешних DNS-запросов:

    • Перенаправление запросов в CoreDNS: Вы можете изменить конфигурацию CoreDNS в Kubernetes, чтобы он перенаправлял внешние запросы на ваши общие DNS-серверы, установив конфигурацию в ConfigMap. Это обеспечит разрешение имен, как внутри кластера, так и вне его.

    • Настройки интерфейсного DNS: Вы также можете настроить systemd-resolved так, чтобы использовать разные DNS-серверы для разных сетевых интерфейсов, назначая DNS-сервер CoreDNS для интерфейса кластера и внешний DNS для других.

Эти шаги должны помочь вам решить проблему с разрешением DNS для вашего Minikube на Fedora. Не забывайте также проверять официальную документацию Minikube для получения дополнительной информации и обновлений.

Оцените материал
Добавить комментарий

Капча загружается...