我们正在考虑为Kubernetes集群设置网络策略 . 但是,在我们的至少一个命名空间中,我们有一个ExternalName服务(kubernetes reference - service types)用于AWS RDS intance . 我们希望将此ExternalName服务的流量限制为来自特定的一组pod,或者如果不可能,则限制来自特定的namespace isolation policy或NetworkPolicy resoure似乎都不适用于ExternalName服务 . 在搜索Weave和Project Calico的文档之后,似乎没有提到这样的功能 .
是否可以将来自ExternalName服务的网络流量限制为来自特定的一组pod或特定的命名空间?
1 回答
你真的不能这样做 . ExternalName服务是DNS构造 . 客户端为服务执行DNS查找,kube-dns返回CNAME记录,在您的情况下,返回RDS实例 . 然后客户端直接连接到RDS .
有两种方法可以解决这个问题:
阻止DNS查找(如果知道IP或完全合格的RDS主机名,则pod仍然可以连接到数据库):
更改名称空间隔离以支持ExternalName服务
make kube-dns计算每个请求后面的客户端pod
使kube-dns知道命名空间隔离设置并应用它们,因此它只将CNAME记录返回给授权的pod
返回DNS查找,但阻止RDS连接:
以某种方式扩展NetworkPolicy以控制出口流量
黑名单/白名单RDS IP批发(说起来容易做起,因为它们是动态的)或使网络控制器跟踪DNS查找的结果并相应地阻止/允许连接 .
在任何一种情况下,您都必须在Kubernetes和下游提交一些功能请求 .
来源:我写了EN支持代码 .