Kubernetes 网络策略阻止 AKS 上节点之间的流量

Kubernetes network policy blocks traffic between nodes on AKS

我正在使用 Azure Kubernetes 服务 (AKS),并希望确保特定命名空间内的 pods 只能接收来自同一命名空间中其他 pods 的入口流量。

我发现此网络策略可实现此名称空间隔离(来自 here):

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  namespace: my-namespace
  name: deny-from-other-namespaces
spec:
  podSelector:
    matchLabels:
  ingress:
  - from:
    - podSelector: {}

我创建此网络策略后,它成功阻止了“my-namespace”上的 pods 与另一个命名空间之间的流量,而“my-namespace”中的 pods 之间的通信仍然可以进行。但是,仅当 pods 都安排在同一个节点上时才会如此。如果 pods 都在“我的命名空间”中,但 运行 在不同的节点上,那么它们之间的连接将不再有效。一旦我删除上述网络策略,连接就会再次工作。 我认为这不是预期的行为,因为 pods 在同一个命名空间中,因此应该允许入口流量。 有人知道什么会导致这个问题吗?

我正在 运行使用 kubenet 和 calico 网络策略使用 Kubernetes 1.19.6 版。

看来您在 AKS 集群 v1.19+ 中围绕“Pod IP SNAT/Masquerade 行为”遇到了一个已知问题。

其他用户在那里解释了它如何影响使用 Calico 的网络策略插件的集群:

Just for information of other users, this issue causes problem for a NetworkPolicy with podSelector configs. Since the policy will be set based on the ipset of the pods in the IPtables by Calico, but the source IP of the packet is set to the node IP and even the packets that are supposed to be allowed will be dropped.

请在 github 问题 #2031 中阅读有关此问题的更多信息,以及硬修复(节点映像升级)或解决方法(运行 Daemonset 在 iptables 中创建 SNAT 豁免)。