对Kubernetes NetworkPolicies双向访问控制规则的疑问
Kubernetes NetworkPolicy 规则澄清
先明确核心逻辑,解决你的误解:默认的 AllowAll 规则仅在 Pod 未关联对应方向的 NetworkPolicy 时生效。
关键规则细节
- 当 Pod 没有被任何 Ingress 类型的 NetworkPolicy 选中时,它的 Ingress 策略默认是 AllowAll;同理,未被任何 Egress 类型的 NetworkPolicy 选中时,Egress 策略默认是 AllowAll。
- 一旦你给某个 Pod 配置(或关联)了某一方向的 NetworkPolicy,该方向的默认规则会立刻从 AllowAll 变为 DenyAll——只有规则里明确列出的流量才会被允许。
针对你的例子分析
你提到的场景:Pod A 访问 Pod B,仅给 Pod B 配置了允许 Pod A 访问的 Ingress 规则。这种情况下:
- Pod A 没有关联任何 Egress 类型的 NetworkPolicy,所以它的 Egress 策略保持默认 AllowAll,完全允许访问 Pod B,不需要额外配置 Pod A 的 Egress 规则。
- 只有当 Pod A 被某个 Egress NetworkPolicy 选中时(哪怕这个 Policy 里没写任何允许规则),Pod A 的 Egress 策略才会变成 DenyAll,这时候你才必须在该 Policy 中添加允许访问 Pod B 的规则,连接才能生效。
对官方文档描述的解读
官方说“源 Pod 的 Egress 和目标 Pod 的 Ingress 必须同时允许连接”是准确的:
- 如果 Pod 没有对应方向的 NetworkPolicy,默认的 AllowAll 就等同于“允许该连接”;
- 只有当 Pod 有对应方向的 NetworkPolicy 时,才需要看规则是否明确允许。
你可能混淆了两种“未配置规则”的情况:
- 完全没给 Pod 关联对应方向的 NetworkPolicy → 默认 AllowAll,流量放行;
- 给 Pod 关联了对应方向的 NetworkPolicy,但 Policy 里没写允许规则 → 默认 DenyAll,流量被拒。
内容的提问来源于stack exchange,提问作者Jananath Banuka
相关产品推荐
相关产品推荐

