Kubernetes通过IP白名单将呼叫传给外部端点

时间:2019-12-24 12:53:30

标签: networking kubernetes vpc

我们在Google Cloud的Google Kubernetes Engine上使用Kubernetes。我们的系统根据请求动态生成实例,这些实例称为外部Web服务。外部服务生成图像,每个实例的带宽使用量不小。

此外部Web服务已配置了IP白名单。

有什么方法可以将所有从选定的pod(它们组合在一个节点池中)到外部服务的请求集中到一个IP中?

1 个答案:

答案 0 :(得分:2)

答案是Yes,实际上有几种方法可以实现这一目标。我将回答一种简单的方法来完成此任务。通过代理服务器建立隧道。

也可以将外部ip分配给您的所有节点,并允许它们从网络服务中进行,但是许多工程师不愿意这样做,因为没有人出于一百万个安全原因将这些节点暴露给外部世界。

在同一群集中添加一个单独的非常小的纳米VM,然后安装HAProxyNginx或您喜欢的代理。或将代理安装在您已经拥有的实例之一上,但请确保已将其附加外部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 202010.0.2.0/24的通信。

现在,您的Pod必须继续轮询10.10.1.101:2020/api/health/check而不是直接通过外部Web服务进行轮询。

现在您可以在网络服务虚拟机上仅列出代理虚拟机ip 52.*.*.*,而不会出现任何问题。

这只是如何完成此操作的一个示例。但是有几种方法可以做到这一点。也有很多使用Sidecar进行此操作的方法。

希望这会有所帮助。