我们在Google Cloud的Google Kubernetes Engine上使用Kubernetes。我们的系统根据请求动态生成实例,这些实例称为外部Web服务。外部服务生成图像,每个实例的带宽使用量不小。
此外部Web服务已配置了IP白名单。
有什么方法可以将所有从选定的pod(它们组合在一个节点池中)到外部服务的请求集中到一个IP中?
答案 0 :(得分:2)
答案是Yes
,实际上有几种方法可以实现这一目标。我将回答一种简单的方法来完成此任务。通过代理服务器建立隧道。
也可以将外部ip分配给您的所有节点,并允许它们从网络服务中进行,但是许多工程师不愿意这样做,因为没有人出于一百万个安全原因将这些节点暴露给外部世界。
在同一群集中添加一个单独的非常小的纳米VM,然后安装HAProxy
或Nginx
或您喜欢的代理。或将代理安装在您已经拥有的实例之一上,但请确保已将其附加外部ip,并且该实例应位于群集中,以减少任何延迟问题。
现在将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
运行主服务器,在10.0.2.0/24
运行节点。并将此附加代理服务添加到10.10.1.101/32
的某个位置,并在同一VPC中使用52.*.*.*
的外部IP。现在,您要做的就是在10.10.1.101
上进行开放通信,以接受从port 2020
到10.0.2.0/24
的通信。
现在,您的Pod必须继续轮询10.10.1.101:2020/api/health/check
而不是直接通过外部Web服务进行轮询。
现在您可以在网络服务虚拟机上仅列出代理虚拟机ip 52.*.*.*
,而不会出现任何问题。
这只是如何完成此操作的一个示例。但是有几种方法可以做到这一点。也有很多使用Sidecar进行此操作的方法。
希望这会有所帮助。