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 集群中的核心组件及其交互关系:

Cilium 组件架构与数据流(Kind 集群) 控制平面节点 Cilium Operator Hubble Relay Hubble UI KVStore (etcd) 工作节点 1 Cilium Agent eBPF 数据面 Envoy Proxy Pod: app-v1 工作节点 2 Cilium Agent eBPF 数据面 Envoy Proxy Pod: app-v2 Hubble 数据采集层 Flow 日志 | DNS 监控 | TCP 指标 | HTTP 指标 数据流说明 Cilium Agent 通过 eBPF 程序捕获节点间流量 → 上报至 Hubble Relay → Hubble UI 可视化展示

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 Agent
cilium status — 查看整体健康度
hubble observe — 实时流量观察