Kubernetes 和 OpenVPN:来自更广泛网络的入站路由

Kubernetes 和 OpenVPN:来自更广泛网络的入站路由

我们正在尝试在 Kubernetes 集群中建立一个 OpenVPN 远程访问服务器,以取代之前托管在本地防火墙上的服务。

我们的更广泛的网络部分位于 GCP/GCE 上,通过 IPsec 将动态 BGP 路由到我们的内部站点。

目前,在现有的内部 OpenVPN 服务器上,分配给连接客户端的 IP 地址可以从网络的其余部分路由,因此我们可以在没有 NAT 的情况下与它们进行入站和出站通信。

我们希望将服务迁移到 Kubernetes Engine,因为我们的所有其他 Linux 工作负载都将迁移到那里,而且我们更喜欢 DevOps 风格的工作流程,用它来管理可用性和恢复。

那么,假设我们的 OpenVPN 容器有客户端连接到 10.30.50.0/24 范围,Pod IP 动态分配在 10.50.30.0/20,我们如何告诉 GCP 将 10.30.50.0/24 范围路由到 Pod 中的 OpenVPN 服务?这可能吗?

一个想法是在 Pod 启动时调用 GCE API 来添加指向 Pod IP 的静态路由,但我不确定流量是否会传输集群并到达 Pod 中的 OpenVPN。

答案1

无法在 GCP 中创建路由以将子网 10.30.50.0/24 从辅助 IP 范围 10.30.0.0/20 路由到使用 OpenVPN。因此,有两种可能的解决方案可以实现您想要的效果:

1.- 您可以在 GCP 中创建一个 VM 实例来设置 OpenVPN 隧道。然后您可以添加一个静态路由在 GCP 中使用此 VM 实例的 nexthop。与 OpenVPN 实例位于同一 VPC 网络中的 GKE 集群将使用它作为 nexthop,因此来自节点的所有流量都将使用 OpenVPN 隧道。如果您不想通过 VPN 实例重定向来自集群中所有节点的所有流量,您可以指定标签并在创建集群或节点池期间附加它。

  1. 您可以像上例一样创建一个虚拟机实例,而不是配置下一跳为“Open VPN”实例的默认路由,而是需要在 GKE 集群的节点内配置 iptables。例如,配置一个 iptable,使所有到目标 IP 地址和源 IP 地址 10.30.50.0/24 的流量都使用下一跳“OpenVPN 实例的 IP 地址”。

请记住,对于这两种解决方案,您必须启用别名 IP在每个 GKE 集群中允许从本地到 pod 的通信。

相关内容