2. 环境准备:Kubernetes集群搭建、Cilium与Hubble安装、Hubble CLI与UI部署
本章是课程的基础环境搭建环节。一个可运行的Kubernetes集群、正确安装的Cilium CNI插件以及完整的Hubble观测栈,是后续进行流量可视化与准入策略评审的前提。本节将按照生产级标准,逐步完成从集群初始化到Hubble UI访问的全流程部署。
2.1 环境概览与版本依赖
在开始部署前,需确认各组件的版本兼容性。下表列出了本次课程使用的核心软件及其推荐版本,避免因版本不匹配导致功能异常。
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Kubernetes | v1.28+ | 支持Cilium原生路由与eBPF功能 |
| Cilium | v1.15+ | 内置Hubble Server,支持L7策略 |
| Helm | v3.12+ | 用于Cilium与Hubble的Chart部署 |
| Hubble CLI | v0.13+ | 命令行流量观测工具 |
| Hubble UI | v0.13+ | 基于Cilium Hubble的图形化界面 |
| 操作系统内核 | 5.10+ | 确保eBPF特性完整可用 |
uname -r 确认内核版本。若低于5.10,建议升级内核或使用Ubuntu 22.04+ / CentOS 8+ 等发行版。
2.2 Kubernetes集群搭建(快速部署)
为聚焦Cilium与Hubble的学习,此处使用 kubeadm 搭建一个单控制平面+单工作节点的最小集群。生产环境请根据规模调整节点数量。
2.2.1 节点初始化
在所有节点上执行以下基础配置:
# 关闭交换分区
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置sysctl参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
2.2.2 安装容器运行时与kubeadm
使用 containerd 作为容器运行时,并安装kubeadm、kubelet、kubectl:
# 安装containerd(以Ubuntu为例)
sudo apt-get update
sudo apt-get install -y containerd
# 配置containerd使用systemd cgroup驱动
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
# 安装kubeadm、kubelet、kubectl
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
2.2.3 初始化控制平面
在控制平面节点执行初始化,并跳过默认的CNI安装(后续由Cilium接管):
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --skip-phases=addon/kube-proxy
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# 查看节点状态(此时节点为NotReady,等待CNI)
kubectl get nodes
--skip-phases=addon/kube-proxy 跳过kube-proxy安装,因为Cilium将完全替代kube-proxy的功能(kube-proxy replacement模式)。
2.3 Cilium与Hubble安装
Cilium是本次课程的核心网络组件,它内置了Hubble Server用于流量观测。我们使用Helm进行一键安装,并同时启用Hubble相关组件。
2.3.1 添加Helm仓库并准备配置
helm repo add cilium https://helm.cilium.io/
helm repo update
创建自定义values文件 cilium-values.yaml,关键配置如下:
# cilium-values.yaml
kubeProxyReplacement: true
k8sServiceHost: <控制平面IP>
k8sServicePort: 6443
hubble:
enabled: true
relay:
enabled: true
ui:
enabled: false # UI后续单独部署
ipam:
mode: kubernetes
2.3.2 执行Helm安装
helm install cilium cilium/cilium \
--namespace kube-system \
--values cilium-values.yaml
# 验证Cilium Pod状态
kubectl -n kube-system get pods -l k8s-app=cilium
安装完成后,Cilium会自动配置网络,节点状态应变为 Ready。
2.3.3 验证Cilium与Hubble功能
使用Cilium CLI检查集群连接状态与Hubble健康度:
# 安装Cilium CLI
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz
# 检查集群状态
cilium status
# 检查Hubble状态
cilium hubble status
/ Health: OK
/ Hubble: OK
/ Relay: OK
2.4 Hubble CLI与UI部署
Hubble CLI提供命令行级别的流量实时观察能力,而Hubble UI则提供图形化的服务拓扑与流量可视化界面。两者配合使用,可覆盖从快速排障到策略评审的全场景需求。
2.4.1 部署Hubble Relay与UI
Hubble Relay作为Hubble Server与Hubble UI/CLI之间的代理,必须先行部署。我们通过Helm升级Cilium来启用Relay,并单独部署UI:
# 升级Cilium以启用Hubble Relay(如果之前未启用)
helm upgrade cilium cilium/cilium \
--namespace kube-system \
--reuse-values \
--set hubble.relay.enabled=true
# 部署Hubble UI
helm install hubble-ui cilium/hubble-ui \
--namespace kube-system \
--set backends.server=http://hubble-relay:80
2.4.2 安装Hubble CLI
Hubble CLI需要安装在本地管理机上,用于远程连接Hubble Relay:
# 下载Hubble CLI
curl -L --remote-name-all https://github.com/cilium/hubble/releases/latest/download/hubble-linux-amd64.tar.gz
sudo tar xzvfC hubble-linux-amd64.tar.gz /usr/local/bin
rm hubble-linux-amd64.tar.gz
# 配置端口转发(使本地CLI可访问集群内Relay)
kubectl port-forward -n kube-system svc/hubble-relay 4245:80 &
# 测试连接
hubble status
2.4.3 访问Hubble UI
通过端口转发将Hubble UI暴露到本地浏览器:
kubectl port-forward -n kube-system svc/hubble-ui 12000:80 &
# 浏览器访问:http://localhost:12000
UI界面将展示集群内所有命名空间的服务拓扑图,并支持按标签、IP、协议过滤流量。
2.5 整体架构与数据流
下图展示了Cilium与Hubble各组件的部署位置及数据采集、转发路径,帮助理解各模块的协作关系。
2.6 环境验证清单
完成上述步骤后,建议执行以下验证清单,确保环境就绪:
- 集群节点状态:
kubectl get nodes输出均为Ready。 - Cilium Pod运行:
kubectl -n kube-system get pods -l k8s-app=cilium所有Pod为Running。 - Hubble Relay运行:
kubectl -n kube-system get pods -l k8s-app=hubble-relay状态正常。 - Hubble UI访问: 浏览器打开
http://localhost:12000可看到服务拓扑图。 - CLI连接测试:
hubble status返回Health: OK。 - 网络连通性: 部署一个测试Pod,
kubectl run test --image=busybox -- sleep 3600,进入Pod后能ping通其他Pod IP。
hubble-relay 日志:kubectl logs -n kube-system -l k8s-app=hubble-relay。常见原因为Cilium未正确启用Hubble或Relay端口转发未配置。