eBPF + Cilium 2026 生产实战:零侵入可观测性与内核级安全
2026 年,eBPF 已从实验性技术成为云原生基础设施的核心组件。Cilium 成为使用最广泛的 Kubernetes CNI,Hubble 提供无需修改应用代码的网络流量全景视图,Tetragon 实现基于 eBPF 的运行时安全策略。本文从生产角度讲解:Cilium 安装与替换 kube-proxy、Hubble 网络可观测性配置与使用、Tetragon 安全策略实战(进程/文件/网络三层检测),以及 eBPF 在 2026 年的最新进展。
eBPF(Extended Berkeley Packet Filter)允许在 Linux 内核中安全地运行沙箱程序,无需修改内核代码,也不需要加载内核模块。
2026 年,这项技术已经不再需要介绍“它是什么”——Google、Microsoft、AWS 的生产 Kubernetes 集群都在用基于 eBPF 的 CNI,Cilium 成为整个 CNCF 生态中部署规模最大的 CNI 实现之一。
本文关注怎么用,从安装到生产可观测性再到安全策略,给出可直接操作的配置。
2026 年的 eBPF 生态
三个核心场景已经成熟:
1. 网络(Cilium CNI)
替换 kube-proxy,直接在内核处理 Service 转发
性能比 iptables 高出 50%+
支持 L3/L4/L7 网络策略
2. 可观测性(Hubble)
零侵入:不改一行应用代码
自动采集所有 HTTP/gRPC/DNS 流量
服务依赖拓扑图、实时流量分析
3. 安全(Tetragon)
内核级进程执行监控
文件访问审计
网络连接实时阻断
推荐内核版本:Linux 6.1+(部分高级功能需要 6.6+)
安装 Cilium(替换 kube-proxy)
前置检查
# 检查内核版本(需要 >= 5.10,推荐 6.1+)
uname -r
# 检查 eBPF 相关内核配置
grep -E "CONFIG_BPF|CONFIG_CGROUP_BPF" /boot/config-$(uname -r)
# 应该看到 CONFIG_BPF=y, CONFIG_BPF_SYSCALL=y 等
# 安装 cilium CLI
curl -L --remote-name-all \
https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
tar xzvf cilium-linux-amd64.tar.gz
mv cilium /usr/local/bin/
使用 Helm 安装 Cilium(替换 kube-proxy)
# 添加 Helm repo
helm repo add cilium https://helm.cilium.io/
helm repo update
# 安装 Cilium,同时禁用 kube-proxy
# 适用于用 kubeadm 搭建的集群
helm install cilium cilium/cilium \
--version 1.16.x \
--namespace kube-system \
--set kubeProxyReplacement=true \
--set k8sServiceHost=<控制平面IP> \
--set k8sServicePort=6443 \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
# 验证安装状态
cilium status --wait
# 连接性测试
cilium connectivity test
验证 kube-proxy 已被替换
# Cilium 接管 Service 转发后,iptables 规则会大幅减少
iptables -t nat -L KUBE-SERVICES 2>/dev/null | wc -l
# 替换后应该只有很少几条,而不是原来的几百条
# 确认 Cilium 在处理 Service
kubectl -n kube-system exec ds/cilium -- \
cilium-dbg service list
Hubble:网络可观测性
安装 Hubble CLI
# 安装 Hubble CLI
curl -L --remote-name-all \
https://github.com/cilium/hubble/releases/latest/download/hubble-linux-amd64.tar.gz
tar xzvf hubble-linux-amd64.tar.gz
mv hubble /usr/local/bin/
# 端口转发到 Hubble Relay
kubectl port-forward -n kube-system svc/hubble-relay 4245:80 &
# 查看实时流量
hubble observe --follow
实时流量分析
# 查看特定命名空间的所有流量
hubble observe --namespace production --follow
# 只看 HTTP 流量(L7)
hubble observe --protocol http --follow
# 过滤特定服务的出入流量
hubble observe \
--from-label app=frontend \
--to-label app=api \
--follow
# 查看被 NetworkPolicy 拒绝的流量(排查网络策略问题)
hubble observe \
--verdict DROPPED \
--namespace production \
--follow
# 输出示例:
# Feb 1 10:23:14.123 production/frontend:54321 -> production/api:8080
# HTTP/1.1 GET /api/users (verdict: FORWARDED)
# Feb 1 10:23:14.456 production/frontend:54322 -> production/db:5432
# TCP (verdict: DROPPED, reason: NetworkPolicy)
使用 Hubble UI 查看服务拓扑
# 如果 Hubble UI 没有 NodePort,做端口转发
kubectl port-forward -n kube-system svc/hubble-ui 12000:80 &
# 浏览器访问 http://localhost:12000
# 可以看到:
# - 服务间调用关系图(自动生成,无需配置)
# - 实时流量数量
# - 每条连接的协议(HTTP/gRPC/DNS/TCP)
# - 被 Policy 拒绝的连接(红色显示)
L7 可观测性(HTTP/gRPC/DNS 详情)
# 需要在 Cilium 上启用 L7 代理
# 创建 CiliumNetworkPolicy 开启 L7 可见性
apiVersion: cilium.io/v2
kind: CiliumNetworkPolicy
metadata:
name: enable-l7-visibility
namespace: production
spec:
endpointSelector:
matchLabels:
app: frontend
egress:
- toPorts:
- ports:
- port: "8080"
protocol: TCP
rules:
http: # 开启 HTTP L7 解析
- {} # 允许所有 HTTP 请求(同时记录详情)
# 开启 L7 后,hubble observe 能看到 HTTP 详情
hubble observe --namespace production --protocol http
# 示例输出:
# frontend → api GET /api/users HTTP/1.1 200 OK (23ms)
# frontend → api POST /api/orders HTTP/1.1 201 Created (45ms)
# frontend → api GET /api/item/999 HTTP/1.1 404 Not Found (5ms)
Tetragon:运行时安全
Tetragon 是 Cilium 项目的安全组件,基于 eBPF 实现内核级的进程、文件、网络监控,并支持实时阻断(不只是检测)。
安装 Tetragon
helm repo add cilium https://helm.cilium.io/
helm install tetragon cilium/tetragon \
--namespace kube-system \
--set tetragon.enableMsgHandlingLatency=true
# 验证安装
kubectl -n kube-system get pods -l app.kubernetes.io/name=tetragon
监控敏感进程执行
# TracingPolicy:监控容器内的敏感命令执行
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-sensitive-exec
spec:
kprobes:
- call: "sys_execve"
syscall: true
args:
- index: 0
type: "string" # 记录执行的命令
selectors:
- matchBinaries:
- operator: In
values:
- "/bin/sh"
- "/bin/bash"
- "/usr/bin/python3"
- "/usr/bin/curl"
- "/usr/bin/wget"
matchNamespaces:
- operator: NotIn
values:
- "kube-system" # 排除系统命名空间
matchCapabilities:
- operator: In
isNamespaceCapability: false
values:
- "CAP_SYS_ADMIN" # 特别关注有 CAP_SYS_ADMIN 的容器
文件访问审计
# 监控对敏感文件的访问
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: detect-sensitive-file-access
spec:
kprobes:
- call: "security_file_open"
syscall: false
args:
- index: 0
type: "file"
selectors:
- matchArgs:
- index: 0
operator: Prefix
values:
- "/etc/passwd"
- "/etc/shadow"
- "/etc/kubernetes/pki"
- "/var/run/secrets/kubernetes.io"
matchActions:
- action: Sigkill # 检测到立即终止进程(阻断而不是只记录)
查看 Tetragon 事件
# 安装 tetra CLI
curl -L https://github.com/cilium/tetragon/releases/latest/download/tetra-linux-amd64.tar.gz \
| tar xz && mv tetra /usr/local/bin/
# 实时查看所有安全事件
kubectl exec -n kube-system ds/tetragon -- \
tetragon getevents -o compact
# 只看进程执行事件
kubectl exec -n kube-system ds/tetragon -- \
tetragon getevents -o compact --event-types PROCESS_EXEC
# 事件示例输出:
# 🚀 process production/api-pod /bin/sh -c "id"
# 💥 exit production/api-pod /bin/sh 0
# 🔑 open production/api-pod /etc/passwd
与 Prometheus + Grafana 集成
# Hubble 自带 Prometheus metrics(端口 9965)
# 在 ServiceMonitor 中配置采集
kubectl apply -f - <<EOF
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: hubble
namespace: kube-system
spec:
selector:
matchLabels:
app.kubernetes.io/name: hubble
endpoints:
- port: prometheus
interval: 30s
EOF
核心 Hubble 指标:
hubble_flows_processed_total # 处理的流量总数(按 verdict 分)
hubble_drop_total # 被丢弃的流量(按原因分)
hubble_tcp_flags_total # TCP 连接建立/关闭统计
hubble_dns_queries_total # DNS 查询次数
hubble_http_requests_total # HTTP 请求次数(L7 开启后)
hubble_http_request_duration_seconds # HTTP 延迟分布(P50/P95/P99)
告警建议:
hubble_drop_total 持续增长 → 可能有网络策略配置错误
hubble_http_request_duration_seconds P99 > 1s → 服务延迟告警
小结
eBPF 的价值在于它的非侵入性——不改应用代码,内核层面就能看到所有流量、所有进程、所有文件访问。Hubble 把这些数据变成运维人员能直接用的网络拓扑图和流量分析工具;Tetragon 把检测能力升级为可以实时阻断的安全策略。
2026 年,如果你在重新规划 Kubernetes 集群的 CNI,Cilium 是值得优先考虑的选项——它不只是一个网络插件,而是一套集网络、可观测性、安全于一体的平台。
