0

我们正在考虑为我们的 Kubernetes 集群设置网络策略。但是,在我们的至少一个命名空间中,我们有一个用于 AWS RDS 实例的 ExternalName 服务(kubernetes 参考 - 服务类型)。我们希望将到此 ExternalName 服务的流量限制为来自一组特定的 pod,或者如果这不可能,则来自特定的命名空间。命名空间隔离策略NetworkPolicy 资源似乎都不适用于 ExternalName 服务。在搜索了WeaveProject Calico的文档后,似乎没有提及此类功能。

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

4

1 回答 1

2

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

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

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

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

    • 以某种方式扩展 NetworkPolicy 以控制出口流量
    • 黑名单/白名单 RDS IP 批发(说起来容易做起来难,因为它们是动态的)或让网络控制器跟踪 DNS 查找的结果并相应地阻止/允许连接。

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

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

于 2017-02-19T18:34:45.950 回答