向外部服务器请求时如何在 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
,并在你的请求中使用它作为代理。不过,这种方法有一个缺点 - 您只是在基础架构中添加了一个(另一个)单点故障。
我正在尝试向外部服务器发出 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
,并在你的请求中使用它作为代理。不过,这种方法有一个缺点 - 您只是在基础架构中添加了一个(另一个)单点故障。