Приложение сетевого шлюза в кластере Kubernetes, которое обрабатывает и пересылает сетевые пакеты - PullRequest
1 голос
/ 03 мая 2020

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

  1. Сервер1 и Сервер2 подключаются к приложению сетевого шлюза через туннели IPse c.

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

  3. IPse c Сервер работает в модуле в кластере. Это было определено как служба Kubernetes IPSE C.

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

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

  6. Модуль обслуживания TELEMETRY обрабатывает пакет и должен переслать его обратно в модуль IPSE C, чтобы пакет мог быть переслан в фактический сервер назначения2 через туннель IPse c.

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

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

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

1 Ответ

0 голосов
/ 03 мая 2020

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

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

...