Kubernetes外部域名服务网络政策

时间:2017-02-17 12:12:20

标签: kubernetes weave project-calico

我们正在考虑为Kubernetes集群设置网络策略。但是,在我们的至少一个命名空间中,我们有一个ExternalName服务({3}}用于AWS RDS intance。我们希望将此ExternalName服务的流量限制为来自特定的一组pod,或者如果不可能来自特定名称空间。kubernetes reference - service types)namespace isolation policy似乎都不适用于ExternalName服务。在搜索NetworkPolicy resoureWeave的文档后,似乎没有提及这种功能。

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

1 个答案:

答案 0 :(得分:2)

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

有两种方法可以解决这个问题:

  1. 阻止DNS查找(如果pod知道IP或完全合格的RDS主机名,则仍然可以连接到数据库):

    • 更改名称空间隔离以支持ExternalName服务
    • 让kube-dns在每个请求后面显示客户端窗格
    • 让kube-dns知道命名空间隔离设置并应用它们,因此它只将CNAME记录返回给授权的pod
  2. 返回DNS查找,但阻止RDS连接:

    • 以某种方式扩展NetworkPolicy以控制出口流量
    • 黑名单/白名单RDS IP批发(说起来容易做起,因为它们是动态的)或使网络控制器跟踪DNS查找的结果并相应地阻止/允许连接。
  3. 在任何一种情况下,您都必须在Kubernetes和下游提交一些功能请求。

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