策略模板与应急处置手册
sentinel, Lab
v3.0
STABLE
Kubernetes
NetworkPolicy
零信任
微隔离
云原生安全
场景 5 — 策略模板与应急处置手册
通用策略模板
| 模板 |
说明 |
| Default-Deny |
命名空间默认拒绝所有 Ingress/Egress |
| DNS 放行 |
允许所有 Pod 访问 kube-dns |
| 监控放行 |
允许 Prometheus 采集 metrics |
| 日志放行 |
允许 Fluentd/Filebeat 采集日志 |
| Ingress 放行 |
允许 Ingress Controller 到后端服务 |
| 跨 NS 通信 |
按需放行跨命名空间服务调用 |
| 外部服务放行 |
允许访问特定外部 API/域名 |
应急处置:网络策略故障
| 场景 |
症状 |
处置 |
| 应用大面积不可达 |
多个服务健康检查失败 |
临时删除最近变更的 NetworkPolicy |
| DNS 解析失败 |
服务发现不可用 |
检查 DNS egress 策略是否被误删 |
| 部分服务通信中断 |
个别服务间调用超时 |
kubectl describe netpol 定位问题策略 |
| 新部署服务不可用 |
上线后服务无响应 |
检查是否缺少对应 Allow 策略 |
紧急回退命令
# 查看命名空间所有策略
kubectl get networkpolicy -n <namespace>
# 删除特定策略
kubectl delete networkpolicy <policy-name> -n <namespace>
# 临时删除命名空间所有策略(紧急情况)
kubectl delete networkpolicy --all -n <namespace>
# 查看策略详情
kubectl describe networkpolicy <policy-name> -n <namespace>
# 使用 Cilium 查看策略效果
cilium monitor --type drop
# 使用 Calico 诊断
calicoctl get networkpolicy -A
CI/CD 集成检查
# CI 流水线 NetworkPolicy 检查
steps:
- name: 检查 NetworkPolicy 是否存在
run: |
NS=$(yq '.metadata.namespace' k8s/*.yaml)
if ! kubectl get networkpolicy -n $NS -o name | grep -q .; then
echo "ERROR: 命名空间 $NS 缺少 NetworkPolicy"
exit 1
fi
- name: 检查是否存在 any-to-any 策略
run: |
for f in k8s/netpol/*.yaml; do
if yq '.spec.podSelector == {}' $f | grep -q true; then
if yq '.spec.ingress[0].from == [{}]' $f 2>/dev/null; then
echo "WARN: $f 存在 any-to-any 规则"
fi
fi
done
- name: 部署前验证
run: |
kubectl apply --dry-run=client -f k8s/netpol/