Kubernetes:通过服务路由传出的 UDP 流量

Kubernetes:通过服务路由传出的 UDP 流量

我的问题是关于 Kubernetes 的内部流量路由,以及一般的路由/NAT。

目标

我在 Kubernetes 上运行 Wireguard 服务,我想将所有通过 Wireguard 进入的传出流量路由到另一项服务(我们称之为筛选),然后才能进入互联网。此外,我希望能够透明地交换筛选客户端方面没有任何中断的 Pod。

从网络角度来说,我希望通过以下跃点路由流量

WG 客户端 -> Wireguard SVC(10.43.112.165)-> Wireguard Pod(10.42.0.32)-> 过滤器 SVC(10.43.111.132)-> 过滤器 Pod(10.42.0.44)-> 互联网

我到目前为止所取得的成就是

WG 客户端 -> Wireguard SVC(10.43.112.165)-> Wireguard Pod(10.42.0.32)-> 过滤器 Pod(10.42.0.44)-> 互联网

为了为了到达那里,我手动做了以下事情

Wireguard pod 内部

ip route replace default via 10.42.0.44 # the filter pod's IP

在 - 的里面筛选

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

如上所述,这并不是我想要的,因为我无法交换筛选无需重新配置 Wireguard Pod。

问题是我不能简单地定义筛选服务作为 Wireguard pod 中的默认网关。

ip route replace default via 10.43.111.132 # the filter SVC's IP
Error: Nexthop has invalid gateway.

以上内容对我来说非常有意义,因为筛选SVC 位于不同的网络中。但我不知道如何解决这个问题。

最后,有两个问题

  1. 在将流量发送到互联网之前,如何通过另一项服务进行路由?
  2. 实现这一点的正确方法是什么?当 Wireguard Pod 启动时,我可以说服 Kubernetes 为我应用路由吗?或者我应该完全绕过 Kubernetes,自己在容器的入口点或其他地方应用规则吗?

答案1

虽然这个答案不能完全解决你的问题,但我决定提供一些可能对案例有帮助的信息。


  1. 在将流量发送到互联网之前,如何通过另一项服务进行路由?

典型的方法是使用服务来连接应用程序,因此您应该使用它的说法是正确的。

我强烈建议你检查一下代理集群管理部分下的部分。特别要查看kube-proxy每个节点上运行的程序以及它用于访问服务。

Kubernetes 网络使用 CNI 插件在集群内运行流量。有各种各样的插件提供很多功能,例如 calico、flannel。但对于你的情况,你可能需要检查引力虫洞支持 wireguard 加密选项的插件。


  1. 实现这一点的正确方法是什么?当 Wireguard Pod 启动时,我可以说服 Kubernetes 为我应用路由吗?或者我应该完全绕过 Kubernetes,自己在容器的入口点或其他地方应用规则吗?

通过使用 kube-proxy 和 iptables 等服务,您还可以为每个 kubernetes 服务提供负载平衡。以下是有关服务

在 kube-proxy 中iptables mode,它会监视 Kubernetes 控制平面中 Service 和 Endpoint 对象的添加和删除情况。对于每个 Service,它会安装 iptables 规则,这些规则会捕获流向 Service 和 的流量clusterIPport并将该流量重定向到 Service 的后端集之一。对于每个 Endpoint 对象,它会安装 iptables 规则,这些规则会选择一个后端 Pod

Kubernetes 为该服务分配一个 IP 地址,供服务代理使用。服务选择器的控制器会持续扫描与其选择器匹配的 Pod,并将更新发布到名为“my-service”的 Endpoint 对象。


总结一下,为了更好地控制集群内应用程序和服务之间的流量,你可能需要检查Istio。原因如下:

  • Istio 的流量管理模型依赖于与您的服务一起部署的 Envoy 代理。您的网格服务发送和接收的所有流量(数据平面流量)都通过 Envoy 代理,因此您可以轻松地引导和控制网格周围的流量,而无需对您的服务进行任何更改。

  • 将单片应用程序分解为原子服务具有多种好处,包括更好的灵活性、更好的可扩展性和更好的服务重用能力。然而,微服务也有特定的安全需求:

  • 为了防御中间人攻击,他们需要流量加密。为了提供灵活的服务访问控制,他们需要相互 TLS 和细粒度的访问策略。为了确定谁在什么时候做了什么,他们需要审计工具。

  • Istio 使用入口网关和出口网关来配置在服务网格边缘执行的负载均衡器。入口网关允许您定义所有传入流量流经的网格入口点。出口网关是一个对称概念;它定义网格的出口点。出口网关允许您将 Istio 功能(例如监控和路由规则)应用于离开网格的流量。

您可以在此处阅读更多内容。这是关于在主机上配置 wireguard 的内容。


文章也可能对您的用例感兴趣。它描述了节点/主机上的 wireguard 配置。

相关内容