K8s集群配置NetworkPolicy未生效 无法拦截Pod流量问题求助
排查步骤
- 确认集群安装了支持NetworkPolicy的网络插件
这是最高频的问题,K8s本身不原生实现NetworkPolicy,依赖网络插件支持。默认的flannel、kube-router默认配置都不支持NetworkPolicy,需要切换为Calico、Cilium、Weave Net等原生支持NetworkPolicy的网络插件。你可以执行kubectl get pods -n kube-system查看当前运行的网络插件组件确认。 - 确认资源处于同一命名空间
NetworkPolicy是命名空间级别的资源,你当前创建的access-nginx策略仅作用于它所在命名空间下标签为app: nginx的Pod。如果你的busybox测试Pod、nginx Pod和NetworkPolicy不在同一个命名空间,策略不会生效,跨命名空间访问需要在规则中补充namespaceSelector配置。 - 确认没有其他冲突的NetworkPolicy
执行kubectl get networkpolicy -A查看集群所有命名空间的NetworkPolicy,确认没有全局放行、或者针对app: nginxPod的更宽松放行规则覆盖了当前策略。 - 确认Pod标签匹配
执行kubectl get pods --show-labels确认nginx Pod确实带有app=nginx的标签,避免标签不匹配导致策略根本没绑定到目标Pod。 - 补充策略类型声明(可选,部分旧版本集群需要)
部分低版本K8s集群需要显式声明policyTypes才能让策略生效,你可以修改你的NetworkPolicy配置补充该字段:
修改后重新apply再测试即可。apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: access-nginx spec: podSelector: matchLabels: app: nginx policyTypes: - Ingress ingress: - from: - podSelector: matchLabels: access: "true"
内容的提问来源于stack exchange,提问作者Shyam
相关产品推荐
相关产品推荐

