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

时间:2020-05-03 08:17:09

标签: kubernetes kubernetes-ingress kubernetes-pod kubernetes-networking

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

  1. Server1和Server2通过以下方式连接到网络网关应用程序 IPsec隧道。

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

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

  4. 我创建了另一个名为TELEMETRY的Kubernetes服务,该服务 适用于网络数据包。该服务收集一些遥测 数据包中的数据,并可选地对 数据包。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我建议不要使用istio这样的服务网格,而不是从头开始构建它。 Istio和许多其他服务网格具有数据平面代理,例如envoy,它拦截从一个Pod传出并进入另一个Pod的所有流量。服务网格提供了诸如mTLS,TLS证书旋转和遥测之类的安全功能,还有更多现成的功能。

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