You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes中用Network Policy仅允许特定命名空间访问Pod

解决特定命名空间Pod访问控制的NetworkPolicy配置问题

你的配置无效是因为NetworkPolicy的spec字段下没有顶层的namespaceSelector属性,正确的做法是在ingress.from中配置来源命名空间的选择器,同时通过podSelector指定当前命名空间内需要被保护的Pod。

错误配置的问题点

你在spec下直接写了namespaceSelector,这不属于NetworkPolicy的合法顶层字段,Kubernetes会忽略这个配置,导致策略不生效。

正确的配置示例

如果你想允许cka-exam命名空间的所有Pod访问special-ns命名空间的所有Pod,配置应该是这样:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: allow-from-cka-exam-ns
  namespace: special-ns  # 策略作用在被访问的目标命名空间
spec:
  podSelector: {}  # 选择special-ns内所有Pod,若要保护特定Pod,替换为对应的matchLabels
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: cka-exam  # 匹配来源命名空间

补充说明

  1. 标签匹配注意事项:kubernetes.io/metadata.name是Kubernetes 1.24及以上版本自动为命名空间添加的标签,如果你的集群版本低于1.24,需要手动给cka-exam命名空间打标签:

    kubectl label namespace cka-exam ns-identity=cka-exam
    

    然后把NetworkPolicy里的namespaceSelector改成:

    namespaceSelector:
      matchLabels:
        ns-identity: cka-exam
    
  2. 限制目标Pod:如果不需要保护special-ns里的所有Pod,只想让特定Pod被访问,修改podSelector为目标Pod的标签,比如:

    podSelector:
      matchLabels:
        app: backend-service
    
  3. 策略类型声明:显式指定policyTypes: [Ingress]可以确保策略只处理入站流量,避免歧义。

内容的提问来源于stack exchange,提问作者DimiDak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:15:31