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

Kubernetes中kube-node-lease命名空间NetworkPolicy配置与Pod重启权限的最佳实践咨询

解答你的Kubernetes NetworkPolicy疑问

作为刚接触Kubernetes的新手,你这个问题问得很到位——NetworkPolicy的配置很容易不小心限制了必要的系统流量,不过先给你吃个定心丸:

关于kube-node-lease是否会影响Pod重启的问题

完全不用担心Pod无法正常重启!原因在于:Pod的重启是由节点上的kubelet直接负责的,它不需要从kube-node-lease命名空间发起入站请求到你的Nginx Pod。kube-node-lease的作用是节点向kube-apiserver发送心跳信号,和Pod的重启流程没有直接的入站流量交互。你的NetworkPolicy只限制了外部入站到Nginx Pod的流量,而kubelet在本地重启Pod的操作不受这个规则的约束。

不过如果你的Pod有自定义的逻辑依赖kube-node-lease的流量(比如某些特殊监控),那另当别论,但默认场景下完全没问题。

授予必要访问权限的最佳实践方案(除了给kube-node-lease加标签)

如果要避免遗漏系统组件的必要访问,同时保持你的隔离策略,这里有几个实用的方案:

  • 允许节点IP段的流量:集群内的核心组件(比如kubelet、kube-proxy)都运行在节点上,直接允许节点IP段的入站流量,能覆盖绝大多数系统级访问需求。修改你的NetworkPolicy:

    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: allow-different-namespace-policy
      namespace: isolation
    spec:
      podSelector:
        matchLabels:
          app: nginx
      ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                  env: test
            - ipBlock:
                cidr: 192.168.0.0/16 # 替换成你集群的节点实际IP段
    
  • 匹配系统命名空间的默认标签:Kubernetes的系统命名空间(比如kube-system、kube-node-lease)都带有默认标签kubernetes.io/metadata.name: <命名空间名>,直接通过这个标签允许流量,不用手动添加自定义标签:

    ingress:
      - from:
          - namespaceSelector:
              matchLabels:
                env: test
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-system
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-node-lease
    

    这种方式更贴合Kubernetes的默认配置,后续集群升级也不用担心标签丢失的问题。

  • 精细控制到Pod级别的访问:如果不想开放整个系统命名空间的访问,可以组合namespaceSelector和podSelector,只允许特定组件的Pod访问。比如允许kube-dns访问:

    ingress:
      - from:
          - namespaceSelector:
              matchLabels:
                env: test
          - namespaceSelector:
              matchLabels:
                kubernetes.io/metadata.name: kube-system
            podSelector:
              matchLabels:
                k8s-app: kube-dns
    
  • 设置默认拒绝+按需允许的策略:先给isolation命名空间设置一个默认拒绝所有入站流量的NetworkPolicy,再逐个添加允许的规则,这样能最大限度保证安全性:

    # 默认拒绝所有入站流量
    kind: NetworkPolicy
    apiVersion: networking.k8s.io/v1
    metadata:
      name: default-deny-ingress
      namespace: isolation
    spec:
      podSelector: {}
      policyTypes:
      - Ingress
    

    然后再保留你原来的允许test命名空间的规则,按需添加系统组件的访问规则,避免无意识的流量泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:32:31