2. 环境准备:部署Kubernetes集群(Minikube/Kind)、安装Cilium CNI插件、配置Hubble可观测性组件

本章是课程实验的基石。你将完成一个轻量级但功能完整的Kubernetes集群部署,并安装Cilium作为CNI插件,同时启用Hubble可观测性组件。所有后续的故障模拟与修复操作都将在这个环境中进行。

2.1 环境概览与组件关系

下图展示了本课程实验环境的整体架构,包括集群、Cilium控制平面以及Hubble数据采集链路的关系。

实验环境组件关系图 Kubernetes 集群 (Minikube / Kind) K8s 控制平面 kube-apiserver 工作节点 kubelet / Pod Cilium CNI 插件 Cilium Agent Cilium Operator Cilium 身份 Hubble 可观测性组件 Hubble Relay Hubble UI hubble CLI

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。