3. 环境搭建:使用 Kind 或 K3s 搭建 Kubernetes 集群、安装 Cilium 并验证组件状态
本章是课程的基础环境准备环节。我们将使用 Kind(Kubernetes in Docker)快速搭建一个多节点 Kubernetes 集群,然后通过 Helm 安装 Cilium 作为 CNI 插件,最后验证 Cilium 的核心组件是否正常运行。这套环境将支撑后续所有蓝绿发布实验与流量监控演示。
3.1 环境选型对比:Kind vs K3s
在本地开发与测试场景中,Kind 和 K3s 都是轻量级集群方案,但侧重点不同。下表从关键维度进行对比:
| 维度 | Kind | K3s |
|---|---|---|
| 底层依赖 | Docker 容器模拟节点 | 原生进程 + containerd |
| 多节点支持 | 原生支持,通过容器映射 | 需额外配置 agent 加入 |
| Cilium 兼容性 | 完全兼容,eBPF 无限制 | 需启用 bpf 挂载与内核模块 |
| 资源占用 | 中等(每个节点一个容器) | 较低(单进程架构) |
| 适用场景 | CI/CD、eBPF 功能验证 | 边缘、资源受限环境 |
推荐选择:本课程选用 Kind,因为它对 Cilium 的 eBPF 数据面支持最完整,且多节点拓扑模拟方便,适合蓝绿发布中流量路径的观察。
3.2 使用 Kind 搭建 Kubernetes 集群
首先确保本地已安装 Docker 和 Kind CLI。以下配置创建一个包含 1 个控制平面节点和 2 个工作节点的集群,并开放 80/443 端口映射用于后续 Ingress 测试。
# kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
- role: worker
- role: worker
执行创建命令:
kind create cluster --name cilium-demo --config kind-config.yaml
验证集群节点状态:
kubectl get nodes
NAME STATUS ROLES AGE VERSION
cilium-demo-control-plane Ready control-plane 2m v1.30.0
cilium-demo-worker Ready <none> 1m v1.30.0
cilium-demo-worker2 Ready <none> 1m v1.30.0
3.3 安装 Cilium 并配置 Helm
添加 Cilium Helm 仓库并更新索引:
helm repo add cilium https://helm.cilium.io/
helm repo update
安装 Cilium,开启 Hubble 可观测性组件和节点间通信所需的隧道模式:
helm install cilium cilium/cilium \
--namespace kube-system \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true \
--set hubble.metrics.enabled="{dns,drop,tcp,flow,icmp,http}" \
--set tunnelProtocol=vxlan \
--set kubeProxyReplacement=strict
注意:如果使用 Docker Desktop 或 WSL2,请确保内核支持 eBPF。可通过
cilium status 检查 eBPF 相关告警。
3.4 验证 Cilium 组件状态
安装完成后,使用 cilium status 命令查看整体健康度:
cilium status --namespace kube-system
/¯¯\
/¯¯\__/¯¯\ Cilium: OK
\__/¯¯\__/ Operator: OK
/¯¯\__/¯¯\ Envoy Daemon: OK
\__/¯¯\__/ Hubble Relay: OK
\__/ ClusterMesh: disabled
检查所有 Pod 是否处于 Running 状态:
kubectl -n kube-system get pods -l k8s-app=cilium
NAME READY STATUS RESTARTS AGE
cilium-abc12 1/1 Running 0 3m
cilium-def34 1/1 Running 0 3m
cilium-ghi56 1/1 Running 0 3m
确认 Hubble UI 可访问:
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
# 浏览器打开 http://localhost:12000
3.5 Cilium 组件架构与数据流
下图展示了 Cilium 在 Kind 集群中的核心组件及其交互关系:
3.6 验证 Cilium 网络连通性
部署一个测试 Pod 并验证跨节点通信:
kubectl run test-pod --image=busybox -- sleep 3600
kubectl exec test-pod -- ping -c 3 10.244.1.2 # 另一个节点的 Pod IP
使用 Hubble 观察流量:
hubble observe --from-pod default/test-pod
预期输出应包含 ICMP 流量的记录,表明 Cilium 数据面正常工作。
3.7 环境就绪检查清单
在进入下一章之前,请确认以下项目全部通过:
- 集群节点:3 个节点均为 Ready 状态
- Cilium Agent:每个节点上的 cilium Pod 均为 Running
- Cilium Operator:operator Pod 运行正常
- Hubble Relay:relay 服务可用,UI 可访问
- 跨节点通信:不同节点上的 Pod 可以互相 ping 通
- eBPF 功能:cilium status 无 eBPF 相关告警
环境验证命令速查:
kubectl get nodes — 查看节点状态kubectl -n kube-system get pods -l k8s-app=cilium — 查看 Cilium Agentcilium status — 查看整体健康度hubble observe — 实时流量观察