3. 环境搭建与部署:使用 Kind 或 K3s 快速搭建 Cilium 实验环境
在开始 Cilium 网络策略与 Serverless 性能调优之前,一个稳定、可复现的实验环境是基础。本章将指导你使用 Kind(Kubernetes in Docker)和 K3s(轻量级 Kubernetes)两种方式快速搭建 Cilium 环境,并验证安装状态。Kind 适合本地开发与 CI/CD 场景,K3s 则更贴近边缘或资源受限环境。
3.1 环境准备与工具链
无论选择哪种方式,都需要提前安装以下核心工具:
| 工具 | 版本要求 | 用途 |
|---|---|---|
| Docker | ≥ 20.10 | 容器运行时,Kind 依赖 Docker 运行集群节点 |
| kubectl | ≥ 1.26 | 与 Kubernetes API 交互 |
| helm | ≥ 3.10 | 部署 Cilium 及其依赖 |
| cilium-cli | ≥ 0.15 | 安装、管理和诊断 Cilium |
版本对齐建议: 本课程所有示例基于 Cilium 1.14+ 和 Kubernetes 1.27+。使用
cilium version 和 kubectl version 确认版本兼容性。
3.2 方式一:使用 Kind 搭建 Cilium 集群
Kind 将 Kubernetes 节点运行在 Docker 容器中,非常适合快速启动和销毁实验环境。以下步骤将创建一个 3 节点集群并部署 Cilium。
3.2.1 创建 Kind 集群配置文件
创建一个 kind-config.yaml,显式禁用默认的 CNI(如 flannel),为 Cilium 预留网络控制权:
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
networking:
disableDefaultCNI: true
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
3.2.2 启动集群并安装 Cilium
# 创建集群
kind create cluster --config kind-config.yaml --name cilium-lab
# 使用 cilium-cli 安装 Cilium
cilium install --version 1.14.5 \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=strict \
--set routingMode=native \
--set autoDirectNodeRoutes=true
关键参数说明:
kubeProxyReplacement=strict:完全替换 kube-proxy,发挥 eBPF 最大性能。routingMode=native:使用原生路由模式,避免隧道封装开销。autoDirectNodeRoutes=true:自动配置节点间直连路由。
3.3 方式二:使用 K3s 搭建 Cilium 集群
K3s 是 Rancher 出品的轻量级 Kubernetes,默认使用 flannel 和 SQLite。我们需要替换 CNI 为 Cilium。
3.3.1 安装 K3s 并禁用默认 CNI
curl -sfL https://get.k3s.io | \
INSTALL_K3S_EXEC="--flannel-backend=none --disable-network-policy" \
sh -s - --write-kubeconfig-mode 644
# 等待 K3s 就绪
kubectl wait --for=condition=Ready node --all --timeout=120s
3.3.2 部署 Cilium 到 K3s
# 使用 helm 安装 Cilium,指定 K3s 的 kubeconfig 路径
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
helm repo add cilium https://helm.cilium.io/
helm repo update
helm install cilium cilium/cilium --version 1.14.5 \
--namespace kube-system \
--set ipam.mode=kubernetes \
--set kubeProxyReplacement=disabled \
--set routingMode=native \
--set autoDirectNodeRoutes=true \
--set bpf.masquerade=true
K3s 注意事项: K3s 默认自带 kube-proxy,因此设置
kubeProxyReplacement=disabled 避免冲突。若需完全替换,需额外配置 K3s 的 --disable-kube-proxy 参数。
3.4 验证 Cilium 安装状态
安装完成后,通过以下命令验证 Cilium 是否正常运行:
3.4.1 检查 Pod 状态
kubectl -n kube-system get pods -l k8s-app=cilium
预期输出显示所有 Cilium agent Pod 处于 Running 状态,且 Ready 列为 1/1。
3.4.2 使用 cilium status 诊断
cilium status --wait
该命令会输出集群健康概览,包括 KVStore、容器运行时、CNI 配置等关键组件状态。
3.4.3 验证 eBPF 与网络连通性
# 运行内置连接测试
cilium connectivity test
# 查看 Cilium 端点列表
kubectl exec -n kube-system ds/cilium -- cilium endpoint list
快速健康检查: 若
cilium status 显示 Health: OK 且 connectivity test 全部通过,则环境搭建成功。
3.5 环境架构总览
下图展示了 Kind 和 K3s 两种方式下 Cilium 的核心组件与数据流关系:
3.6 环境对比与选型建议
| 维度 | Kind | K3s |
|---|---|---|
| 启动速度 | 快(约 2-3 分钟) | 极快(约 1 分钟) |
| 资源占用 | 中等(每个节点一个容器) | 低(单二进制文件) |
| kube-proxy 替换 | 支持完全替换(strict 模式) | 需额外配置或保持 disabled |
| 适用场景 | 本地开发、CI/CD、多节点测试 | 边缘计算、资源受限环境、快速原型 |
| 持久化存储 | 容器重启后丢失 | 支持嵌入式 SQLite 持久化 |
选型建议: 本课程后续章节的网络策略实验推荐使用 Kind,因其对 kube-proxy 替换的支持更完整,能充分展示 Cilium 的 eBPF 能力。Serverless 性能调优实验则推荐 K3s,更贴近生产环境的资源约束。
3.7 常见问题与排错
- Cilium Pod 一直处于 Pending 状态:检查节点是否满足
kernel >= 4.19且启用了CONFIG_BPF相关内核选项。使用cilium sysdump收集诊断信息。 - connectivity test 失败:确认
disableDefaultCNI: true已生效,且没有其他 CNI 冲突。检查cilium status中的K8s datapath状态。 - K3s 中 Cilium 无法启动:确保 K3s 的
--flannel-backend=none参数正确传递,且/var/lib/rancher/k3s/server/manifests/下没有残留的 flannel 配置。
快速重置环境: Kind 使用
kind delete cluster --name cilium-lab;K3s 使用 /usr/local/bin/k3s-uninstall.sh 即可完全清理。