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



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

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

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

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

但该请求仍然返回一个错误,表示不允许使用IP。它返回了kubernetes节点的IP地址,我的POD所在的位置。

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

我们也遇到了同样的问题。我们需要从特定的IP地址向第三方服务器发送请求。

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

Squid有很多功能,对于这样一个简单的用例来说,IMO相当臃肿;我建议一些更轻的东西,比如tinyproxy(这里是docker图片(。因此,您可以使用该映像创建一个Deployment,使用nodeSelector将其固定到特定节点(具有第三方API允许的IP的节点(,创建一个指向它的Service,并将其用作请求中的代理。不过,这种方法有一个缺点——您只是在基础设施中添加了(另一个(单点故障。

最新更新