首页/云/Kubernetes 速查/默认拒绝策略(default-deny)
网络与服务55 条

默认拒绝策略(default-deny)

零信任起点:先把命名空间全部流量拒绝,再逐条放行必要通信;能用最小放行集合描述清楚业务依赖。

Kubernetes 速查云更新于 2026-10-13

默认拒绝是什么

NetworkPolicy 采用白名单语义:某个 Pod 一旦被任何策略选中,未被放行的方向就全部拒绝。默认拒绝策略的做法是先建一条 podSelector 为空、policyTypes 同时包含 Ingress 与 Egress 的策略,把命名空间内所有 Pod 的两个方向都关掉,再按业务依赖逐条放行。它是零信任的起点,能把「谁会访问我、我会访问谁」显式描述出来,代价是必须先把依赖梳理清楚。

默认拒绝(入向+出向)

默认拒绝(入向+出向)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: prod
spec:
  podSelector: {}          # 空选择器 = 选中本命名空间所有 Pod
  policyTypes: ['Ingress', 'Egress']   # 两个方向都不放行任何流量

随后立刻放行 DNS

随后立刻放行 DNS
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-dns-egress
  namespace: prod
spec:
  podSelector: {}
  policyTypes: ['Egress']
  egress:
    - to:
        - namespaceSelector:
            matchLabels:
              kubernetes.io/metadata.name: kube-system
          podSelector:
            matchLabels:
              k8s-app: kube-dns
      ports:
        - {protocol: UDP, port: 53}
        - {protocol: TCP, port: 53}

典型使用场景

  • 合规与等保要求:需要证明命名空间之间、Pod 之间默认不可互访,只开放必要路径
  • 多租户集群:每个业务命名空间独立设置默认拒绝,避免误连到别人的数据库
  • 遏制横向移动:Pod 被入侵后无法扫描并连接同集群其他服务,缩小爆炸半径
  • 依赖梳理工具:先上默认拒绝再按告警逐条放行,能倒逼团队盘清真实调用关系
  • 与 Ingress/Egress 网关模式配合:只放行到网关,东西向流量统一受控

上线前的验证动作

上线前的验证动作
kubectl get networkpolicy -A                                  # 确认策略已覆盖目标命名空间
kubectl exec -it web-x -n prod -- nslookup kubernetes.default   # DNS 是否被放行
kubectl exec -it web-x -n prod -- nc -zv db 5432                # 业务端口是否可达
kubectl exec -it web-x -n prod -- nc -zv 10.0.0.5 443 -w 3      # 出向到外部地址是否被拦
kubectl describe networkpolicy default-deny-all -n prod         # 复核选择器与方向

生效与不生效的边界

条件结果说明
CNI 支持 NetworkPolicy策略生效Calico、Cilium、Antrea 等支持,Flannel 默认不支持
CNI 不支持策略被接受但不生效对象能创建成功,流量不受任何影响,极易误判为已加固
Pod 被任一策略选中该方向默认拒绝同一命名空间里多条策略取并集放行
Pod 未被任何策略选中该方向放开所以默认拒绝必须覆盖全部 Pod
启用默认拒绝后,出向的 DNS 查询同样会被拒绝。放行规则必须与主策略一同上线,否则整个命名空间的域名解析与对外调用会立刻失败,故障表现像是「网络全挂」,实际根因是策略缺一条 53 端口放行。
策略里不写 ports 表示对所选来源或目的放开全部端口,安全基线应逐项收窄到具体协议与端口;同时记得把监控、日志采集、镜像仓库、外部 API 等出向依赖一起梳理进去。

易错点

  • 一刀切上默认拒绝却没先梳理依赖清单:业务集体异常,回滚窗口内只能整条策略删除,等于白上一次
  • 集群 CNI 不支持 NetworkPolicy 却以为已加固:对象创建成功、无任何报错,实际流量完全不受限
  • 只放行 UDP 53 不管 TCP 53:DNS 大响应被截断后走 TCP 重试,出现偶发解析失败
  • 放行规则用 IP 写死 CoreDNS 地址:CoreDNS 重建换 IP 后解析立刻中断,应改用命名空间与标签选择

数据来源与参考

  • Kubernetes 官方文档 · NetworkPolicy(默认拒绝示例)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌