Kubernetes NetworkPolicy配置:允许公网访问 禁止同命名空间Pod互访
配置失效原因
你之前写的两个业务侧NetworkPolicy里,ingress: - {}是完全放通所有入站来源的配置,没有做任何来源过滤,同命名空间内其他Pod的请求自然也会被允许,所以两个Pod之间可以正常通信。你配置的默认拒绝所有入站的基线策略是正确的,不需要修改。
正确配置步骤
- 先查询集群的Pod CIDR地址段,执行以下命令即可获取:
kubectl cluster-info dump | grep -m 1 cluster-cidr
- 替换原有两个业务的NetworkPolicy配置,核心逻辑是仅放通非集群Pod网段的外部流量,所有集群内Pod来源的请求会被默认拒绝策略拦截,自然实现两个Pod之间的隔离。
假设查询到的集群Pod CIDR为10.244.0.0/16,配置示例如下:
# 放通外部对test-server的访问,拦截所有集群内Pod请求 kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: allow-test-server-ingress spec: podSelector: matchLabels: app: test-server policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 0.0.0.0/0 except: - 10.244.0.0/16 # 替换为实际查询到的集群Pod CIDR段 --- # 放通外部对test-server2的访问,拦截所有集群内Pod请求 kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: allow-test-server2-ingress spec: podSelector: matchLabels: app: test-server2 policyTypes: - Ingress ingress: - from: - ipBlock: cidr: 0.0.0.0/0 except: - 10.244.0.0/16 # 替换为实际查询到的集群Pod CIDR段
验证与注意事项
- 配置生效后,进入任意一个业务Pod,直接访问另一个Pod的IP或对应Service地址,会出现连接超时,说明互访隔离生效。
- 从集群外部访问两个服务的对外暴露地址(NodePort/LoadBalancer/Ingress地址),可以正常访问说明外部放通规则生效。
- 如果服务是通过NodePort/LoadBalancer暴露,建议将对应Service的
externalTrafficPolicy字段设置为Local,避免kube-proxy做SNAT替换源IP导致规则匹配异常。 - 后续如果需要放通其他指定集群内Pod访问这两个服务,只需要在对应NetworkPolicy的
ingress.from列表下新增对应的podSelector或namespaceSelector匹配规则即可,不会破坏两个服务之间的隔离逻辑。
内容的提问来源于stack exchange,提问作者user5580578
相关产品推荐
相关产品推荐

