🔥「炎码工坊」技术弹药已装填!
点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】

 

一、基础概念

什么是网络策略?
Kubernetes 网络策略(Network Policy)是一种声明式资源对象,用于控制 Pod 之间及 Pod 与外部网络实体之间的流量。它通过标签选择器(Label Selector)定义规则,实现对流量的精细控制,类似于“应用级防火墙”。

核心作用:

  1. 流量隔离:限制 Pod 间的通信,防止横向渗透攻击。
  2. 安全加固:遵循最小权限原则,仅允许必要的流量通过。
  3. 合规性管理:满足行业标准(如 PCI-DSS)对网络分段的要求。

关键术语:

  • Ingress(入口规则):控制外部流量如何进入 Pod。
  • Egress(出口规则):控制 Pod 如何访问外部服务。
  • 标签选择器(Label Selector):通过标签匹配目标 Pod 或命名空间。

二、技术实现

1. 网络策略的组成
网络策略通过 YAML 文件定义,包含以下核心字段:

  • podSelector:指定策略作用的目标 Pod(通过标签匹配)。
  • policyTypes:定义策略类型(IngressEgress 或两者)。
  • ingress/egress:定义允许的流量来源(IP 段、命名空间、Pod 标签)及端口。

示例:允许特定命名空间的流量

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-from-same-namespace
spec:
  podSelector: {}  # 匹配命名空间内所有 Pod
  policyTypes:
    - Ingress
  ingress:
    - from:
        - namespaceSelector:  # 允许来自同命名空间的流量
            matchLabels:
              name: default

2. 支持网络策略的插件
Kubernetes 本身不直接实现网络策略,需依赖第三方网络插件,例如:

  • Calico:支持复杂策略,适用于大规模集群。
  • Cilium:基于 eBPF,性能优异。
  • Weave Net:简单易用,适合中小型集群。

前置条件:

  • 集群必须使用支持网络策略的网络插件。
  • 策略仅作用于同一命名空间内的 Pod(跨命名空间需结合 namespaceSelector)。

三、常见风险

  1. 默认流量放行导致的漏洞
    •  问题:默认情况下,所有 Pod 可以自由通信。
    • 风险:攻击者可横向渗透整个集群。
  2. 配置错误导致服务中断
    • 问题:误配置策略规则,导致关键服务无法访问。
    • 示例:错误地拒绝了数据库 Pod 的入站流量。
  3. 过度宽松的策略
    • 问题:策略范围过大(如允许整个 IP 段),增加攻击面。
  4.  未覆盖的出口流量
    • 问题:未限制 Pod 访问外部服务(如公网),可能导致数据泄露。

四、解决方案

  1. 默认拒绝策略
    •  目标:禁止所有流量,仅允许明确指定的流量。
    • 示例: 
      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: deny-all-ingress
      spec:
        podSelector: {}
        policyTypes:
          - Ingress
  2. 按标签精确控制流量
    • 场景:仅允许前端 Pod 访问后端 Pod 的 80 端口。 
    •  示例: 
    • ingress:
        - from:
            - podSelector:
                matchLabels:
                  role: frontend
          ports:
            - protocol: TCP
              port: 80
  3. 结合命名空间隔离敏感服务
    • 场景:支付服务所在的命名空间仅允许特定服务访问。 
    •  示例: 
      ingress:
        - from:
            - namespaceSelector:
                matchLabels:
                  project: finance
  4. 限制出口流量到特定 IP 段
    • 场景:限制数据库 Pod 仅能访问指定的数据库 IP。 
    • 示例: 
      egress:
        - to:
            - ipBlock:
                cidr: 192.168.1.0/24

五、工具示例

  1. Calico 网络策略配置
    Calico 支持高级策略(如全局网络策略),示例: 
    apiVersion: projectcalico.org/v3
    kind: NetworkPolicy
    metadata:
      name: calico-policy
      namespace: default
    spec:
      selector: role == 'db'
      types:
        - Ingress
      ingress:
        - action: Allow
          source:
            selector: role == 'app'
  2. Azure 网络策略管理器(NPM)
    Azure 提供内置策略管理,支持 Prometheus 监控指标,可通过 Azure 门户可视化流量。

六、最佳实践

  1. 遵循最小权限原则
    • 仅允许必要的流量,避免宽泛规则(如 0.0.0.0/0)。
  2.  分阶段实施策略
    •  先测试策略(如通过 kubectl apply -f policy.yaml --dry-run=client),再逐步部署。
  3.  结合命名空间隔离
    • 将敏感服务(如数据库)部署到独立命名空间,并限制跨命名空间访问。
  4. 定期审计策略
    • 使用工具(如 kubectl get networkpolicies)检查策略覆盖率。
  5. 监控异常流量
    •  集成 Prometheus 和 Grafana,监控策略匹配的流量日志。

可视化流程图


 

 

专有名词说明表

英文术语中文解释
NetworkPolicy网络策略:Kubernetes 中用于控制 Pod 流量的资源对象。
Ingress入口规则:控制外部流量如何进入 Pod。
Egress出口规则:控制 Pod 如何访问外部服务。
podSelectorPod 选择器:通过标签匹配目标 Pod。
namespaceSelector命名空间选择器:通过标签匹配目标命名空间。
IPBlockIP 段:定义允许或拒绝的 CIDR 网络范围。
Calico支持网络策略的开源网络插件,提供高性能流量控制。
Cilium基于 eBPF 的网络插件,支持高级安全策略。
Prometheus开源监控工具,用于收集网络策略的流量指标。

总结

Kubernetes 网络策略是保障云原生安全的核心工具。通过合理配置策略,可以有效隔离流量、防止攻击扩散,并满足合规要求。初学者应从默认拒绝策略开始,逐步细化规则,并结合监控工具持续优化策略。

 

🚧 您已阅读完全文99%!缺少1%的关键操作:
加入「炎码燃料仓」🚀 获得:
√ 开源工具红黑榜
√ 项目落地避坑指南
√ 每周BUG修复进度+1%彩蛋
(温馨提示:本工坊不打灰工,只烧脑洞🔥) 

 

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐