2. 环境准备:Kubernetes集群搭建与Cilium工具链安装

本章是整门课程的基石。在搭建服务目录平台并集成Cilium网络策略之前,必须准备好一个可运行的Kubernetes集群,并安装Cilium CLI与Hubble CLI。本章将提供两种集群搭建方案(kubeadm与minikube),并完成Cilium与Hubble命令行工具的安装验证。

2.1 集群搭建方案对比

根据实验环境与资源限制,推荐以下两种方案:

特性 kubeadm(生产级) minikube(本地开发)
节点数量 1 Master + N Worker 单节点(支持多节点模拟)
资源要求 2 vCPU / 2GB RAM(最低) 2 vCPU / 2GB RAM + Docker/VM驱动
CNI替换 完全支持(需手动移除默认CNI) 支持(通过--cni=cilium参数)
适用场景 多集群、策略验证、CI/CD集成 本地开发、快速原型、单机测试
推荐选择:本课程后续章节将使用kubeadm搭建的双节点集群作为主环境,minikube作为备选方案。如果你只有一台笔记本且资源有限,minikube是更快的起点。

2.2 方案一:使用kubeadm搭建集群

2.2.1 前置条件

  • 操作系统:Ubuntu 22.04 LTS / CentOS 7.9+
  • 容器运行时:containerd(推荐)或 Docker
  • 网络:节点间互通,关闭swap
  • 端口:6443(API Server)、2379-2380(etcd)、10250(kubelet)

2.2.2 安装步骤(Master节点)

# 1. 安装kubeadm、kubelet、kubectl
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubelet=1.28.0-1.1 kubeadm=1.28.0-1.1 kubectl=1.28.0-1.1
sudo apt-mark hold kubelet kubeadm kubectl

# 2. 初始化集群(指定Pod CIDR,为Cilium预留)
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

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

# 4. 移除默认CNI(kubeadm默认不会安装CNI,但若安装了flannel等需先移除)
# 本步骤在安装Cilium前执行
kubectl delete daemonset -n kube-system kube-flannel-ds 2>/dev/null || true

2.2.3 加入Worker节点

# 在Worker节点上执行Master初始化后输出的join命令
sudo kubeadm join 192.168.1.100:6443 -- <> \
    --discovery--ca-cert-hash sha256:<hash>
注意:如果忘记,可在Master上执行 kubeadm create --print-join-command 重新生成。加入节点后,使用 kubectl get nodes 确认所有节点状态为 Ready(此时CNI未安装,节点可能为NotReady,安装Cilium后自动恢复)。

2.3 方案二:使用minikube搭建集群

2.3.1 安装minikube与启动集群

# 1. 安装minikube(Linux)
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# 2. 启动集群(指定cni=cilium,自动安装Cilium)
minikube start --cni=cilium --kubernetes-version=v1.28.0

# 3. 验证集群状态
minikube status
kubectl get nodes
minikube优势:使用 --cni=cilium 参数启动时,minikube会自动安装Cilium作为CNI插件,无需手动安装Cilium CLI。但本课程仍建议手动安装CLI以获取完整功能。

2.4 Cilium CLI安装

Cilium CLI是管理Cilium网络策略、监控集群状态的核心工具。无论使用哪种集群搭建方式,都建议手动安装最新版CLI。

2.4.1 安装步骤

# 1. 下载最新版Cilium CLI
CILIUM_CLI_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/cilium-cli/main/stable.txt)
CLI_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then CLI_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/cilium-cli/releases/download/${CILIUM_CLI_VERSION}/cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}
sha256sum --check cilium-linux-${CLI_ARCH}.tar.gz.sha256sum
sudo tar xzvfC cilium-linux-${CLI_ARCH}.tar.gz /usr/local/bin
rm cilium-linux-${CLI_ARCH}.tar.gz{,.sha256sum}

# 2. 验证安装
cilium version

2.4.2 使用Cilium CLI安装Cilium到集群

# 安装Cilium(自动检测集群环境)
cilium install

# 检查Cilium状态
cilium status --wait

# 查看Cilium Agent Pod
kubectl -n kube-system get pods -l k8s-app=cilium
关键输出:当 cilium status 显示 DaemonSet cilium is OK 且所有Agent Pod处于Running状态时,表示Cilium已成功部署。

2.5 Hubble CLI安装

Hubble是Cilium的可观测性层,提供网络流量的实时监控与可视化。Hubble CLI用于查询流日志、服务依赖关系等。

2.5.1 安装Hubble CLI

# 1. 下载最新版Hubble CLI
HUBBLE_VERSION=$(curl -s https://raw.githubusercontent.com/cilium/hubble/master/stable.txt)
HUBBLE_ARCH=amd64
if [ "$(uname -m)" = "aarch64" ]; then HUBBLE_ARCH=arm64; fi
curl -L --fail --remote-name-all https://github.com/cilium/hubble/releases/download/${HUBBLE_VERSION}/hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}
sha256sum --check hubble-linux-${HUBBLE_ARCH}.tar.gz.sha256sum
sudo tar xzvfC hubble-linux-${HUBBLE_ARCH}.tar.gz /usr/local/bin
rm hubble-linux-${HUBBLE_ARCH}.tar.gz{,.sha256sum}

# 2. 验证安装
hubble version

2.5.2 启用Hubble UI与Relay

# 启用Hubble(包含Relay和UI)
cilium hubble enable --ui

# 等待Hubble组件就绪
kubectl -n kube-system wait --for=condition=ready pod -l k8s-app=hubble-relay --timeout=120s
kubectl -n kube-system wait --for=condition=ready pod -l k8s-app=hubble-ui --timeout=120s

# 端口转发Hubble UI(本地访问)
kubectl -n kube-system port-forward svc/hubble-ui 12000:80
访问Hubble UI:在浏览器中打开 http://localhost:12000,即可看到集群的网络流量拓扑图。后续章节将基于Hubble进行策略效果验证。

2.6 环境验证与工具链检查清单

完成以上步骤后,请使用以下清单确认所有组件正常工作:

检查项 命令 预期结果
集群节点状态 kubectl get nodes 所有节点 Ready
Cilium Agent cilium status DaemonSet OK, Cilium: OK
Cilium CLI cilium version 显示客户端与服务端版本
Hubble CLI hubble version 显示客户端版本
Hubble Relay hubble status Relay: OK, 连接数 > 0
Hubble UI curl -s http://localhost:12000 返回HTML页面

2.7 环境架构总览

下图展示了本章搭建的完整环境架构,包含集群节点、Cilium数据平面、Hubble可观测性组件以及CLI工具链的关系:

Kubernetes集群与Cilium/Hubble环境架构图 Kubernetes集群与Cilium/Hubble环境架构 Kubernetes Cluster Master Node kube-apiserver kube-controller-manager kube-scheduler Worker Node 1 kubelet Cilium Agent Pod (App) Worker Node 2 kubelet Cilium Agent Pod (App) Hubble Relay 流量聚合与查询 Hubble UI 可视化拓扑 CLI 工具链 cilium / hubble 说明: Cilium Agent运行在每个Worker节点上,通过eBPF实现网络策略与负载均衡;Hubble Relay从所有Agent收集流数据, 提供全局可观测性;CLI工具链用于安装、管理和调试整个Cilium/Hubble栈。

2.8 常见问题与避坑指南

  • 节点NotReady:kubeadm集群在安装Cilium之前,节点状态为NotReady属于正常现象。安装Cilium后等待1-2分钟即可恢复。
  • Cilium安装失败:检查集群是否已存在其他CNI(如flannel、calico)。使用 cilium install --set cni.chainingMode=generic-veth 可兼容部分已有CNI。
  • Hubble UI无法访问:确认 cilium hubble enable --ui 已执行,且port-forward命令保持运行。也可使用 kubectl -n kube-system get svc hubble-ui 检查Service类型。
  • CLI版本不匹配:确保cilium CLI版本与集群中Cilium版本一致。使用 cilium version 对比客户端与服务端版本号。
环境就绪标志:当你能在任意节点上执行 cilium status 看到所有指标为OK,且 hubble status 显示Relay连接正常时,本章环境准备全部完成。下一阶段将基于此环境部署服务目录平台并编写Cilium网络策略。