Pod网络策略配置后跨Namespace Pod连通超时问题求助
跨Namespace Pod连通性问题解决方案
核心问题排查与修复步骤
1. 修正NetworkPolicy的Pod选择器标签
你创建myhttpd Pod时指定的标签是app=httpd-server,但现有NetworkPolicy的podSelector.matchLabels写的是app=myhttpd,标签不匹配导致策略根本没应用到目标Pod,这是连通失败的关键原因。
修正后的NetworkPolicy配置:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: allow-port-ingress-80 namespace: default spec: podSelector: matchLabels: app: httpd-server # 匹配实际Pod的标签 policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 10.64.8.0/22 # 需确认此网段包含测试Pod的IP ports: - protocol: TCP port: 80
2. 验证IP网段的正确性
执行命令查看测试Pod(cli-httpd)的IP,确认是否在10.64.8.0/22网段内:
kubectl get pod cli-httpd -o wide --namespace=<测试Pod所在Namespace>
如果测试Pod不在该网段,替换为实际的Pod网段CIDR。
3. 可选:用更灵活的规则替代IP网段限制
如果不想依赖固定IP网段,可修改NetworkPolicy通过Namespace标签或Pod标签放行:
方式1:允许特定Namespace的所有Pod访问
先给测试Pod所在Namespace打标签:
kubectl label namespace <测试Namespace> name=test-ns
修改NetworkPolicy的from规则:
ingress: - from: - namespaceSelector: matchLabels: name: test-ns ports: - protocol: TCP port: 80
方式2:允许带特定标签的Pod访问
不管所在Namespace,只要Pod带有app=myhttpd标签就放行:
ingress: - from: - podSelector: matchLabels: app: myhttpd ports: - protocol: TCP port: 80
4. 确认CNI插件支持NetworkPolicy
部分CNI插件(如默认配置的Flannel)不支持NetworkPolicy,需确保集群使用Calico、Cilium、Weave Net等支持该功能的CNI。执行命令检查:
kubectl get pods -n kube-system | grep -E 'calico|cilium|weave'
如果没有相关组件,需部署支持NetworkPolicy的CNI插件。
5. 验证修复效果
应用修正后的NetworkPolicy:
kubectl apply -f <修正后的yaml文件路径>
重新执行连通性测试:
kubectl run cli-httpd --rm -it --image=busybox --restart=Never -l app=myhttpd --namespace=<测试Namespace> -- /bin/sh # 执行测试命令 wget --spider --timeout=5 100.64.9.198
内容的提问来源于stack exchange,提问作者Zama Ques
相关产品推荐
相关产品推荐

