Нет исходящего сетевого подключения в кластере Kubernetes

Я построил кластер с 3 рабочими узлами и административным узлом. На рабочих узлах развернуты и настроены kube-dns и calica. У каждой машины есть собственный внешний IP-адрес и связанный DNS. Я успешно запустил nginx-ingress-controller, и его конечная точка 404 по умолчанию доступна извне.

Теперь проблема в том, что по какой-то причине подам в воркерах не разрешено устанавливать исходящие соединения. Когда я запускаю командную оболочку exec в модуль, я не могу ни свернуть, ни пинговать, даже при этом сеть, похоже, правильно настроена внутри модуля. Я попытался изучить конфигурацию ситца, но она довольно запутанная, и я не знаю, как это могло быть неправильно. Существуют ли какие-либо настройки по умолчанию calico / k8s, запрещающие исходящее соединение с его узлов? А может кто сталкивался с подобной проблемой?

Я предоставлю журналы по запросу, так как я не уверен, какая информация будет полезна при изучении этой проблемы.


person Michał Bień    schedule 09.08.2018    source источник
comment
Извините, если вы уже сказали, но есть ли у вас ресурсы Ingress, указывающие на службы для ваших модулей? Насколько я могу судить, вы упоминаете контроллер входящего трафика nginx, но не входите в ресурсы или службы.   -  person Ryan Dawson    schedule 09.08.2018
comment
Да, службы созданы и работают, но я все равно не могу получить к ним доступ, так как мне нужны исходящие соединения из модуля, чтобы мои приложения могли запускаться   -  person Michał Bień    schedule 10.08.2018
comment
но я уверен, что это проблема с подключением, так как теперь я также развернул диспетчер сертификатов, и он не может получить доступ к acme api для проверки с помощью информации, хост недоступен   -  person Michał Bień    schedule 10.08.2018
comment
Не могли бы вы предоставить конфигурации для своих развертываний и служб?   -  person Artem Golenyaev    schedule 10.08.2018


Ответы (1)


Спасибо за комментарии, после многих часов расследования я наконец обнаружил, что проблема была неправильно настроена kube-dns. Когда вы развертываете kube-dns, он автоматически импортирует список серверов имен с вашего компьютера /etc/resolv.conf. Он отлично работает, если у вас нет ubuntu с установленным DNS-сервером systemd-resolve (и он установлен по умолчанию). Он работает как прокси-сервер DNS, активный как адрес 127.0.0.53, и недоступен изнутри модулей. Вот почему DNS-серверы были недоступны даже после того, как kube-dns был установлен и активирован.

Я использовал следующее решение этой проблемы:

  1. Проверьте, какой сервер имен используется на вашем компьютере - для меня это было в /run/systemd/resolve/resolv.conf

  2. Создайте новую карту ConfigMap, чтобы заменить карту по умолчанию kube-dns, и заполните ее следующим образом:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      labels:
        addonmanager.kubernetes.io/mode: EnsureExists
      name: kube-dns
      namespace: kube-system
    data:
      upstreamNameservers: |
        ["Your nameserver address"]
    
  3. Повторно разверните kube-dns. Ваш правильный DNS теперь должен работать

person Michał Bień    schedule 10.08.2018
comment
Привет ... Как ты переделывал kube-dns? Вы сначала развернули ConfigMap, а затем остановили модули coredns? - person user3583252; 02.08.2019
comment
Привет, в моем случае я все еще использовал старый kube-dns, а не CoreDNS, который является частью стандартных настроек kubernetes, начиная с kubernetes 1.11. Большинство проблем kube-dns были решены с помощью coredns AFAIK. Если вы хотите повторно развернуть установку CoreDNS, я предлагаю следовать этому руководству: github.com/coredns/ развертывание / дерево / мастер / кубернетес - person Michał Bień; 08.08.2019