【问题标题】:Kubernetes outbound calls to an external endpoint with IP whitelistingKubernetes 对具有 IP 白名单的外部端点的出站调用
【发布时间】:2019-12-24 12:53:30
【问题描述】:

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

此外部网络服务已配置 IP 白名单。

有什么方法可以将来自所选 pod(它们在节点池中分组)的所有请求集中到具有单个 IP 的外部服务?

【问题讨论】:

标签: networking kubernetes vpc


【解决方案1】:

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

也可以将外部 ips 分配给所有节点并允许它们来自 web 服务,但许多工程师不喜欢这样做,因为出于一百万个安全原因,没有人愿意将节点暴露给外部世界。

在同一集群中添加一个单独的非常小的可能是 nano 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 的某处添加了这个附加代理服务,外部 ip 为 52.*.*.*,在同一个 VPC 中。现在您所要做的就是在10.10.1.101 上打开通信以接受来自10.0.2.0/24 的与port 2020 的通信。

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

现在您可以将代理 vm ip 52.*.*.* 列入您的 Web 服务 vm 上的候补名单,而不会出现任何问题。

这只是如何完成的一个示例。但是有几种方法可以完成这项工作。使用 sidecar 也有许多高级方法。

希望这有帮助。

【讨论】:

  • 谢谢,我脑子里也有类似的想法。还有一个问题,有没有一种方法可以为 Kubernetes 中的代理附加外部 IP?这样如果代理 pod 死了,它会返回相同的外部 IP?
  • 嘿,我尝试了一些关于这种方法的新方法,认为值得一提。类似于将 NAT 与您的所有节点相关联并仅在您的外部服务上为该 NAT IP 打开。这比配置代理服务器并对其进行跟踪和维护要简单得多。
  • @BinaryBullet,您如何“将 NAT 与所有节点关联”,如果您可以发送一些教程链接,将不胜感激。谢谢
猜你喜欢
  • 1970-01-01
  • 2020-03-14
  • 2020-06-23
  • 2018-11-19
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多