2017-02-17 51 views
0

我们正在研究为我们的Kubernetes集群设置网络策略。但是,至少在我们的一个名称空间中,我们有一个ExternalName服务(对于AWS RDS实例,为kubernetes reference - service types))。我们希望将来自此外部名称服务的流量限制为来自特定的一组Pod,或者如果这不可能,命名空间。无论是namespace isolation policyNetworkPolicy resoure似乎适用于ExternalName服务。搜索文档都WeaveProject Calico后,似乎没有被这样的功能的任何提及。Kubernetes外部名称服务的网络策略

是否可以限制网络流量一个ExternalName服务来自一组特定的pod或特定的命名空间?

回答

1

你不能这样做。ExternalName服务是一个DNS构造。客户端为服务执行DNS查找,kube-dns返回CNAME记录,在您的情况下为RDS实例。然后客户端直接连接到RDS。

有两种可能的方法来解决这个:

  1. 块只是DNS查找(豆荚仍然可以连接到数据库,如果他们知道的IP地址或完全合格的RDS主机名):

    • 更改名称空间隔离以支持ExternalName服务
    • 使kube-dns能够在每次请求后获得客户端pod
    • 使kube-dns知道名称空间隔离设置并应用它们,所以它只返回CNAME记录,以授权荚
  2. 返回DNS查找,但块RDS连接:

    • 莫名其妙地延长NetworkPolicy也控制出口流量
    • 黑名单/白名单RDS IP批发(说起来容易,因为它们是动态的),或者使网络控制器跟踪DNS查找的结果并相应地阻止/允许连接。

在这两种情况下,你必须提交数量Kubernetes和下游的功能要求。

来源:我写了EN支持代码。

+0

感谢您的回答。我还在K8S Slack社区的sig-network频道上发布了这个问题。 Calico员工和Weave员工回答。项目Calico支持[出口策略](http://docs.projectcalico.org/master/getting-started/kubernetes/tutorials/advanced-policy),Weave有一个[issue](https://github.com/weaveworks/) weave/issues/2624)以支持[出口政策的K8S建议](https://docs.google.com/document/d/1yAPpjdIV6aq7qteVIoYUbagE27jYn-6pnAUXUX0r078)。似乎关于出口的讨论似乎已经停滞了一点。 – iBlocksShaun