K8s нет подключения к Интернету внутри контейнера

Я установил чистый кластер K8s в виртуальные машины (Debian 10). После установки и интеграции в свой ландшафт я проверил возможность подключения в своем тестовом образе alpine. В результате соединение исходящего трафика не работало, и в журнале coreDNS не было никакой информации. Я использовал обходной путь в моем образе сборки, чтобы перезаписать мой /etc/resolv.conf и заменить записи DNS (например, установить 1.1.1.1 как сервер имен). После этого временного взлома подключение к Интернету работает отлично. Но обходной путь не является долгосрочным решением, и я хочу использовать официальный способ. В документации к coreDNS K8s я нашел секцию пересылки и интерпретирую этот флаг как опцию для пересылки запроса на предопределенный локальный преобразователь. Я думаю, что пересылка на локальный файл resolv.conf и процесс разрешения работают некорректно. Может ли кто-нибудь помочь мне решить эту проблему?

Базовая настройка:

  • Версия K8s: 1.19.0
  • Настройка K8s: 1 мастер + 2 рабочих узла
  • На основе: ВМ Debian 10
  • CNI: фланель

Статус модулей CoreDNS

kube-system            coredns-xxxx 1/1     Running   1          26h
kube-system            coredns-yyyy 1/1     Running   1          26h

Журнал CoreDNS:

.:53
[INFO] plugin/reload: Running configuration MD5 = 4e235fcc3696966e76816bcd9034ebc7
CoreDNS-1.6.7

Конфигурация CoreDNS:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 30
        }
        prometheus :9153
        forward . /etc/resolv.conf
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  creationTimestamp: ""
  name: coredns
  namespace: kube-system
  resourceVersion: "219"
  selfLink: /api/v1/namespaces/kube-system/configmaps/coredns
  uid: xxx

Изображение Ouput alpine:

/ # nslookup -debug google.de
;; connection timed out; no servers could be reached

Вывод пакетов resolv.conf

/ # cat /etc/resolv.conf 
nameserver 10.96.0.10
search development.svc.cluster.local svc.cluster.local cluster.local invalid
options ndots:5

Вывод файла resolv.conf

cat /etc/resolv.conf 
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 213.136.95.11
nameserver 213.136.95.10
search invalid

Вывод хоста /run/flannel/subnet.env

cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.0.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true

Вывод kubectl get pods -n kube-system -o wide

coredns-54694b8f47-4sm4t                 1/1     Running   0          14d   10.244.1.48    xxx3-node-1   <none>           <none>
coredns-54694b8f47-6c7zh                 1/1     Running   0          14d   10.244.0.43    xxx2-master   <none>           <none>
coredns-54694b8f47-lcthf                 1/1     Running   0          14d   10.244.2.88    xxx4-node-2   <none>           <none>
etcd-xxx2-master                      1/1     Running   7          27d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>
kube-apiserver-xxx2-master            1/1     Running   7          27d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>
kube-controller-manager-xxx2-master   1/1     Running   7          27d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>
kube-flannel-ds-amd64-4w8zl              1/1     Running   8          28d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>
kube-flannel-ds-amd64-w7m44              1/1     Running   7          28d   xxx.xx.xx.xxx   xxx3-node-1   <none>           <none>
kube-flannel-ds-amd64-xztqm              1/1     Running   6          28d   xxx.xx.xx.xxx   xxx4-node-2   <none>           <none>
kube-proxy-dfs85                         1/1     Running   4          28d   xxx.xx.xx.xxx   xxx4-node-2   <none>           <none>
kube-proxy-m4hl2                         1/1     Running   4          28d   xxx.xx.xx.xxx   xxx3-node-1   <none>           <none>
kube-proxy-s7p4s                         1/1     Running   8          28d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>
kube-scheduler-xxx2-master            1/1     Running   7          27d   xxx.xx.xx.xxx   xxx2-master   <none>           <none>

person ZPascal    schedule 30.08.2020    source источник
comment
каково содержимое файла resolve.conf внутри модуля? Также каков статус стручков coredns?   -  person Abhi Gadroo    schedule 30.08.2020
comment
Привет @AbhiGadroo, я добавляю статус и содержимое файла resolv.conf в основной пост.   -  person ZPascal    schedule 30.08.2020
comment
Насколько я использовал это, до сих пор мне не приходилось делать какие-либо хаки с конфигурацией по умолчанию. Здесь вроде все хорошо. Можете ли вы жестко запрограммировать 8.8.8.8 в своем разрешении и т. Д. На хост-машинах? И сделать перезагрузку машины?   -  person Abhi Gadroo    schedule 30.08.2020
comment
@AbhiGadroo Конечно, но не понимаю разницы между фактической конфигурацией моего хоста resolv.conf. Я использую DNS-серверы своего провайдера, а вы - DNS-сервер Google. Добавляю хост resolv.conf в основной пост.   -  person ZPascal    schedule 31.08.2020
comment
У кого-нибудь есть другая идея?   -  person ZPascal    schedule 31.08.2020
comment
Вчера я вручную установил хост и записи сервера имен на 1.1.1.1. - ›Результат не изменился. Модуль не может разрешить пример URL-адреса google.com. Я могу подтвердить, что проблема определенно во внутреннем DNS-сервере. Можно пинговать 8.8.8.8. Я потратил время на анализ journalctl и не обнаружил ошибок внутри журнала. Есть ли у кого-нибудь идея проверить соединение между DNS сервером и pod?   -  person ZPascal    schedule 02.09.2020
comment
@ZPascal Помогает ли это?   -  person Wytrzymały Wiktor    schedule 02.09.2020
comment
@OhHiMark Я уже тестировал его перед созданием темы. К сожалению, это не помогло, и разрешение все еще не работает. Я не смог найти проблему.   -  person ZPascal    schedule 03.09.2020
comment
@ZPascal Вы, наверное, уже проверили это, но есть ли вероятность, что брандмауэр блокирует соединение?   -  person Wytrzymały Wiktor    schedule 08.09.2020
comment
Я исправил проблемы с DNS, увеличив размер модулей coredns. Позже я опубликую подробное руководство по устранению проблемы. Теперь я столкнулся с другой проблемой: мое разрешение DNS не работает для всех изображений в кластере. Я открою отдельную ветку по этому вопросу.   -  person ZPascal    schedule 08.09.2020
comment
@OhHiMark Это определенно допустимый вариант. Я использую iptables для фильтрации по конкретному входящему IP-адресу и управления трафиком. Я думаю, проблема заключалась в том, что два модуля coreDNS находились на одном узле. Масштабирование позволило развернуть модули coreDNS на каждом узле. После этого шага я смог частично разрешить соответствующие адреса.   -  person ZPascal    schedule 08.09.2020
comment
Было бы лучше без слова «раб». K3S использует термины «сервер» и «агент», или, может быть, вы могли бы использовать уровень управления и рабочий уровень. Нет необходимости использовать устаревшие уничижительные термины.   -  person Software Engineer    schedule 26.09.2020
comment
@SoftwareEngineer Вы абсолютно правы! Я немедленно адаптировал это.   -  person ZPascal    schedule 27.09.2020


Ответы (1)


Проблема:

(Два) модуля coreDNS были развернуты только на главном узле. Вы можете проверить настройки с помощью этой команды.

kubectl get pods -n kube-system -o wide | grep coredns

Решение:

Я мог бы решить проблему, увеличив размер модулей coreDNS и отредактировав конфигурацию развертывания. Следующие команды должны быть выполнены.

  1. kubectl edit deployment coredns -n kube-system
  2. Set replicas value to node quantity e.g. 3
  3. kubectl patch deployment coredns -n kube-system -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"force-update/updated-at\":\"$(date +%s)\"}}}}}"
  4. kubectl get pods -n kube-system -o wide | grep coredns

Источник

Подсказка

Если у вас все еще есть проблема с вашим coreDNS, а разрешение DNS работает спорадически, взгляните на этот опубликовать.

person ZPascal    schedule 12.09.2020
comment
Означает ли это, что у вас есть 3 модуля coredns на 3 узлах или 3 модуля только на главном узле? Какой результат kubectl get pods -n kube-system -o wide? - person Nick; 22.09.2020
comment
@Nick У меня есть три модуля coreDNS на 3 разных узлах. На каждом узле есть одна капсула. Добавляю вывод в основной пост. - person ZPascal; 26.09.2020
comment
Спасибо. Я установил развертывание minikube и не знаю, почему это произошло, но это исправлено для меня. - person Jankiel Goldman; 12.03.2021
comment
Спасибо за ваш отзыв. Я рад, что мое решение помогло вам. - person ZPascal; 17.03.2021