Проблемы с подключением Calico IP-in-IP с вложенными контейнерами в Kubernetes

Я использую контроллер cluster-api, использующий Kubernetes в качестве поставщика инфраструктуры, я пытаюсь запустить Kubernetes Nodes как Kubernetes Pods и сформировать кластер внутри кластера.

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

Я работаю на GKE, используя их реализацию CNI по умолчанию. Затем я пытаюсь использовать Calico для реализации наложения внутреннего кластера, используя инкапсуляцию IP-in-IP, поэтому узлам кластера инфраструктуры не нужно знать, как маршрутизировать IP-адреса Pod внутреннего кластера.

Я создаю кластер инфраструктуры следующим образом (образ UBUNTU необходим для модуля ядра ipip, необходимого для IP-in-IP Calico.

gcloud container clusters create management-cluster --image-type=UBUNTU

Затем я развертываю несколько модулей nginx во внутреннем кластере. Если они попадают на один и тот же внутренний узел кластера, они могут подключаться друг к другу. Если они приземляются на отдельные внутренние узлы кластера, они не могут, поэтому я предполагаю, что это означает, что туннель IP-in-IP не работает должным образом, но я не уверен, почему. Это не удается, даже если внутренние узлы кластера (поды) приземляются на тот же узел инфраструктуры (внешний кластер). Диапазоны CIDR модуля и службы двух кластеров не перекрываются.

Я понимаю, что это не поддерживаемый вариант использования Calico, но я не вижу причины, по которой это невозможно, и хотел бы, чтобы он работал. Должны ли узлы внешнего кластера поддерживать пересылку пакетов IP-in-IP? Они настроены на пересылку пакетов IPv4, но я не уверен, что этого достаточно.

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


person dippynark    schedule 06.01.2020    source источник


Ответы (1)


Необходимо было разрешить ipencap протокол на узлах GKE:

iptables -C FORWARD -p ipencap -j ACCEPT || iptables -A FORWARD -p ipencap -j ACCEPT
person dippynark    schedule 06.01.2020