使用 IP 白名单对外部终结点进行 Kubernetes 出站调用



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

此外部 Web 服务配置了 IP 允许列表。

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

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

也可以将外部 ip 分配给所有节点并允许它们来自 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/24port 2020通信。

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

现在,您可以仅将 Web 服务虚拟机上的代理虚拟机 ip52.*.*.*列入候补名单,而不会出现任何问题。

这只是如何做到这一点的一个例子。但是有几种方法可以做到这一点。使用边车也有许多高级方法可以做到这一点。

希望这是有帮助的。

最新更新