K8s:通过Pod将流量路由到子网(从Pod访问VPN客户端)

问题描述 投票:0回答:1

我正在Kubernetes / GKE上运行一个应用程序。

我有一堆没有公共IP的设备。我需要从应用程序访问那些设备的SSH和VNC。

最初的想法是在群集中运行OpenVPN服务器并连接设备,但随后我遇到了问题:

似乎没有任何优雅/惯用的方式将流量从应用程序路由到VPN客户端。

基本上,我只需要能够告诉route 10.8.0.0/24 via vpn-pod

我找到可能的解决方案:

  • 修改节点上的路由。我只想让节点保持短暂状态,并且只在K8s清单中显示所有内容。

  • DaemonSet在具有K8s清单的节点上添加路由。目前尚不清楚如何跟踪OpenVPN pod IP的更改。

  • Istio。似乎有点过头了,但是我无法在文档中找到解决我问题的方法。 L3路由似乎不受支持,因此它必须涉及端口映射。

  • Calico。它本身在GKE上受支持,并且确实支持L3路由,但是我想避免为可能用单个自定义路由解决的问题引入如此深远的更改。

  • OpenVPN客户端sidecar。只要允许客户端相互通信,就可以非常优雅地工作,并且在何处以及如何托管VPN服务器都无关紧要。但是,我想隔离客户端,可能需要从不同的Pod访问客户端,这意味着必须将Sidecar放在多个位置,这会污染部署。可以通过将客户端分为不同IP范围的类来实现隔离。

  • GCP / GKE内的路由。它们仅允许将节点指定为下一跳。这也意味着应用程序和VPN服务器都必须在GCP中运行。

我目前倾向于在裸机VM上运行OpenVPN服务器并使用GCP路由。它可以正常工作,我可以从K8s应用程序ping VPN客户端,但是它似乎仍然很脆弱且很难连接。

但是,只有Sidecar解决方案提供了一种完全分离关注点的方法。

是否有惯用的解决方案可以从其他Pod访问Pod专用网络?

networking kubernetes routing google-kubernetes-engine openvpn
1个回答
0
投票

您设计的解决方案-使用OpenVPN服务器作为多个设备的网关(我想将有数十个甚至数百个同时连接)是最佳的实现方法。

很遗憾,GCP的VPN不提供所需的功能(仅Site2站点连接,因此我们无法使用它。

您可以通过将OpenVPN放入GCP(与应用程序位于同一VPC网络中)来简化解决方案,这样您的应用程序可以直接与服务器通信,然后与客户端通信。我相信通过这样做,您将摆脱“易碎且硬接线”的部分。

您必须决定哪种解决方案最适合您-在GCP内外开放VPN。

我认为,如果您打算在GCP中托管Open VPN服务器,它将更优雅,更简单,但不一定便宜。

不管采用哪种解决方案,您都可以将客户端设置在不同的IP范围内,但是我将配置一些iptables规则(在Open VPN服务器上)以阻止通信,并允许客户端仅访问网络中的几个IP。这样一来,如果将来您需要一些客户端进行通信,则只需iptable配置即可。

© www.soinside.com 2019 - 2024. All rights reserved.