外部名称服务的 Kubernetes 网络策略

Kubernetes Network Policy for External Name Service

我们正在考虑为我们的 Kubernetes 集群设置网络策略。但是,至少在我们的一个命名空间中,我们有一个 ExternalName 服务(kubernetes reference - service types) for an AWS RDS intance. We would like to restrict traffic to this ExternalName service to be from a particular set of pods, or if that is not possible, from a particular namespace. Neither the namespace isolation policy or the NetworkPolicy resoure seem to apply to ExternalName services. After searching the documentation for both Weave and Project Calico,似乎没有提及此类功能。

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

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

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

  1. 仅阻止 DNS 查找(pods 如果他们知道 IP 或完全限定的 RDS 主机名,仍然可以连接到数据库):

    • 更改名称空间隔离以支持 ExternalName 服务
    • make kube-dns 计算它收到的每个请求背后的客户端 pod
    • 让 kube-dns 了解命名空间隔离设置并应用它们,因此只有 returns CNAME 记录被授权 pods
  2. Return DNS 查找,但阻止 RDS 连接:

    • 以某种方式扩展 NetworkPolicy 以控制出口流量
    • blacklist/whitelist RDS IP 批发(说起来容易做起来难,因为它们是动态的)或使网络控制器跟踪 DNS 查找和相应 block/allow 连接的结果。

无论哪种情况,您都必须在 Kubernetes 和下游提交大量功能请求。

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