将来自 k8s 容器的所有网络流量路由到同一 Pod 中的另一个容器

时间:2021-01-16 19:40:42

标签: docker kubernetes networking

我使用 GKE 进行部署。

编辑:我需要访问客户的 API 端点,只有在使用他们的 VPN 时才能访问该端点。到目前为止,我可以运行一个连接到此 VPN 的容器,并且可以成功地卷曲端点。

对于上述内容,我已经配置了一个 Debian docker 映像,该映像在部署时成功连接到 VPN(特别是使用 Kerio Control VPN)。每当我从该容器发出网络请求时,它都会按预期通过 VPN 连接运行。

我有另一个映像运行 .NET Core 程序,该程序会发出必要的 HTTP 请求。

this guide 我知道可以使用纯 docker 通过另一个容器运行容器的流量。具体使用 --net=container:something 选项(修剪示例):

docker run \
  --name=jackett \
  --net=container:vpncontainer \
  linuxserver/jackett

但是,我必须使用 Kubernetes 进行此部署,因此我认为使用 2 容器 pod 会很好。我想保持 VPN 连接逻辑和程序分离。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

pod 中的每个容器都有共享的网络资源。如果您在一个容器中运行 vpn 客户端,则该 Pod 中的所有容器都可以通过 vpn 访问网络。

答案 1 :(得分:0)

根据您的评论,我想我可以为您提供两种方法。

  1. Private GKE ClusterCloudNAT

在此设置中,您应该使用 Private GKE clusterCloudNAT 进行外部通信。您需要使用 manual externalIP。 此方案使用特定的 externalIP 进行 VPN 连接,但您的客户需要 whitelist 访问此 IP。

  1. 使用 CloudVPN 的站点到站点 VPN

您可以配置您的 VPN 以将数据包转发到您的集群。有关详细信息,您应该查看其他Stackoverflow threads