首页 > 解决方案 > Kubernetes集群中处理和转发网络数据包的网关应用程序

问题描述

我正在尝试在 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 地址相同,需要转发到 TELEMETRY 服务 pod。

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

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

我在将 IP 数据包从一个 Pod 转发到另一个 Pod 时面临挑战。我想将不发往集群中任何服务或 pod 的数据包从一个 pod 转发到另一个 pod。我探索了 Flannel,但如果目标 pod 在同一节点上运行,它不会转发覆盖上的数据包。由于用户和内核空间之间存在多个数据包副本,从性能角度来看,这似乎不是一个好的解决方案。

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

标签: kuberneteskubernetes-ingresskubernetes-podkubernetes-networking

解决方案


我建议不要从头开始构建它,而是为此使用诸如istio 之类的服务网格。Istio 和许多其他服务网格具有数据平面代理,例如envoy,它拦截来自一个 pod 并进入另一个 pod 的所有流量。服务网格提供安全功能,例如 mTLS、TLS 证书轮换和遥测以及更多开箱即用的功能。

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


推荐阅读