Kubernetes群集的不同防火墙规则

时间:2018-06-01 19:11:42

标签: kubernetes google-cloud-platform

我在一个K8群集中运行一些内部服务以及一些面向客户的服务。内部应该只能从某些特定的ips访问,面向客户的服务应该可以在全球访问。

所以我使用正确的ip过滤器创建了我的Ingress和一个nginx Ingress控制器和一些K8s LoadBalancer服务。

现在我看到GCP中的防火墙规则是在幕后创建的。但他们是冲突的,并且面对"客户面对"防火墙规则否决了内部"那些。因此,我的K8s群集的所有内容都在全球范围内可见。

用例对我来说听起来不是那么奇怪 - 您是否知道如何让K8s集群的某些部分受到防火墙规则的保护,哪些部分可以在任何地方访问?

1 个答案:

答案 0 :(得分:2)

令人惊讶的是,默认情况下,Kubernetes Ingress对象创建的GCP中的L7(http / https)负载均衡器没有IP白名单功能,因此您所描述的工作正常。您可以使用X-Forwarded-For标题过滤最终结果(请参阅Setting Up HTTP(S) Load Balancing下的目标代理)。

白名单将通过Cloud Armour提供,目前处于私人测试状态。

使这种情况稍微复杂一点:由Kubernetes LoadBalancer对象(因此,不是Ingress)创建的GCP中的L4(tcp / ssl)负载均衡器确实具有IP过滤功能。您只需在服务上设置.spec.loadBalancerSourceRanges即可。当然,服务不会为您提供基于URL /主机的路由,但您可以通过部署像nginx-ingress这样的入口控制器来实现这一点。如果你走这条路线,你仍然可以为你需要注释的内部服务创建Ingress,以便新的入口控制器选择它们。这是一个相当标准的解决方案,实际上比为每个内部服务创建L7更便宜(您只需为所有内部服务支付1个转发规则)。

(上面的“内部服务”我指的是您需要能够从本身群集外部访问的服务,但只能从特定的IP(例如VPN,办公室等)访问。对于服务,您只需要从内部访问群集你应该使用type: ClusterIP