Рейтинг:0

Кластер KubeADM: как правильно настроить DNS

флаг au

У меня есть следующий проект, который я использую для создания собственного кластера Kubernetes на локальной машине (macOS) через KubeAdm: https://github.com/sasadangelo/k8s-кластер В общем, я с этого и начал проект и сделал следующее обновление:

  • Настройте развертывание Vagrant с помощью файла YAML.
  • Поддержка API K8s 1.6, K8s 1.18 и Calico 3.8.8.
  • Автоматическое развертывание приборной панели K8s.

Теперь у меня все в порядке с этим кластером, но у меня есть некоторые проблемы с DNS, которые я хотел бы понять, как решить. Инструмент использует файл Vagrant для запуска 3 ящиков Vagrant, тогда я использую в основном 3 сценария:

  • настроить_box.sh, я использую для установки на каждую коробку необходимое программное обеспечение, такое как docker, kubeadm, kubelet, kubectl и т. д.
  • configure_master.sh, используется для настройки только главного узла, установки сетевого плагина и запуска инициализация кубеадм.
  • configure_worker.sh, используемый для настройки рабочего узла, присоединяющегося к кластеру.

Моя проблема в том, что resolv.conf моих стручков выглядит так:

сервер имен 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local <другой домен, исходящий от хост-компьютера>
варианты точек:5

У этого файла две проблемы:

  1. не дает мне выйти в интернет. На самом деле, я должен добавить его вручную, добавив эту строку в начало файла:
сервер имен 8.8.8.8

и удалите его, когда он больше не нужен (если я оставлю его, внутренний DNS не работает)

  1. в предложении поиска есть домены, поступающие с моих хост-компьютеров: <other domain coming from host machine> которые вызывают проблемы.

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

Michael Hampton avatar
флаг cz
Если у вас нет конкретной причины для настройки кластера разработки с тремя узлами, рассмотрите возможность использования вместо него minikube.
Salvatore D'angelo avatar
флаг au
Minikube, насколько мне известно, представляет собой единый узел. Мне нужно протестировать мое приложение с модулями, работающими на разных рабочих процессах.
c4f4t0r avatar
флаг nl
@SalvatoreD'angelo с последней версией minikube, вы можете добавить несколько узлов
Salvatore D'angelo avatar
флаг au
Привет, да, я заметил это. Я этого не знал. Но мне не ясно, являются ли они реальными узлами (я имею в виду виртуальную машину, такую ​​как Virtual Box) или просто контейнерами. Если это виртуальные машины, какая базовая технология используется minikube? Я пытался найти ответ, но безуспешно.
Рейтинг:2
флаг ng
  1. не дает мне выйти в интернет.

Ваша конфигурация по умолчанию выглядит нормально. Как вы уже поняли, вам не нужно менять файл resolv.conf вашего модуля, так как он должен использовать службу coredns в кластере для локального поиска DNS. Служба coredns должна иметь возможность пересылать DNS-запросы на преобразователь, настроенный в вашем k8s-master. /etc/resolv.conf. Похоже, что это может быть проблема с доступом в Интернет на сервере k8s-master или с сетью виртуального бокса.Я клонировал ваш репозиторий и смог разрешить DNS в Интернете из модулей, работающих в кластере, как и ожидалось.

Если вы посмотрите на конфигурацию coredns, вы увидите, что она настроена на использование /etc/resolv.conf для любых неуказанных доменов. Из k8s-master можно запустить kubectl -n kube-system получить configmap coredns -o yaml чтобы увидеть конфигурацию coredns. Будет очередь, вперед . /etc/resolv.conf. документация по кубернету здесь объяснить конфигурацию файла ядра coredns. Вы также обнаружите, что разрешение.conf в поде coredns такой же, как и на хосте. Чтобы убедиться в этом, вы можете запустить пс-доп | grep coredns чтобы получить pid одного из процессов coredns. Затем запустите nsenter -t <pid> -n cat /etc/resolv.conf и вы должны увидеть, что содержимое такое же, как и в хост-системе. У него должен быть резолвер из сети virtualbox. Вы можете протестировать этот преобразователь с хоста или в процессе coredns, чтобы проверить, может ли он разрешать DNS. Вы также можете протестировать распознаватель Google из процесса coredns, чтобы увидеть, что вы получите. Я бы попробовал поиск DNS, а также просто пинг. Это должно помочь вам сузить круг причин вашей проблемы. Я снова попробовал ваш бродячий файл на новом сервере Ubuntu 20.04, и он работал нормально.

  1. в предложении поиска есть домены, поступающие с моих хост-компьютеров, которые вызывают проблемы.

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

Salvatore D'angelo avatar
флаг au
Привет, Майк, большое спасибо за исчерпывающий ответ. Честно говоря, я не эксперт в разрешении проблем с DNS (это недостаток, который я должен решить), и мне нужно время, чтобы проанализировать и проверить ваши отзывы. На данный момент я могу только поддержать ваш ответ, и я вернусь, если у меня будут сомнения.
Salvatore D'angelo avatar
флаг au
Привет, Майк Франк, после долгого времени я все еще здесь с проблемой. Можете ли вы сказать мне, что именно нужно сделать, чтобы перезаписать мое условие поиска в модуле /etc/resolve.conf. Я пытался использовать dnsConfig с предложением searches, но, в конце концов, дополнительный домен, исходящий от VirtualBox, все еще там. Есть ли способ использовать только тот, который я указал в dnsConfig, без K8s, смешав их с тем, что находится в хосте Vagrant/VirtualBox?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.