Kubernetes网络策略与Calico eBPF数据平面:零信任网络分段实战

Kubernetes默认网络的零信任缺口

Kubernetes集群默认网络模型是全通的——任何Pod可以和任何其他Pod通信,这在多租户环境或生产集群中是不可接受的安全状态。NetworkPolicy是Kubernetes原生的网络分段机制,但默认iptables数据平面的性能瓶颈和规则复杂度限制了其在大规模集群中的应用。Calico的eBPF数据平面提供了更高性能的替代方案,将网络策略执行从内核netfilter移到eBPF程序,策略匹配延迟从微秒级降低到纳秒级。

NetworkPolicy零信任基准策略设计

零信任网络的第一步是默认拒绝所有流量,再按需放行。下面的策略实现集群级别的默认拒绝:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-all
  namespace: production
spec:
  podSelector: {}  # 匹配命名空间内所有Pod
  policyTypes:
  - Ingress
  - Egress

此策略不定义任何ingress/egress规则,效果是拒绝所有入站和出站流量。在此基准上逐条添加放行规则:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-api-to-db
  namespace: production
spec:
  podSelector:
    matchLabels:
      app: postgres
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: api-server
    ports:
    - port: 5432
      protocol: TCP

每个放行规则必须明确指定源Pod标签和目标端口,不做宽泛的CIDR放行。

Calico eBPF数据平面部署与切换

Calico从v3.21开始支持eBPF数据平面,v3.25后进入稳定状态。eBPF模式相比iptables模式在连接跟踪、NAT和策略执行上都有显著性能提升。

切换到eBPF数据平面:

# 在Calico Operator配置中启用eBPF
apiVersion: operator.tigera.io/v1
kind: Installation
metadata:
  name: default
spec:
  calicoNetwork:
    datapathOptions:
      vxlan: Enabled
    linuxDataplane: BPF
    bpfLogLevel: ""
  registry: quay.io/

切换前需确认内核版本>=5.3,且启用了BTF(BPF Type Format)支持:

# 检查BTF支持
ls /sys/kernel/btf/vmlinux

# 检查内核版本
uname -r

Calico GlobalNetworkPolicy实现L7网络分段

标准NetworkPolicy仅支持L3/L4层规则。Calico的GlobalNetworkPolicy扩展到L7层,可以在策略中直接限制HTTP方法、路径和域名。这对零信任分段至关重要——仅允许访问数据库的3306端口不够,还要限制API只能执行SELECT而不能执行DROP。

apiVersion: projectcalico.org/v3
kind: GlobalNetworkPolicy
metadata:
  name: restrict-api-egress
spec:
  selector: app == "api-server"
  egress:
  - action: Allow
    protocol: TCP
    destination:
      selector: app == "postgres"
      ports: [5432]
  - action: Pass
    protocol: TCP
    destination:
      selector: app == "redis"
      ports: [6379]
    http:
      methods: ["GET", "POST"]
      paths:
        exact: ["/api/v1/data", "/api/v1/query"]

Pass动作允许流量跳过当前策略继续匹配下一条,实现策略链的灵活组合。

eBPF网络策略的性能观测与故障排查

eBPF数据平面的一大优势是自带可观测性。Calico在eBPF程序中内置了连接跟踪和策略计数器,无需额外部署Flow Collector即可查看策略匹配情况:

# 查看eBPF连接跟踪表
calico-node -c "calico-bpf conntrack dump"

# 查看策略计数器
calico-node -c "calico-bpf policy count"

# 实时监控被拒绝的连接
calico-node -c "calico-bpf logs --reject"

被拒绝的连接在日志中以SRC->DST:PORT格式呈现,直接定位是哪条策略阻断了流量。如果发现合法流量被误拒,检查策略的选择器匹配范围是否过宽,以及策略的优先级顺序——Calico按策略创建顺序匹配,先匹配到的规则优先生效。

多集群零信任网络分段的最佳实践

多集群场景下,集群间流量默认不受NetworkPolicy约束(跨集群走外部负载均衡器或隧道)。需要在集群边界部署Submariner等跨集群网络方案,配合Calico的GlobalNetworkPolicy实现跨集群网络分段。关键原则:集群间流量必须经过mTLS认证;跨集群访问必须在两端集群都有对应的NetworkPolicy放行;出口集群的egress策略和入口集群的ingress策略必须对齐,否则会出现单向可达的异常状态。

原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/kubernetes-wang-luo-ce-lyue-yu-calicoebpf-shu-ju-ping-mian/

(0)
小编小编
上一篇 7小时前
下一篇 7小时前

相关推荐