Вопрос или проблема
0
Я учусь работать с k3s и rancher, и с моих рабочих узлов я могу подключаться к другим машинам, которые находятся за пределами сети рабочих узлов, но из подов, которые находятся внутри них, я могу получить доступ только к компьютерам, которые находятся в той же сети, что и машины рабочих узлов, но не могу получить доступ к другим компьютерам, которые доступны рабочим узлам.
Например, рабочие узлы и подобные машины находятся в сети 192.168.1.x, все компьютеры с IP-адресами 192.168.1.x поды узлов могут без проблем получить к ним доступ, но, например, компьютер с IP-адресом в сети 192.168.2.x могут быть доступны машинами рабочих узлов (через статический маршрут), но поды, размещенные на узлах рабочих машин, не могут к ним получить доступ.
Можно ли настроить что-то в rancher для всех подов рабочих узлов, как я сделал на рабочих машинах, используя статический маршрут?!
Ответ или решение
Конечно, давайте рассмотрим вашу ситуацию и подробно разберем возможные решения проблемы, связанной с доступом ваших подов к сетям за пределами той, в которой они размещены.
Теория
На сегодняшний день K3s является одним из оптимальных решений для развертывания Kubernetes в малых и средних средах, а также в ограниченных инфраструктурах. Он предлагается в качестве легковесной версии Kubernetes и часто используется совместно с Rancher для упрощения процессов управления кластерами. Однако, как и в любом другом Kubernetes, в K3s поды изолированы от внешней сети и используют внутреннюю сеть кластера. Эта изоляция может мешать подключению подов к подсетям, которые находятся вне сети, к которой имеют доступ непосредственно узлы-воркеры.
Проблема заключается в том, что поды при их развертывании используют набор правил маршрутизации, настроенных на уровне кластера и самого Kubernetes. Эти правила отличаются от тех, что заданы на уровне операционной системы ваших узлов. В вашем случае, узлы имеют статические маршруты, позволяющие им соединяться с подсетью 192.168.2.x, тогда как поды такие маршруты могут не учитывать в своей сетевой конфигурации.
Пример
Рассмотрим простой пример: у вас есть узел ClusterNode1 с IP-адресом 192.168.1.10, и вы установили для него статический маршрут для доступа к сети 192.168.2.0/24 через какой-либо шлюз. Узел может пинговать компьютер 192.168.2.20, но под, запущенный в этом узле, не может. Это происходит потому, что сетевая политика подов (использующая CNI — Container Network Interface) не знает о маршрутах, установленных на уровне операционной системы узла.
Применение
Теперь перейдем к возможным способам решения:
-
Изменение CNI-плагина: Ваш кластер может использовать различный CNI-плагин для поддержания сетевой связности подов. Среди популярных CNI можно выделить Flannel, Calico и другие. Очень важно правильно настроить CNI, чтобы обрабатывать маршрутизацию между различными сетями. Например, с использованием Calico можно настраивать сетевые политики, которые позволяют управлять доступом подов к внешним сетям.
-
Добавление маршрутов непосредственно к подам: Это наиболее гибкий способ, позволяющий вручную задать маршруты для подов, но это может быть трудоемким и сложным процессом. Оптимальным вариантом может быть создание DaemonSet, который будет размещаться на каждом узле и автоматически настраивать маршруты для подов.
-
Использование Service и Ingress: Если ваша цель состоит в том, чтобы предоставить доступ к внешним сервисам или ресурсам, возможно, стоит рассмотреть вариант использования Service или Ingress контроллеров для управления входящим трафиком, что может обеспечить правильное перенаправление трафика на нужные внешние ресурсы.
-
Настройка Pod Subnet и Network Policies: Иногда изменение настроек подсети подов и политик сети на уровне кластера позволяет снять ограничение на доступ. Это требует анализа и, возможно, перестройки кластерной сетевой конфигурации.
-
Использовать externalTrafficPolicy: Если ваш трафик проходит через узловые порты, то настройка externalTrafficPolicy в режиме Local может помочь в маршрутизации трафика от конкретных узлов, что позволит подам использовать те же маршруты, что и узел.
Итак, настоятельно рекомендуем изучить документацию и возможности вашего текущего CNI-плагина. Подобные изменения могут значительно улучшить вашу сетевую инфраструктуру и обеспечить более гибкий и безопасный доступ подов к необходимым ресурсам в сети. Кроме того, убедитесь, что ваше сетевое окружение соответствует политике безопасности, так как предоставление подам доступа к внешним сетям может представлять определенные риски.
В заключение, стоит отметить, что каждая инфраструктура индивидуальна, и часто требуется пробовать разные подходы для достижения наилучшего результата. Возможно, самым эффективным будет комбинация нескольких методов, предоставляющих необходимую функциональность и безопасность.