有1个用于kubernetes出口流量的传出IP

时间:2020-08-03 14:38:55

标签: kubernetes proxy

当前设置

集群规范:数字海洋上的托管Kubernetes

目标

我的广告连播正在访问某些网站,但我想先使用代理。

问题

我需要使用的代理仅在“允许列表”中使用1个IP地址。

我的群集正在使用具有节点自动缩放器的不同节点,因此我拥有多个且正在更改的IP地址。

我正在考虑的解决方案

  • 在集群外部设置代理(squid?nginx?)(当前,当我访问HTTPS网站时无法正常工作)
  • Istio可以让我设置网关吗? (不了解Istio)
  • 使用GCP管理的K8,并按照Kubernetes cluster outgoing traffic IP上的答案进行操作。但是我们所有的堆栈都在Digital Ocean上,那里的价格更好。

我很好奇什么是最佳实践,最简单的解决方案,或者是否有人曾经经历过这样的用例:)

最佳

1 个答案:

答案 0 :(得分:1)

您可以设置所有流量以通过istio-egressgateway

然后,您可以操纵istio-egressgateway使其始终部署在群集的同一节点上,并将该IP地址列入白名单。

优点:超级简单。但。如果您尚未使用Istio,则仅为此目的设置Istio可能是用火箭筒杀死一只蚊子。

缺点::需要确保该节点没有更改IP地址。否则,istio-egressgateway本身可能无法部署(如果您没有将标签添加到新节点),则需要为新节点(新IP地址)重新配置所有内容。另一个弊端可能是事实,如果流量增加,则有一个HPA,它将部署更多网关副本,并且所有副本将部署在同一节点上。因此,如果您将要处理大量流量,则仅出于此目的隔离一个节点可能是个好主意。

另一个建议是您所建议的;代理。我会直接推荐一个Envoy代理。我的意思是,Istio仍将使用Envoy对吗?因此,直接获取代理,将其放在pod中,执行我之前提到的相同操作;节点相似性,因此它将始终在同一节点上运行,因此它将以相同的IP退出。

优点:您不会为一件小事安装整个服务网格控制平面。

缺点::与以前相同,因为如果出现问题,仍然存在节点IP更改的问题,此外,您还需要管理自己的Deployment对象HPA,进行配置而不是使用Istio对象(例如GatewayVirtualService)。

最后,我看到第三个选择;在群集外部设置NAT网关,并配置通过它的流量。

优点:您无需配置任何kubernetes对象,因此无需设置任何节点亲缘关系,因此不会出现节点过多或IP变化的情况。另外,您可以从群集中删除外部IP地址,因此它将更加安全(除非您有其他工作负载需要直接连接到Internet)。另外,将单个节点配置为NAT可能比在节点中运行的kubernetes pod更具弹性。

缺点:设置起来可能会更加复杂吗?

还有一个一般的缺点,即您只能将1个IP地址列入白名单,因此您总是会遇到单点故障。甚至是NAT网关;它仍然会失败。

GCP静态IP无法为您提供帮助。另一个建议是保留IP地址,因此您可以随时重复使用它。但这并不是说您会将IP地址自动添加到出现故障的随机节点中。需要人工干预。我认为您不能在一个特定的节点上拥有静态IP地址,如果它掉线了,新创建的节点将选择相同的IP。据我所知,该服务不存在。

现在,GCP确实提供了非常灵活的NAT网关。它由Google管理,因此不会失败。不过不便宜。