Kubernetes 集群中处理和转发网络数据包的网络网关应用程序

Network gateway application in Kubernetes cluster that processes and forwards network packets

我正在尝试在 Kubernetes 集群中构建一个网络应用程序,该集群处理两个服务器之间的数据包并为流经该应用程序的流量提供安全服务。以下几点总结了此应用程序的工作原理:

  1. Server1 和 Server2 连接到网络网关应用程序 IPsec 隧道。

  2. Server1发送的数据包封装在IPsec隧道中, 是发往Server2的,也就是目的IP地址在 内部数据包是Server2 IP地址。

  3. IPsec 服务器在集群中的 Pod 中运行。这已被定义为 一个 Kubernetes 服务 IPSEC。

  4. 我创建了另一个 Kubernetes 服务,称为 TELEMETRY,它 适用于网络数据包。此服务收集一些遥测数据 来自数据包的数据,并有选择地应用一些策略 数据包.

  5. 在具有目的地的 IPSEC pod 上接收到的解密数据包 IP地址与Server2 IP地址相同,需要转发到 遥测服务舱。

  6. TELEMETRY 服务 pod 处理数据包并且应该 将其转发回 IPSEC pod,以便可以将数据包转发到 IPsec 隧道上的实际目标 Server2。

  7. 一旦这可行,我还计划在之后添加几个服务 TELEMETRY,以便 TELEMETRY 服务 pod 转发数据包 到那些服务。链中的最后一个服务会将其转发回 IPSEC pod.

我在将 IP 数据包从一个 pod 转发到另一个 pod 时面临挑战。我想将未发往集群中任何服务或 pod 的数据包从一个 pod 转发到另一个 pod。我探索了 Flannel,但如果目标 pod 在同一节点上 运行,它不会转发覆盖层上的数据包。由于用户和内核之间存在多个数据包副本 space。

,从性能角度来看,这似乎不是一个好的解决方案

如果有人能在我的应用程序中提出一个将 IP 数据包从一个 pod 转发到另一个 pod 的好的解决方案,那将是一个很大的帮助。

与其从头开始构建,我建议使用诸如 istio for this. Istio and many other service meshes have data plane proxy such as envoy 之类的服务网格,它会拦截所有从一个 pod 传出并进入另一个 pod 的流量。服务网格提供 mTLS、TLS 证书轮换和遥测等安全功能,以及更多开箱即用的功能。

如果开源服务网格提供的控制平面不支持您的特定用例,您可以编写自定义控制平面,同时仍然使用 envoy 作为数据平面代理。