实战演练:Headlamp 仪表盘与 Helm 初体验
在上一篇的基建狂魔行动中,我们打造了一个坚不可摧的底层网络。但这就像建好了一座摩天大楼,里面却全是毛坯房。今天,我们要给这座大楼装上一个极具赛博朋克风格的“总控监控室” —— Headlamp。
💡 认识工程组件
Section titled “💡 认识工程组件”在正式敲命令之前,我们需要先认识一下今天的主角和作案工具。
1. 什么是 Headlamp?
Section titled “1. 什么是 Headlamp?”Headlamp 官方的定义是:“一个易于使用且可扩展的 Kubernetes Web UI”。
包工头大白话:如果你玩过 Docker,肯定知道 Portainer。Headlamp 就是 Kubernetes 界的 Portainer,但颜值更高、反应更快。传统的 K8s 官方 Dashboard 又老又丑,而 Headlamp 不仅能让你在网页上直观地查看、修改、删除集群里的所有资源,还支持极其强大的“插件(Plugins)”机制。 (注:Headlamp 官方也提供了可以直接下载到 Mac/Win 的桌面客户端,但为了未来我们能通过公网随时随地用手机或 iPad 查看集群,我们将采用 In-cluster (集群内网页版) 的部署方式。)
2. 什么是 Helm?
Section titled “2. 什么是 Helm?”包工头大白话:Helm 就是 Kubernetes 界的“App Store”或者你 Linux 里的 apt / yum。
在 K8s 里部署一个复杂的应用,通常需要写几十上百行的 YAML 配置文件。Helm 把这些配置文件打包成了一个叫做 Chart 的压缩包。你只需要敲一行 helm install,它就会自动帮你把所有需要的东西(包括容器、权限、网络分配)一次性建好。
📜 官方蓝图 (Official Resources)
Section titled “📜 官方蓝图 (Official Resources)”在赛博工地,官方图纸永远是最高指示。遇到任何第三方教程里没写过的玄学报错,直接去下面这些官方文档里翻,永远比在搜索引擎里瞎逛管用。
- 🚢 Helm (Kubernetes 的包管理神器)
- 📘 官方总图纸 (Docs):https://helm.sh/docs/
- 🛠️ 全平台安装指南:https://helm.sh/docs/intro/install/
- 🐙 GitHub 源码仓库:https://github.com/helm/helm
- 💡 Headlamp (赛博朋克风可视化面板)
- 📘 官方总图纸 (Docs):https://headlamp.dev/docs/latest/
- 📦 集群内 (In-cluster) 安装指南:https://headlamp.dev/docs/latest/installation/in-cluster/
🔨 施工前置:配置包工头的对讲机 (安装 Helm)
Section titled “🔨 施工前置:配置包工头的对讲机 (安装 Helm)”既然我们要用 Helm 来下载 Headlamp,首先得装好这个包管理工具。
关于这把“对讲机”到底放在哪里,你有两个选择,当然两个方案也可以都安装(包工头强烈推荐方案二):
方案一:把对讲机留在机房(在主控节点安装)
Section titled “方案一:把对讲机留在机房(在主控节点安装)”如果你习惯在服务器上敲代码,直接登录你的 Master 01 节点(10.0.10.10),执行官方提供的一步到位安装脚本(直接上最新的 Helm 4):
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 | bash方案二:坐在办公室遥控(在本地电脑安装,强烈推荐!)
Section titled “方案二:坐在办公室遥控(在本地电脑安装,强烈推荐!)”既然上一篇我们已经把集群的指挥权(Kubeconfig)复制到了你的个人电脑上,你完全可以直接在自己的 Mac 或 Windows 上安装 Helm,直接给远端的集群下达施工指令。
- 如果你是 Mac 用户,直接用 Homebrew 一秒搞定:
Terminal window brew install helm - 如果你是 Windows (使用 Scoop/Chocolatey) 或其他系统,官方贴心地准备了全平台的详细图纸,请查阅:👉 Helm 官方安装指南
🔍 验收对讲机: 无论你选了哪种方案,安装完成后,在你对应的终端里敲入:
helm version如果能看到包含 v4.x.x(或 v3.x.x,取决于你本地包管理器的收录进度)的输出字样,说明我们的对讲机已配置就位。
🏗️ 核心施工:Headlamp 规范化部署 (GitOps 预备)
Section titled “🏗️ 核心施工:Headlamp 规范化部署 (GitOps 预备)”我们不再使用零散的命令行参数,而是将配置全部“文件化”,方便未来无缝迁移到 ArgoCD。
-
编写 Helm 施工图纸
headlamp-values.yaml在本地或 Master 节点创建此文件:
headlamp-values.yaml config:# 开启插件自动发现watchPlugins: trueservice:# 基础模式,对外不暴露type: ClusterIPport: 80# 资源限制:保证监控室在高压测试下不被杀死resources:requests:cpu: 100mmemory: 128Milimits:cpu: 500mmemory: 512Mi -
编写权限图纸
headlamp-admin.yaml定义“上帝通行证”。新版 K8s 不再自动生成永久 Token,我们直接手搓一张:
headlamp-admin.yaml apiVersion: v1kind: ServiceAccountmetadata:name: headlamp-adminnamespace: kube-system---apiVersion: v1kind: Secretmetadata:name: headlamp-admin-tokennamespace: kube-systemannotations:kubernetes.io/service-account.name: headlamp-admintype: kubernetes.io/service-account-token---apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata:name: headlamp-adminroleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-adminsubjects:- kind: ServiceAccountname: headlamp-adminnamespace: kube-system -
照图施工:执行安装
Terminal window # 添加仓库并更新helm repo add headlamp https://kubernetes-sigs.github.io/headlamp/helm repo update# 应用 Helm 配置helm install my-headlamp headlamp/headlamp \--namespace kube-system \--create-namespace \-f headlamp-values.yaml# 应用权限配置清单kubectl apply -f headlamp-admin.yaml -
提取通行证密钥 (Token)
Terminal window kubectl get secret headlamp-admin-token -n kube-system -o jsonpath="{.data.token}" | base64 -d && echo⚠️ 赶紧复制终端里输出的这串无规则乱码备用!这就是你登录面板的唯一凭证。
🧪 Service 四大天王:全维度网络压测
Section titled “🧪 Service 四大天王:全维度网络压测”现在 Headlamp 已经被包裹在 K8s 深处(ClusterIP)。接下来,我们要施展 Kubernetes 最核心的网络魔法,手写另外 3 个不同类型的 Service,加上原有的 1 个,从 4 个完全不同的维度去打通网络!
创建并应用 all-services.yaml 图纸:
# 1. 节点开洞 (NodePort) - 修复版apiVersion: v1kind: Servicemetadata: name: headlamp-nodeport namespace: kube-systemspec: type: NodePort selector: app.kubernetes.io/name: headlamp app.kubernetes.io/instance: my-headlamp # 加上这个标签,定位更精准 ports: - port: 80 targetPort: 4466 # ⚠️ 修复关键:指向真实的容器端口 nodePort: 32000
---# 2. 榨干发牌员 (LoadBalancer) - 修复版apiVersion: v1kind: Servicemetadata: name: headlamp-loadbalancer namespace: kube-systemspec: type: LoadBalancer selector: app.kubernetes.io/name: headlamp app.kubernetes.io/instance: my-headlamp ports: - port: 80 targetPort: 4466 # ⚠️ 修复关键:指向真实的容器端口---# 3. 赛博任意门 (ExternalName)# 作用:让集群内部把 baidu.com 映射为 fake-headlamp-extapiVersion: v1kind: Servicemetadata: name: fake-headlamp-ext namespace: kube-systemspec: type: ExternalName externalName: baidu.com执行应用:kubectl apply -f all-services.yaml。
🧭 K8s 网络访问拓扑图解
Section titled “🧭 K8s 网络访问拓扑图解”在开始压测前,请看下面的赛博流量拓扑图,直观理解这四大天王的流量走向:
🛡️ 维度一:ClusterIP (内网直通车)
Section titled “🛡️ 维度一:ClusterIP (内网直通车)”- 原理:只提供一个
10.61.x.x的虚拟 IP,外部绝对无法访问。 - 验收:我们在集群里拉起一个临时的“侦察兵”去探测它:
(看到
Terminal window kubectl run -it --rm test-pod --image=curlimages/curl -- sh# 进入 Pod 后执行:curl -I http://my-headlamp.kube-system.svc.cluster.localHTTP/1.1 200 OK说明内网 DNS 和 Cilium 基础路由完美!按exit退出)
🚪 维度二:NodePort (节点开洞)
Section titled “🚪 维度二:NodePort (节点开洞)”- 原理:在所有的物理宿主机上强行开一个
32000端口。不论你访问哪台机器,Cilium 都会帮你把流量引到 Headlamp Pod 上。 - 验收:打开你的浏览器,依次访问
http://10.0.10.10:32000、http://10.0.10.20:32000。 (如果都能打开面板,说明 Cilium eBPF 的跨节点流量转发大成!)
🃏 维度三:LoadBalancer (榨干发牌员)
Section titled “🃏 维度三:LoadBalancer (榨干发牌员)”- 原理:最优雅的局域网暴露方式。直接向 Cilium L2 申请一个独立的内网 IP。
- 验收:执行
kubectl get svc headlamp-loadbalancer -n kube-system。 (记下分配的EXTERNAL-IP如10.0.10.50,在浏览器直接访问http://10.0.10.50。秒开说明二层 ARP 广播成功接管!)
🌀 维度四:ExternalName (赛博别名)
Section titled “🌀 维度四:ExternalName (赛博别名)”- 原理:很多人误以为它是用来对外暴露的,其实相反!它是把外网的地址拉进 K8s 内部,伪装成一个内部服务!
- 验收:再次拉起内部侦察兵:
(你会惊奇地发现,K8s 的 DNS 直接返回了
Terminal window kubectl run -it --rm test-pod --image=curlimages/curl -- sh# 进入 Pod 后,我们查一下这个内部服务名的 DNS 指向:nslookup fake-headlamp-ext.kube-system.svc.cluster.localbaidu.com的解析地址!这就是 ExternalName 的威力:让微服务调用外部数据库时,代码里只需要写内部服务名,无需修改代码即可随时切换外部真实地址。)
🚇 维度五:Port-Forward (战术地道)
Section titled “🚇 维度五:Port-Forward (战术地道)”- 原理:这是架构师的“终极保底神技”。它完全绕过底层的 Cilium 和 Service 暴露机制,直接借助 Kubernetes API Server,在你的本地电脑和集群内部的 Pod 之间挖一条加密的直连地道。
- 验收:在你自己的电脑终端(配置了 Kubeconfig 的地方)执行:
(终端会挂起并提示
Terminal window kubectl port-forward -n kube-system service/my-headlamp 8080:80Forwarding from 127.0.0.1:8080。此时,直接打开你电脑的浏览器访问http://localhost:8080,面板秒开!测试完毕后,在终端按Ctrl+C即可销毁地道。这在网络彻底瘫痪、急需进后台排错时,是唯一能救命的招数。)
🎉 登堂入室 (Access)
Section titled “🎉 登堂入室 (Access)”恭喜你完成了这场“一鱼四吃”的硬核网络压测!现在:
- 选一个你最喜欢的访问方式(建议用 LoadBalancer IP)在浏览器打开 Headlamp。
- 将你刚才提取的永久 Token 粘贴进去,点击 Authenticate。
享受你的赛博总控室吧!在这里,你可以点开左侧的 Nodes 查看三台 Master 的状态,完全摆脱了令人头秃的命令行。