ipBlock 管的是集群外地址
NetworkPolicy 的 from 与 to 里除了用选择器挑 Pod 和命名空间,还能用 ipBlock 直接按 CIDR 放行或排除集群外的地址:cidr 给出网段,except 排除其中一部分,常见于「只允许办公网访问数据库」「只允许出站到指定第三方接口」。它匹配的是数据包里的源 IP 与目的 IP,流量在出节点时若被 SNAT 改写,规则命中的地址就和发起方真实地址不同,配置前必须先看清链路。
基本信息
| 适用平台 | 支持 NetworkPolicy 的 CNI 插件,ipBlock 的实现完整度因插件而异 |
|---|---|
| 关键结构 | ipBlock.cidr 与 ipBlock.except |
| except 约束 | 必须是 cidr 的子集,写反会被校验拒绝 |
| 使用位置 | ingress.from 表示入站来源,egress.to 表示出站目的 |
| 前置条件 | 目标 Pod 必须被某条 NetworkPolicy 的 podSelector 选中 |
典型使用场景
- 数据库白名单:只允许固定办公网段与应用网段访问
- 外部依赖管控:只放行到指定第三方 API 的出站流量
- 隔离扫描来源:排除已知异常网段,降低无效连接干扰
- 混合云互通:按对端 VPC 网段精确放行而不是整段开放
- 分期迁移:用 ipBlock 记录历史来源,逐步过渡到按身份放行
ipBlock 示例
ipBlock 示例
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-allow-office
namespace: prod
spec:
podSelector:
matchLabels:
app: mysql
policyTypes: ["Ingress"]
ingress:
- from:
- ipBlock:
cidr: 203.0.113.0/24 # 放行该网段
except:
- 203.0.113.128/25 # 但排除其中一半
ports:
- protocol: TCP
port: 3306常见场景与要点
| 场景 | 写法要点 | 注意 |
|---|---|---|
| 放行办公网访问 | from.ipBlock.cidr 写办公网段 | 先确认出口 IP 是否固定 |
| 排除部分地址 | except 必须是 cidr 的子集 | 写反会被校验拒绝 |
| 限制出站到第三方 | egress.to.ipBlock 写对端网段 | 注意出节点时的地址改写 |
| 默认拒绝后放行 | 先建默认拒绝策略再逐条放行 | 漏掉 DNS 出站会导致解析失败 |
只有被 NetworkPolicy 选中的 Pod 才受约束:完全没被任何策略选中的 Pod 默认全通,因此「加了策略却没效果」多数是选择器没对上,而不是 ipBlock 写错。
集群外目标经过 SNAT 时,规则匹配的是改写后的地址:先用抓包或 CNI 的可观测能力确认真实来源,再固化白名单,否则要么仍然不通,要么放行过宽。