networking - Kubernetes 对具有 IP 白名单的外部端点的出站调用

标签 networking kubernetes vpc

我们在谷歌云的谷歌 Kubernetes 引擎上使用 Kubernetes。我们的系统根据请求动态生成实例,这些实例调用外部 Web 服务。外部服务生成图像,每个实例的带宽使用量不小。

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

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

最佳答案

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

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

在同一个集群中添加一个单独的非常小的可能是 nano VM 并安装一个 HAProxyNginx或您最喜欢的代理。或者在您已经拥有的实例之一上安装代理,但确保它附加了外部 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/

相关文章:

elasticsearch - 如何从外部访问存储在Docker容器中的Elasticsearch?

linux - 在多宿主 Linux 服务器中收听多播的问题

从私有(private)注册表中提取图像时,docker swarm 创建服务失败

amazon-web-services - 如何使用 boto 在子网上找到 "Modify Auto-Assign Public IP"?

networking - Network Link Conditioner 似乎对 Lion、Mountain Lion 的网络行为没有影响

java - 如何从 Python 中的套接字读取原始字节?

kubernetes - 限制 namespace /群集中每个部署的最大Pod数

jenkins - 在 kubernetes 中使用 kubectl set image 命令使用 CI (Jenkins) 创建部署的行业标准解决方案是什么

gremlin - 通过应用程序负载均衡器连接到 AWS Neptune

mysql - 无法将安全组添加到RDS实例