У меня есть следующий проект, который я использую для создания собственного кластера Kubernetes на локальном компьютере (macOS) через KubeAdm: https://github.com/sasadangelo/k8s-cluster По сути, я начал с этого проекта и сделал следующее обновление:
Теперь меня устраивает этот кластер, но у меня есть некоторые проблемы с DNS, которые я хотел бы понять, как решить. Инструмент использует файл Vagrant для запуска 3 ящиков Vagrant, тогда я использую в основном 3 сценария:
kubeadm init
. Моя проблема в том, что resolv.conf
моих модулей выглядит так:
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local <other domain coming from host machine>
options ndots:5
Этот файл имеет две проблемы:
nameserver 8.8.8.8
и удалить ее, когда она больше не нужна (если я оставлю ее, внутренний DNS не работает)
<другой домен, исходящий с хост-машины>
, которые вызывают проблемы.Я прочитал много документации, но все еще не понимаю, как изменить свой код, чтобы избежать этих двух проблем.
- не позволяет мне получить доступ к Интернету.
Ваша конфигурация по умолчанию кажется нормальной. Как вы обнаружили, вам не стоит изменять ваш pod resolv.conf, поскольку он должен использовать службу coredns в кластере для локального поиска dns. Служба coredns должна быть способна перенаправлять dns-запросы на resolver, настроенный в вашем k8s-master /etc/resolv.conf
. Похоже, что это может быть проблема с доступом в интернет сервера k8s-master или с сетью virtualbox. Я клонировал ваш репозиторий и смог разрешить интернет dns от pods, запущенных на кластере, как и ожидалось.
Если вы посмотрите на конфигурацию coredns, то увидите, что она настроена на использование /etc/resolv.conf
для любых неопределенных доменов. С k8s-master вы можете выполнить kubectl -n kube-system get configmap coredns -o yaml
, чтобы увидеть конфигурацию coredns. Там будет строка, forward . /etc/resolv.conf
. В документации kubernetes здесь объясняется конфигурация corefile coredns. Вы также увидите, что resolve.conf
в coredns pod такой же, как на хосте. Чтобы проверить это, вы можете выполнить ps -aux | grep coredns
, чтобы получить pid одного из процессов coredns. Затем выполните nsenter -t
и вы должны увидеть, что содержимое совпадает с содержимым хост-системы. В нем должен быть резольвер из сети virtualbox. Вы можете проверить этот резольвер с хоста или в процессе coredns, чтобы убедиться, что он может разрешать dns. Вы также можете протестировать резольвер google из процесса coredns и посмотреть, что получится. Я бы попробовал выполнить поиск dns, а также просто выполнить ping. Это поможет вам определить причину проблемы. Опять же, я попробовал ваш vagrantfile на совершенно новом сервере ubuntu 20.04, и он отлично работает.
- в пункте поиска есть домены, приходящие с моих хост-машин, которые вызывают проблемы.
Это также ожидаемая конфигурация. Обычно я не ожидал, что это вызовет проблемы, но я не знаю вашей точной конфигурации или того, чего вы пытаетесь достичь. Если решение требует, чтобы вы изменили список поисковых доменов в стручке, то это можно сделать в pod dns policy. Надеюсь, решение первой проблемы позволит вам избежать необходимости настраивать это.