Рейтинг:0

API-сервер на мастере останавливается после добавления второй плоскости управления

флаг us
TRW

В моей текущей тестовой установке есть несколько виртуальных машин с Debian-11. Все узлы имеют частный IP-адрес и второй интерфейс wireguard. В будущем узлы будут находиться в разных местах с другой сетью, и Wireguard будет использоваться для «наложения» всех различных сетевых сред. Я хочу установить Kubernetes на все узлы.

общедоступный IP-адрес узла wireguard ip
вм1 192.168.10.10 10.11.12.10
вм2 192.168.10.11 10.11.12.11
вм3 192.168.10.12 10.11.12.12
...

Итак, я установил docker и kubeadm/kubelet/kubectl версии 1.23.5 на все узлы. Также я установил haproxy на все узлы. Он работает как балансировщик нагрузки, перечисляя localhost: 443 и перенаправляя запросы на одну из онлайн-плоскостей управления.

Затем я запустил кластер с помощью kubeadm.

vm01> kubeadm init --apiserver-advertise-address=10.11.12.10 --pod-network-cidr=10.20.0.0/16

После этого я попробовал интегрировать либо фланель, либо бязь. Либо добавив --iface=<wireguard-интерфейс> или установив пользовательский манифест ...nodeAddressAutodetectionV4.interface: <wireguard-interface>.

Когда добавляю обычный узел - все нормально. Добавляется узел, создаются модули, и связь осуществляется через определенный сетевой интерфейс.

Когда я добавляю плоскость управления без интерфейса wireguard, я также могу добавлять другие плоскости управления с

vm2> kubeadm join 127.0.0.1:443 --token ... --discovery-token-ca-cert-hash sha256:... --control-plane

Конечно перед этим я скопировал несколько файлов с vm01 на vm02 с /etc/кубернетес/пки как ок.*, сб.*, передний прокси-ca.*, apiserver-kubelet-клиент.* и т. д/ок.*.

Но когда я использую сеть фланель или бязь вместе с интерфейсом wireguard, после команды соединения происходит что-то странное.

root@vm02:~# kubeadm join 127.0.0.1:443 --token nwevkx.tzm37tb4qx3wg2jz --discovery-token-ca-cert-hash sha256:9a97a5846ad823647ccb1892971c5f0004043d88f62328d056a71ce8
[preflight] Запуск проверки перед полетом
[предварительная проверка] Чтение конфигурации из кластера...
[preflight] FYI: вы можете посмотреть этот файл конфигурации с помощью «kubectl -n kube-system get cm kubeadm-config -o yaml»
[preflight] Выполнение предварительных проверок перед инициализацией нового экземпляра плоскости управления
[preflight] Извлечение изображений, необходимых для настройки кластера Kubernetes
[предварительная проверка] Это может занять минуту или две, в зависимости от скорости вашего интернет-соединения.
[preflight] Вы также можете выполнить это действие заранее, используя «вытягивание образов конфигурации kubeadm»
[certs] Использование папки certificateDir «/etc/kubernetes/pki»
[certs] Генерация сертификата и ключа «front-proxy-client»
[certs] Генерация сертификата и ключа «etcd/server»
[certs] сертификат etcd/server, обслуживающий DNS-имена [localhost mimas] и IP-адреса [192.168.10.11 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/peer»
[certs] сертификат etcd/peer service подписан для DNS-имен [localhost mimas] и IP-адресов [192.168.10.11 127.0.0.1 ::1]
[certs] Генерация сертификата и ключа «etcd/healthcheck-client»
[certs] Создание сертификата и ключа «apiserver-etcd-client»
[certs] Генерация сертификата и ключа "apiserver"
[certs] apiserver, обслуживающий сертификат, подписан для DNS-имен [kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local mimas] и IP-адресов [10.96.0.1 192.168.10.11 127.0.0.1]
[certs] Использование существующего сертификата и ключа «apiserver-kubelet-client»
[certs] Действительные сертификаты и ключи теперь существуют в «/etc/kubernetes/pki»
[сертификаты] Использование существующего ключа «sa»
[kubeconfig] Создание файлов kubeconfig
[kubeconfig] Использование папки kubeconfig «/etc/kubernetes»
[конечная точка] ПРЕДУПРЕЖДЕНИЕ: порт, указанный в controlPlaneEndpoint, переопределяет bindPort в адресе плоскости управления.
[kubeconfig] Запись файла kubeconfig «admin.conf»
[конечная точка] ПРЕДУПРЕЖДЕНИЕ: порт, указанный в controlPlaneEndpoint, переопределяет bindPort в адресе плоскости управления.
[kubeconfig] Запись файла kubeconfig «controller-manager.conf»
[конечная точка] ПРЕДУПРЕЖДЕНИЕ: порт, указанный в controlPlaneEndpoint, переопределяет bindPort в адресе плоскости управления.
[kubeconfig] Запись файла kubeconfig «scheduler.conf»
[control-plane] Использование папки манифеста «/etc/kubernetes/manifests»
[control-plane] Создание статического манифеста пода для «kube-apiserver»
[control-plane] Создание статического манифеста пода для «kube-controller-manager»
[control-plane] Создание статического манифеста Pod для «kube-scheduler»
[check-etcd] Проверка работоспособности кластера etcd
[kubelet-start] Запись конфигурации kubelet в файл «/var/lib/kubelet/config.yaml»
[kubelet-start] Запись файла среды kubelet с флагами в файл «/var/lib/kubelet/kubeadm-flags.env»
[kubelet-start] Запуск kubelet
[kubelet-start] Ожидание, пока kubelet выполнит загрузку TLS...
[etcd] Объявлено о присоединении нового члена etcd к существующему кластеру etcd
[etcd] Создание статического манифеста пода для «etcd»
[etcd] Ожидание присоединения нового члена etcd к кластеру. Это может занять до 40 секунд
[kubelet-check] Исходный тайм-аут в 40 секунд пройден.
фаза выполнения ошибки control-plane-join/etcd: ошибка при создании файла манифеста локального статического модуля etcd: тайм-аут ожидания доступности кластера etcd
Чтобы увидеть трассировку стека этой ошибки, выполните с параметром --v=5 или выше.

И после этого таймаута даже на vm01 сервер API перестает работать, я больше не могу запускать команды kubeadm или kubectl. Служба HTTPS на 6443 не работает. Но я не понимаю, почему API-сервер на vm01 перестает работать при добавлении второго API-сервера, и не могу найти причину, когда вывод говорит об IP-адресах 192.168...., потому что кластер должен общаться только через 10.11.12.0 /24 сеть wireguard.

Рейтинг:0
флаг us
TRW

Обнаружив аналогичную проблему в https://stackoverflow.com/questions/64227042/setting-up-a-kubernetes-master-on-a-other-ip Я думаю, что это также решение здесь. Когда я добавляю --apiserver-advertise-address=<this-wireguard-ip>, выход меняется (нет 192.168..IP) и он включается.Что-то я не понимаю, почему перестает работать API-сервер VM01.

Что бы ни делала команда join под капотом, ей необходимо создать службу etcd во второй плоскости управления, и эта служба также должна работать на том же IP-адресе, что и сетевой интерфейс flannel/calico. В случае использования основного сетевого интерфейса этот параметр не требуется на второй/третьей плоскости управления.

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

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