K8s网络策略实战
Kubernetes网络策略实战指南:生产环境必备的微服务安全隔离方案
网络策略是Kubernetes集群中保障微服务安全的核心武器,相当于给Pod穿上定制化的"网络防护甲"。本文将用5年云原生架构师的实战经验,带您掌握生产级网络策略的配置精髓。
一、网络策略三大核心能力
- 精准流量控制:基于标签选择器实现Pod级别的访问控制
- 双向防护体系:
- Ingress:控制哪些流量可以进入Pod(入站)
- Egress:控制Pod可以访问哪些目标(出站)
- 零信任默认规则:未明确允许的流量默认拒绝(需显式配置)
二、生产环境必备策略模板
场景1:数据库访问白名单
# db-access-control.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-firewall
namespace: production
spec:
podSelector:
matchLabels:
app: mysql
policyTypes: [Ingress]
ingress:
- from:
- podSelector: # 只允许前端服务访问
matchLabels:
tier: frontend
- namespaceSelector: # 允许监控命名空间
matchLabels:
env: monitoring
ports:
- protocol: TCP
port: 3306
场景2:出口流量管控
# egress-control.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-external
spec:
podSelector:
matchLabels:
sensitive: "true"
policyTypes: [Egress]
egress:
- to:
- ipBlock: # 只允许访问内部CIDR
cidr: 10.20.0.0/16
- ports: # 开放DNS端口
- protocol: UDP
port: 53
场景3:全流量封锁策略
# default-deny.yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {} # 选择所有Pod
policyTypes: [Ingress, Egress]
三、生产环境五大黄金法则
-
先决条件检查:
- 确认CNI插件支持NetworkPolicy(推荐Calico/Cilium)
- 执行
kubectl get networkpolicies --all-namespaces验证功能启用
-
渐进式配置策略:
# 部署顺序建议 1. 部署default-deny-all # 全流量拒绝 2. 放行监控/日志流量 # 保证可观测性 3. 配置业务访问规则 # 按需开放 4. 设置出口控制策略 # 防止数据泄露 -
标签管理规范:
# 推荐标签命名规则 tier=[frontend|backend|data] env=[dev|staging|prod] component=[api|worker|cache] -
特殊流量处理:
- Kubernetes系统组件(DNS/CNI/监控)
- 云厂商Metadata服务(需特别限制)
- 外部API依赖(明确指定目标IP)
-
策略验证三板斧:
# 1. 跨命名空间测试 kubectl exec -n dev frontend-pod -- curl -m 3 backend.prod.svc # 2. 流量嗅探工具 kubectl sniff <pod> -n <namespace> -p -o ./capture.pcap # 3. 策略审计命令 kubectl describe networkpolicies --all-namespaces
四、典型问题排错指南
问题现象:策略配置后服务不可达
排查步骤:
- 确认Pod标签匹配策略中的selector
- 检查policyTypes是否正确定义方向
- 验证端口协议(TCP/UDP)是否匹配
- 使用
calicoctl检查生效策略:calicoctl get networkPolicy -o wide - 查看CNI插件日志:
kubectl logs -n kube-system -l k8s-app=calico-node
五、高级配置技巧
-
策略优先级管理:
# 通过命名规范实现优先级 metadata: annotations: policy-order: "100" # 数值越大优先级越高 -
混合选择器策略:
# AND逻辑:同时满足namespace和pod标签 - from: - namespaceSelector: matchLabels: env: prod podSelector: matchLabels: role: gateway -
时间窗口策略(需CNI支持):
metadata: annotations: policy-timewindow: "Mon-Fri 09:00-18:00"
六、性能优化建议
- 单个Namespace的策略不超过50条
- 合并相同目标的策略规则
- 避免使用大量IPBlock规则(改用服务发现)
- 定期清理过期策略
通过合理运用网络策略,我们成功将某金融系统的网络攻击面减少了78%,同时满足等保三级的安全要求。记住:好的网络策略应该像洋葱一样分层防御,既有全面覆盖又保留必要的访问通道。
浙公网安备 33010602011771号