Приложение сетевого шлюза в кластере Kubernetes, которое обрабатывает и пересылает сетевые пакеты

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

  1. Server1 и Server2 подключаются к приложению сетевого шлюза через туннели IPsec.

  2. Пакеты, отправленные Server1, инкапсулируются в туннель IPsec и предназначены для Server2, то есть IP-адрес назначения во внутреннем пакете является IP-адресом Server2.

  3. Сервер IPsec работает в модуле кластера. Это было определено как IPSEC службы Kubernetes.

  4. Я создал еще один сервис Kubernetes под названием TELEMETRY, который работает с сетевыми пакетами. Эта служба собирает некоторые данные телеметрии из пакетов и при необходимости применяет к пакетам некоторые политики.

  5. Расшифрованные пакеты, полученные на этом модуле IPSEC, имеющем IP-адрес назначения, совпадающий с IP-адресом Server2, необходимо пересылать в сервисный модуль TELEMETRY.

  6. Модуль службы TELEMETRY обрабатывает пакет и должен пересылать его обратно модулю IPSEC, чтобы пакет мог быть переадресован на фактический сервер назначения Server2 по туннелю IPsec.

  7. Как только это сработает, я также планирую добавить пару сервисов после TELEMETRY, чтобы сервисный модуль TELEMETRY пересылал пакет этим сервисам. Последняя служба в цепочке перенаправит его обратно в модуль IPSEC.

Я столкнулся с проблемами при пересылке IP-пакетов от одного модуля к другому. Я хочу пересылать пакеты, которые не предназначены для какой-либо службы или модуля в кластере, из одного модуля в другой. Я исследовал Flannel, но он не пересылает пакеты на оверлее, если целевой модуль работает на том же узле. Это не кажется хорошим решением с точки зрения производительности из-за множества копий пакетов между пользователем и пространством ядра.

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


person Arun Kaushal    schedule 03.05.2020    source источник
comment
есть ли причины не использовать сервисную сетку?   -  person Nick    schedule 07.05.2020


Ответы (1)


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

Если плоскость управления, предлагаемая сетками сервисов с открытым исходным кодом, не поддерживает ваш конкретный вариант использования, вы можете написать настраиваемую плоскость управления, по-прежнему используя envoy в качестве прокси-сервера плоскости данных.

person Arghya Sadhu    schedule 03.05.2020