向外部服务器请求时如何在 Kubernetes 容器中代理 IP 地址

how to proxy IP address in Kubernetes container when requesting to foreign server

我正在尝试向外部服务器发出 GET 请求。但出于安全目的,外国服务器需要我们的 IP 地址。

现在的问题是我 运行 我的应用程序位于 Kubernetes 的 pod 中,具有三个节点。 当我发送请求时,它会获取其中一个 kubernetes 节点的 IP 地址。 我可以将静态 IP 地址添加到我的所有节点。但据我所知,最佳做法是只向外界发布网关(入口)IP 地址。其他所有内容都应隐藏。

所以我尝试像这样代理我的 axios 请求:

var res = await axios.get('https://someapi.com', {
    proxy: {
        host: 'ingressIP', //static ip
        port: 80
    }
});

但是请求仍然returns一个错误说这个IP是不允许的。它返回了我的 POD 所在的 kubernetes 节点的 IP 地址。

我不确定,您是否能够以某种方式通过入口传递您的流量。

我们也遇到了同样的问题。我们需要从特定的 IP-address.

向 third-party 服务器发送请求

但我们解决这个问题的方式有点不同,我们只是创建了一个新的静态 IP 小型服务器,在那里安装了 Squid 代理服务器,并将我们的应用程序配置为使用 Squid 服务器作为 HTTP 转发代理。

Squid 有很多功能,IMO 对于这样一个简单的东西来说相当臃肿use-case;我会建议一些更轻量级的东西,比如 tinyproxy (docker image here). So what you can do is create a Deployment using that image, pin it to a specific node (the one with the IP that the 3rd party API allows) using nodeSelector,创建一个指向它的 Service,并在你的请求中使用它作为代理。不过,这种方法有一个缺点 - 您只是在基础架构中添加了一个(另一个)单点故障。