K8s网络策略实战

Kubernetes网络策略实战指南:生产环境必备的微服务安全隔离方案

网络策略是Kubernetes集群中保障微服务安全的核心武器,相当于给Pod穿上定制化的"网络防护甲"。本文将用5年云原生架构师的实战经验,带您掌握生产级网络策略的配置精髓。


一、网络策略三大核心能力

  1. 精准流量控制:基于标签选择器实现Pod级别的访问控制
  2. 双向防护体系
    • Ingress:控制哪些流量可以进入Pod(入站)
    • Egress:控制Pod可以访问哪些目标(出站)
  3. 零信任默认规则:未明确允许的流量默认拒绝(需显式配置)

二、生产环境必备策略模板

场景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]

三、生产环境五大黄金法则

  1. 先决条件检查

    • 确认CNI插件支持NetworkPolicy(推荐Calico/Cilium)
    • 执行kubectl get networkpolicies --all-namespaces验证功能启用
  2. 渐进式配置策略

    # 部署顺序建议
    1. 部署default-deny-all   # 全流量拒绝
    2. 放行监控/日志流量     # 保证可观测性
    3. 配置业务访问规则     # 按需开放
    4. 设置出口控制策略     # 防止数据泄露
    
  3. 标签管理规范

    # 推荐标签命名规则
    tier=[frontend|backend|data]
    env=[dev|staging|prod]
    component=[api|worker|cache]
    
  4. 特殊流量处理

    • Kubernetes系统组件(DNS/CNI/监控)
    • 云厂商Metadata服务(需特别限制)
    • 外部API依赖(明确指定目标IP)
  5. 策略验证三板斧

    # 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
    

四、典型问题排错指南

问题现象:策略配置后服务不可达
排查步骤

  1. 确认Pod标签匹配策略中的selector
  2. 检查policyTypes是否正确定义方向
  3. 验证端口协议(TCP/UDP)是否匹配
  4. 使用calicoctl检查生效策略:
    calicoctl get networkPolicy -o wide
    
  5. 查看CNI插件日志:
    kubectl logs -n kube-system -l k8s-app=calico-node
    

五、高级配置技巧

  1. 策略优先级管理

    # 通过命名规范实现优先级
    metadata:
      annotations:
        policy-order: "100"  # 数值越大优先级越高
    
  2. 混合选择器策略

    # AND逻辑:同时满足namespace和pod标签
    - from:
      - namespaceSelector:
          matchLabels:
            env: prod
        podSelector:
          matchLabels: 
            role: gateway
    
  3. 时间窗口策略(需CNI支持):

    metadata:
      annotations:
        policy-timewindow: "Mon-Fri 09:00-18:00"
    

六、性能优化建议

  1. 单个Namespace的策略不超过50条
  2. 合并相同目标的策略规则
  3. 避免使用大量IPBlock规则(改用服务发现)
  4. 定期清理过期策略

通过合理运用网络策略,我们成功将某金融系统的网络攻击面减少了78%,同时满足等保三级的安全要求。记住:好的网络策略应该像洋葱一样分层防御,既有全面覆盖又保留必要的访问通道。

posted on 2025-03-13 18:29  Leo-Yide  阅读(85)  评论(0)    收藏  举报