2. 环境准备:Kubernetes集群搭建、Helm安装、Cilium与Envoy初始部署

本章是实战课程的基石。我们将完成从裸金属或云虚拟机到具备Cilium与Envoy基础运行环境的完整搭建流程。所有后续的链路追踪验证、升级演练都将依赖本章所构建的集群环境。请严格按照以下步骤操作,确保环境一致性。

2.1 环境概览与版本选型

本课程采用经过充分验证的软件版本组合,以平衡功能完整性与稳定性。建议使用下表所列版本,避免因版本差异导致兼容性问题。

组件 推荐版本 说明
Kubernetes v1.28.7 API成熟,兼容Cilium 1.15+
Helm v3.14.3 用于Cilium与Envoy的声明式部署
Cilium v1.15.5 支持Envoy CRD与链路追踪
Envoy (Cilium内置) v1.28.0 (cilium-envoy) Cilium发行版内置的Envoy
操作系统 Ubuntu 22.04 LTS 内核5.15+,支持eBPF
版本锁定建议: 生产环境升级前,务必在隔离的测试环境中使用与生产一致的版本组合进行验证。本课程所选版本已通过内部链路追踪场景的端到端测试。

2.2 Kubernetes集群搭建(kubeadm方式)

我们使用 kubeadm 搭建一个三节点集群(1控制面 + 2工作节点)。确保所有节点已安装容器运行时(如containerd)并关闭交换分区。

2.2.1 初始化控制面节点

# 在控制面节点执行
sudo kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.10 \
  --kubernetes-version=v1.28.7

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

2.2.2 加入工作节点

# 在工作节点执行(使用控制面输出的)
sudo kubeadm join 192.168.1.10:6443 -- <> \
  --discovery--ca-cert-hash sha256:<hash>

2.2.3 验证集群状态

kubectl get nodes
# 预期输出:所有节点状态为 Ready(此时尚未安装CNI,节点可能为NotReady)

2.3 Helm安装与配置

Helm是Kubernetes的包管理工具,我们将使用它来部署Cilium及其内置Envoy。

2.3.1 安装Helm客户端

curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
helm version
# 预期输出:version.BuildInfo{Version:"v3.14.3", ...}

2.3.2 添加Cilium Helm仓库

helm repo add cilium https://helm.cilium.io/
helm repo update

2.4 Cilium与Envoy初始部署

这是环境准备的核心步骤。我们将通过Helm一次性部署Cilium,并启用内置Envoy代理。Cilium从1.14版本开始,将Envoy作为独立DaemonSet(cilium-envoy)运行,用于处理L7策略与链路追踪。

2.4.1 部署Cilium(含Envoy)

helm install cilium cilium/cilium \
  --namespace kube-system \
  --set eni.enabled=false \
  --set ipam.mode=kubernetes \
  --set kubeProxyReplacement=strict \
  --set l7Proxy=true \
  --set envoy.enabled=true \
  --set hubble.enabled=true \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true
关键参数解析:
  • l7Proxy=true:启用L7代理功能,Envoy将处理HTTP/gRPC流量。
  • envoy.enabled=true:显式部署Cilium内置的Envoy DaemonSet。
  • hubble.enabled=true:启用Hubble观测层,为链路追踪提供数据源。

2.4.2 验证部署状态

kubectl -n kube-system get pods -l k8s-app=cilium
kubectl -n kube-system get pods -l k8s-app=cilium-envoy
kubectl -n kube-system get pods -l k8s-app=hubble-relay

预期所有Pod处于 Running 状态,且READY列显示为 1/1 或 1/1(cilium-envoy)。

2.4.3 验证Cilium与Envoy集成

# 检查Cilium代理是否识别到Envoy
kubectl -n kube-system exec ds/cilium -- cilium status | grep Envoy
# 预期输出:Envoy: Running
Cilium与Envoy初始部署架构 Kubernetes Cluster Control Plane Node kube-apiserver kube-controller-manager kube-scheduler Worker Node 1 cilium-agent cilium-envoy hubble-relay Worker Node 2 cilium-agent cilium-envoy hubble-relay Hubble UI (可视化层) 每个工作节点运行 cilium-agent + cilium-envoy,通过 Hubble Relay 汇聚观测数据

2.5 环境验证清单

完成部署后,请逐项检查以下清单,确保环境就绪。任何一项失败都需回溯排查。

检查项 验证命令 预期结果
节点状态 kubectl get nodes 所有节点 Ready
Cilium Pod kubectl -n kube-system get pods -l k8s-app=cilium 每个节点一个 Running
Envoy Pod kubectl -n kube-system get pods -l k8s-app=cilium-envoy 每个节点一个 Running
Hubble Relay kubectl -n kube-system get pods -l k8s-app=hubble-relay Running
Envoy状态 kubectl -n kube-system exec ds/cilium -- cilium status | grep Envoy Envoy: Running
Hubble UI kubectl -n kube-system get svc hubble-ui ClusterIP 或 NodePort 已分配
常见问题排查:
  • 节点NotReady: 检查容器运行时(containerd)是否正常,kubelet日志是否有CNI插件错误。
  • cilium-envoy未启动: 确认Helm安装时 envoy.enabled=true 已设置,检查镜像拉取策略。
  • Hubble Relay CrashLoopBackOff: 检查Cilium代理与Relay之间的gRPC连接,确保 hubble-relay 服务已创建。

2.6 环境拓扑总览

下图展示了本章搭建完成后的完整环境拓扑,包括控制面、工作节点、Cilium组件以及Envoy代理的分布关系。后续章节的链路追踪数据流将在此拓扑上运行。

环境拓扑总览:数据平面与控制平面 Control Plane kube-apiserver etcd kube-scheduler kube-controller-manager Worker Node 1 cilium-agent cilium-envoy hubble-relay App Pod (with sidecar) Worker Node 2 cilium-agent cilium-envoy hubble-relay App Pod (with sidecar) Hubble UI (可视化与链路追踪入口) 控制面管理集群状态,数据面由 cilium-agent + cilium-envoy 处理,Hubble 提供全链路观测

2.7 下一步准备

环境搭建完成后,建议保存当前集群的快照或状态记录。在进入第3章之前,请确认:

  • 所有节点上的 cilium-agent 与 cilium-envoy 日志无 ERROR 级别输出。
  • Hubble UI 可通过 kubectl port-forward 访问,验证服务正常。
  • 部署一个简单的 echoserver Pod 测试集群网络连通性。

至此,环境准备阶段完成。我们已拥有一个具备Cilium网络策略与Envoy L7代理能力的Kubernetes集群,为后续的链路追踪验证奠定了坚实基础。