2. 环境准备:部署Kubernetes集群(Minikube/Kind)、安装Cilium CNI插件、配置Hubble可观测性组件
本章是课程实验的基石。你将完成一个轻量级但功能完整的Kubernetes集群部署,并安装Cilium作为CNI插件,同时启用Hubble可观测性组件。所有后续的故障模拟与修复操作都将在这个环境中进行。
2.1 环境概览与组件关系
下图展示了本课程实验环境的整体架构,包括集群、Cilium控制平面以及Hubble数据采集链路的关系。
2.2 部署Kubernetes集群
本课程提供两种集群部署方案:Minikube(单节点,适合资源受限环境)和 Kind(多节点,更接近生产拓扑)。请根据你的实验环境选择一种。
| 特性 | Minikube | Kind (Kubernetes in Docker) |
|---|---|---|
| 节点数量 | 默认1个节点 | 支持1个控制平面 + N个工作节点 |
| 底层驱动 | 虚拟机 / Docker | Docker容器 |
| 启动速度 | 较慢(需下载ISO) | 快速(秒级) |
| 适用场景 | 本地开发、单机测试 | CI/CD、多节点模拟 |
| 对Cilium支持 | 需额外配置 | 原生支持良好 |
2.2.1 使用Kind部署集群(推荐)
Kind是运行在Docker容器中的Kubernetes集群,启动快且易于配置多节点。执行以下命令创建包含1个控制平面和2个工作节点的集群:
# 创建 kind 配置文件
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
- role: worker
- role: worker
networking:
disableDefaultCNI: true # 禁用默认CNI,后续安装Cilium
EOF
关键配置说明:
disableDefaultCNI: true 确保Kind不会安装默认的Flannel CNI,为Cilium的安装留出干净的接口。如果忘记设置此选项,Cilium将无法正常工作。
2.2.2 使用Minikube部署集群(备选)
如果你的环境无法运行Docker容器,可以使用Minikube。注意需要指定驱动并启用必要的特性:
# 启动 Minikube,指定驱动为 docker 或 virtualbox
minikube start \
--driver=docker \
--cni=false \
--kubernetes-version=v1.28.0 \
--extra-config=kubeadm.ignore-preflight-errors=NumCPU \
--extra-config=kubelet.max-pods=100
Minikube注意事项: Minikube默认会安装自己的CNI插件,务必使用
--cni=false 禁用。此外,Minikube的单节点架构在模拟某些多节点故障场景时可能受限。
2.3 安装Cilium CNI插件
集群就绪后,使用Cilium官方CLI工具进行安装。Cilium CLI会检测集群环境并自动配置最佳参数。
2.3.1 安装Cilium CLI
# 下载并安装 Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-amd64.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-amd64.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz{,.sha256sum}
2.3.2 执行Cilium安装
# 安装 Cilium,启用 Hubble
cilium install \
--version 1.15.0 \
--set hubble.relay.enabled=true \
--set hubble.ui.enabled=true
安装过程大约需要2-3分钟。可以通过以下命令监控进度:
# 查看 Cilium 状态
cilium status --wait
# 验证所有 Pod 处于 Running 状态
kubectl -n kube-system get pods -l k8s-app=cilium
安装参数解析:
--version 1.15.0:指定Cilium版本,确保与课程实验一致。hubble.relay.enabled=true:启用Hubble Relay,用于聚合集群范围内的流数据。hubble.ui.enabled=true:启用Hubble UI,提供可视化界面。
2.4 配置Hubble可观测性组件
Hubble是Cilium的可观测性层,提供网络流量的实时监控、服务依赖分析和安全策略审计能力。安装完成后,需要验证各组件是否正常运行。
2.4.1 验证Hubble组件状态
# 检查 Hubble 相关 Pod
kubectl -n kube-system get pods | grep hubble
# 预期输出示例:
# hubble-relay-xxxxx 1/1 Running
# hubble-ui-xxxxx 1/1 Running
# cilium-xxxxx 1/1 Running
2.4.2 启动Hubble UI并访问
# 端口转发 Hubble UI 到本地
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
# 在浏览器中访问:http://localhost:12000
2.4.3 使用hubble CLI进行命令行观测
# 安装 hubble CLI
curl -L --remote-name-all https://github.com/cilium/hubble/releases/download/v0.12.0/hubble-linux-amd64.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-amd64.tar.gz.sha256sum
sudo tar xzvfC hubble-linux-amd64.tar.gz /usr/local/bin
rm hubble-linux-amd64.tar.gz{,.sha256sum}
# 设置 Hubble 服务地址
export HUBBLE_SERVER=$(kubectl -n kube-system get svc hubble-relay -o jsonpath='{.spec.clusterIP}'):80
# 查看实时网络流量
hubble observe --from-pod default/my-app --to-pod default/my-db
快速验证命令: 执行
cilium connectivity test 可以自动运行一组端到端测试,验证Cilium和Hubble是否正常工作。该命令会创建测试Pod并检查网络连通性、DNS解析以及Hubble数据采集。
2.5 环境验证清单
完成上述步骤后,请对照下表逐项确认环境就绪:
| 检查项 | 验证命令 | 预期结果 |
|---|---|---|
| 集群节点状态 | kubectl get nodes |
所有节点状态为 Ready |
| Cilium Pod状态 | kubectl -n kube-system get pods -l k8s-app=cilium |
所有Pod为 Running,就绪数为1/1 |
| Hubble Relay状态 | kubectl -n kube-system get pods -l k8s-app=hubble-relay |
Pod为 Running |
| Hubble UI状态 | kubectl -n kube-system get pods -l k8s-app=hubble-ui |
Pod为 Running |
| Cilium连通性 | cilium connectivity test |
所有测试用例 通过 |
| Hubble数据流 | hubble observe --since 1m |
返回最近1分钟的流量记录 |
2.6 常见问题与排错
- Cilium Pod CrashLoopBackOff:检查内核版本是否支持eBPF(建议Linux 5.10+),或查看Cilium Agent日志:
kubectl -n kube-system logs -l k8s-app=cilium -c cilium-agent。 - Hubble Relay无法连接:确认Cilium已正确安装,并检查Relay服务端点:
kubectl -n kube-system get svc hubble-relay。 - Kind集群节点NotReady:确认在创建集群时已设置
disableDefaultCNI: true,否则Cilium无法接管网络。 - Minikube中Cilium无法启动:尝试增加Minikube资源配额:
minikube start --cpus=4 --memory=8192。