【问题标题】:Routing all net traffic from a k8s container through another in the same pod将来自 k8s 容器的所有网络流量路由到同一个 pod 中的另一个容器
【发布时间】:2021-01-16 19:40:42
【问题描述】:

我正在使用 GKE 进行部署。

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

对于上述情况,我配置了一个 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 连接逻辑和程序分开。

我怎样才能做到这一点?

【问题讨论】:

  • 你能提供一些用例吗?您想使用 3rd 方 VPN 访问 GKE 以连接到您的应用。那么这些请求也应该通过这个 VPN 发送到外部,否则会是别的什么?老实说,我不确定你想通过使用 3rd 方软件的 VPN 连接到 GKE 来实现什么。使用Cloud NatCloud VPN 可以实现很多事情。如果您想绕过地理定位,可以使用不同的位置。
  • 谢谢。我需要访问客户的 API 端点,该端点只有在使用他们的 VPN 时才能访问。到目前为止,我可以运行一个连接到这个 VPN 的容器,并且可以成功地 cURL 端点。将此添加到问题正文中。
  • 在 initContainer 配置 Pod 的 iptables 并将所有流量转发到运行 envoy 代理的 sidecar 容器端口时,检查是否可以实现类似于 Istio 注入机制的东西(因为 Pod 容器共享相同的网络命名空间,它实际上是一个本地主机端口)。 istio.io/latest/blog/2019/data-plane-setup/#sidecar-injection 自动注入功能有助于避免更改工作负载清单。

标签: docker kubernetes networking


【解决方案1】:

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

【讨论】:

  • 谢谢。事实上,只需在同一个 pod 中运行 VPN 容器和 .NET Core 程序容器就可以了。
【解决方案2】:

根据您的评论,我想我可以建议您两种方法。

  1. Private GKE ClusterCloudNAT

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

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

您可以配置 VPN 以将数据包转发到您的集群。详情请查看其他Stackoverflow threads

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2021-07-13
    相关资源
    最近更新 更多