1. 引言
Kubernetes(K8s)已经成为容器编排的标准,而高效的网络管理是确保其性能、可扩展性和安全性的关键。Cilium 是一个基于 eBPF(Extended Berkeley Packet Filter)的容器网络接口(CNI),提供高效、可扩展的网络策略、负载均衡和可观测性功能。
本文将介绍 eBPF 在 Kubernetes 网络中的作用,以及如何使用 Cilium 来优化 Kubernetes 网络。
2. eBPF 在 Kubernetes 网络中的角色
eBPF 允许开发者在 Linux 内核中安全地运行程序,无需修改内核代码。它的特点使其成为 Kubernetes 网络管理的理想选择:
-
高效的包处理:在内核空间直接处理网络数据包,减少用户态/内核态切换的开销。
-
增强的安全性:实现 L3/L4/L7 级别的网络策略,防止恶意流量。
-
服务可观测性:使用 eBPF 进行流量跟踪、延迟分析和应用级可视化。
-
可扩展的负载均衡:使用 eBPF 取代传统的 kube-proxy,提高负载均衡性能。
3. Cilium 介绍
Cilium 是一个专门基于 eBPF 构建的 Kubernetes CNI,它提供:
-
无代理的 kube-proxy 替代方案
-
基于身份的网络策略(Identity-Aware Security)
-
内置负载均衡和服务发现
-
丰富的可观测性,如 Hubble
4. 在 Kubernetes 中部署 Cilium
4.1 环境准备
确保 Kubernetes 集群已经运行,并安装了 kubectl
和 helm
:
kubectl version --client
helm version
4.2 安装 Cilium
使用 Helm 安装 Cilium:
helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium --namespace kube-system \
--set kubeProxyReplacement=strict \
--set hubble.enabled=true \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
验证 Cilium 运行状态:
kubectl get pods -n kube-system -l k8s-app=cilium
4.3 启用 Hubble 进行网络监控
Hubble 是 Cilium 提供的可观测性平台,可实时分析网络流量。
安装 Hubble CLI:
curl -L --remote-name-all https://github.com/cilium/hubble/releases/latest/download/hubble-linux-amd64.tar.gz
sudo tar -xvf hubble-linux-amd64.tar.gz -C /usr/local/bin/
启用 Hubble UI 访问:
kubectl port-forward -n kube-system svc/hubble-ui 12000:80
在浏览器访问 http://localhost:12000
,查看 Kubernetes 网络流量。
5. 使用 Cilium 实现安全策略
Cilium 允许基于身份和应用层(L7)的网络策略,例如,只允许 frontend
访问 backend
服务。
创建 cilium-network-policy.yaml
文件:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: allow-frontend-backend
namespace: default
spec:
endpointSelector:
matchLabels:
app: backend
ingress:
- fromEndpoints:
- matchLabels:
app: frontend
应用策略:
kubectl apply -f cilium-network-policy.yaml
6. Cilium 负载均衡替代 kube-proxy
默认情况下,Kubernetes 使用 kube-proxy
进行服务负载均衡,但 Cilium 通过 eBPF 直接在内核级别处理流量,提高性能。
检查 kube-proxy 是否被替换:
kubectl get ds -n kube-system
如果 Cilium 已完全替代 kube-proxy,应该不会看到 kube-proxy
运行的 DaemonSet。
7. 结论
Cilium 通过 eBPF 提供了高效的 Kubernetes 网络管理方案,包括网络安全、负载均衡和可观测性。相比传统 iptables,它减少了 CPU 开销,提高了可扩展性,使 Kubernetes 网络更强大。
未来,随着 eBPF 生态的进一步发展,Cilium 可能会成为 Kubernetes 网络管理的标准解决方案。