在共享Kubernetes集群内运行的应用程序的VPN访问

时间:2018-03-02 09:52:59

标签: kubernetes vpn

我们目前在Amazon EC2机器上提供我们的软件作为软件即服务。我们的软件是一个基于微服务的应用程序,提供大约20种不同的服务。 对于更大的客户,我们在一组专用VM上使用专用安装,VM的数量(以及我们的微服务的实例数)取决于客户的要求。任何大客户的共同要求是我们的软件需要访问客户的数据中心(例如,用于LDAP访问)。到目前为止,我们使用亚马逊的虚拟专用网关功能解决了这个问题。

现在我们想将我们的SaaS部署转移到Kubernetes。当然,我们可以在单个客户的VM上创建一个Kubernetes集群(例如,使用kops),但这样做几乎没有什么好处。 相反,从透视的角度来看,我们希望运行一个大型Kubernetes集群,在该集群上,我们将各个客户安装部署到专用命名空间中,与我们现有客户的固定机器分配相比,这样可以提高资源利用率并降低成本。 从Kubernetes方面来说,我们的软件已经运行良好,我们可以将多个安装部署到一个集群中。然而,一个开放的主题是VPN访问。我们需要的是一种允许客户的命名空间中的所有窗格访问客户VPN的方法,而不是任何其他客户的方式。的VPN。

在谷歌搜索主题时,我找到了将VPN客户端添加到单个容器的方法(例如,https://caveofcode.com/2017/06/how-to-setup-a-vpn-connection-from-inside-a-pod-in-kubernetes/),这显然不是一个选项)。 其他方法似乎描述了在K8s中运行VPN 服务器(这也不是我们需要的)。 其他人(例如" Strongswan IPSec VPN服务",https://www.ibm.com/blogs/bluemix/2017/12/connecting-kubernetes-cluster-premises-resources/)使用DaemonSets在每个工作节点上配置路由"。这似乎也不是我们可以接受的解决方案,因为这将允许工作节点上的所有pod(无论它们在哪个命名空间)访问相应的VPN ...如果我们有,也将无法正常工作数十个客户安装,每个安装都需要在集群上设置自己的VPN。

是否有任何方法或解决方案可以提供我们需要的内容,例如,仅针对特定命名空间中的pod的VPN访问? 或者是否还有其他方法可以满足我们的要求(由于客户之间共享Kubernetes工作节点而降低了成本)?

对于LDAP访问,一个选项可能是设置一种LDAP代理,这样只有这个代理才需要具有对客户网络的VPN访问权限(通过在每个客户的小型专用VM上运行此代理,然后将代理配置为应用程序的LDAP端点)。但是,LDAP访问只是我们的应用程序需要的连接的许多方面中的一个,具体取决于用例。

1 个答案:

答案 0 :(得分:0)

如果您的IPSec集中器支持VTI,则可以使用防火墙规则路由通信。例如,PFSense支持它:https://www.netgate.com/docs/pfsense/vpn/ipsec/ipsec-routed.html

使用VTI,您可以使用某种策略路由来引导流量:https://www.netgate.com/docs/pfsense/routing/directing-traffic-with-policy-routing.html

但是,我在这里可以看到两个大问题:

  • 您不能在冲突的网络中拥有两个IPSEC隧道。例如,您的kube网络为192.168.0.0/24,您有两个客户:A(172.12.0.0/24)和B(172.12.0.0/12)。不幸的是,这可能发生(除非您的客户能够对这些网络进行NAT)。

  • 查找规则匹配的理想标准(以允许路由),因为您的源网络始终相同。可以选择使用标记包(使用iptables mangle甚至通过应用程序),但是您仍然会遇到第一个问题。

基于WSO2(API网关提供程序)体系结构的情况类似。他们在每个网络中使用反向代理解决了这个问题(很遗憾,但确实如此)https://docs.wso2.com/display/APICloud/Expose+your+On-Premises+Backend+Services+to+the+API+Cloud#ExposeyourOn-PremisesBackendServicestotheAPICloud-ExposeyourservicesusingaVPN

此致

更新:

我不知道您是否使用GKE。如果是,则可以选择使用Alias-IP:https://cloud.google.com/kubernetes-engine/docs/how-to/alias-ips。 POD的IP可从VPC路由。因此,您可以根据其CIDR应用某种路由策略。

相关问题