我们在谷歌云的谷歌 Kubernetes 引擎上使用 Kubernetes。我们的系统根据请求动态生成实例,这些实例调用外部 Web 服务。外部服务生成图像,每个实例的带宽使用量不小。
此外部 Web 服务配置了 IP 白名单。
有什么方法可以将来自所选 pod(它们在节点池中分组)的所有请求集中到具有单个 IP 的外部服务?
最佳答案
答案是Yes
,实际上有几种方法可以实现这一点。我将回答一个简单的方法来完成这项工作。通过代理服务器建立隧道。
也可以将外部 ips 分配给所有节点并允许它们来自 web 服务,但许多工程师不喜欢这样做,因为出于一百万个安全原因,没有人愿意将节点暴露给外部世界。
在同一个集群中添加一个单独的非常小的可能是 nano VM 并安装一个 HAProxy
或 Nginx
或您最喜欢的代理。或者在您已经拥有的实例之一上安装代理,但确保它附加了外部 ip,并且它应该在您的集群内部,以减少任何延迟问题。
现在绑定(bind)代理中的 url 以接受到特定端口的连接并将它们路由到具有外部 Web 服务的实例。这是 HAProxy 代码的示例。
listen port_2020
bind :2020
mode tcp
server external-web-service externalwebservice.mycompany.com:443 check
完成此设置后。假设您的 k8s 在
10.0.1.0/24
运行 masters和 10.0.2.0/24
的节点.并在 10.10.1.101/32
某处添加了此附加代理服务外部 IP 为 52.*.*.*
在同一个 VPC 中。现在你所要做的就是在 10.10.1.101
上公开交流。接受与 port 2020
的通信来自 10.0.2.0/24
.现在您的 pod 必须继续轮询
10.10.1.101:2020/api/health/check
而不是直接的外部网络服务。现在您可以将代理 vm ip
52.*.*.*
列入候补名单在您的网络服务虚拟机上没有任何问题。这只是如何做到这一点的一个例子。但是有几种方法可以完成这项工作。使用 sidecar 也有许多高级方法。
希望这会有所帮助。
关于networking - Kubernetes 对具有 IP 白名单的外部端点的出站调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59469135/