Использование Kubernetes и Weave CNI с несколькими кластерами в одних и тех же подсетях

У меня возникла ситуация, когда я хотел бы запустить два кластера Kubernetes в одной подсети общего доступа AWS VPC. Кажется, это работает нормально, за исключением того, что плагин Weave CNI, похоже, обнаруживает узлы в другом кластере. Эти узлы отклоняются с пометкой «IP-выделение было засеяно разными одноранговыми узлами», что имеет смысл. Это разные кластеры. Есть ли способ предотвратить поиск машин в альтернативных кластерах? Когда я делаю weave --local status ipam и weave --local status targets, я вижу ожидаемые цели и IPAM для каждого кластера.

Стручки плетения находятся в бесконечном цикле соединения и отклонения узлов из альтернативных кластеров. Это поглощает процессор и влияет на кластеры. Если я запустил kube-utils внутри модуля плетения, он вернет правильные узлы для каждого кластера. Кажется, кубернетам следует знать, какие узлы доступны, могу я просто использовать одноранговые узлы, о которых знает кластер.

После дальнейшего исследования я считаю, что проблема в том, что я увеличил и уменьшил масштаб машин для обоих кластеров. В этом процессе IP-адреса повторно использовались от одного кластера к другому. Например, кластер A уменьшил размер узла. Weave продолжает попытки подключения к уже потерянному узлу. Кластер B масштабируется и использует IP, который изначально использовался в кластере A. Weave находит узел. Это затем заставило Weave «обнаружить» другие узлы кластера. Как только он обнаруживает один узел из другого кластера, он обнаруживает все узлы.

Я обновился с 2.4.0 до 2.4.1, чтобы посмотреть, не устраняют ли некоторые исправления, связанные с повторным использованием IPS, эту проблему.


person cchanley2003    schedule 20.10.2018    source источник


Ответы (2)


Здесь есть демонстрация , в которой Weave Net запускается в нескольких кластерах. Эта демонстрация была показана в лейтмотиве KubeCon 2016.

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

--ipalloc-init=observer

Это не особо чистое решение, возиться с конфигурацией, но оно работает.

person Bryan    schedule 18.06.2019
comment
Это означает, что мы используем федерацию кубернетов. Это означает, что у меня есть одна плоскость управления для нескольких кластеров. Это почти полная противоположность моей ситуации. Мне нужно несколько плоскостей управления и, следовательно, несколько кластеров, но я хочу, чтобы они существовали в одном и том же vpc. - person cchanley2003; 03.07.2019

Я не тестировал это, но похоже, что вариант known-peers должен помочь. Хост Weave не должен пытаться подключиться к другим хостам, когда установлено соединение со всеми известными хостами.

$ kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version= $ (kubectl version | base64 | tr -d '\ n') & known-peers = список хостов, разделенных запятыми. По умолчанию: пусто. "

Вы можете найти более подробную информацию о доступных опциях для плагина Weave в разделе «Изменение опций конфигурации»:

person VASャ    schedule 22.10.2018
comment
Не уверен, что это работает для меня. Мы постоянно увеличиваем и уменьшаем наши узлы. Так что имейте фиксированный набор узлов, я не верю, что это решит проблему. Я обновил вопрос, добавив дополнительную информацию. - person cchanley2003; 30.10.2018
comment
Учитывая ваше обновление, я не вижу другого выхода, кроме как разделить кластеры на разные подсети / VPC. - person VASャ; 02.11.2018