Skip to content

赛博堡垒的绝对大门:部署 Traefik 网关与全自动 HTTPS (GitOps 版)

🌱 创建: 2026/04/26 ⏱️ 更新: 2026/05/22

This content is not available in your language yet.

📖 认识绝对大门:七层流量的赛博海关

Section titled “📖 认识绝对大门:七层流量的赛博海关”

在上一期工程中,我们拿到了最高权限的 *.k3s.besthomelab.tech 泛域名加密护盾。但护盾如果不能装在城门上,就毫无意义。

在 Kubernetes 集群中,所有从外部涌入的流量,都必须经过 Ingress Controller 的拆包、安检(TLS 解密),并根据地址路由到内部的正确街区(Pod)。我们选择 Traefik,因为它是云原生的亲儿子,有着极度强悍的“动态发现”能力和独步天下的“全局 TLS 劫持”黑科技。

结合 ArgoCD 流水线,这扇大门的建立将完全由 GitHub 仓库中的声明式代码驱动。

👉 情报中心:besthomelab/k3s-homelab-gitops 图纸库


🎬 施工演示录像 (Video Walk-through)

Section titled “🎬 施工演示录像 (Video Walk-through)”

从07:11开始

正在嗅探浏览器语言并加载赛博录像...

🔨 赛博流水线施工 (GitOps Workflow)

Section titled “🔨 赛博流水线施工 (GitOps Workflow)”

我们的底层网络已经铺设了 Cilium 与 kube-vip L2 负载均衡器。这次,我们要让 Traefik 霸占我们预留的 VIP 靓号 10.0.10.100。由于采用 GitOps 架构,所有的配置代码均已在我们的图纸库中开源。

步骤 1:下发 Traefik 多源总包合同

Section titled “步骤 1:下发 Traefik 多源总包合同”

我们需要指示 ArgoCD 监工建立这扇大门:官方仓库提供骨架,我们的 Git 仓库提供软装。

💡 架构师情报局:如何嗅探 Traefik 的最新版本?

请在终端执行以下指令,获取 Traefik 官方的最新 Chart 版本号,并填入下方图纸的 targetRevision 中:

Terminal window
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm search repo traefik/traefik --versions | head -n 5

👉 获取 Application 图纸:bootstrap/traefik-app.yaml

步骤 2:定制大门的核心参数 (Values)

Section titled “步骤 2:定制大门的核心参数 (Values)”

大门的软装至关重要。我们在 Git 仓库中通过自定义 values.yaml,实现了以下三大核心功能:

  1. 强制 HTTPS:将所有 HTTP 难民驱赶到安全的 Websecure 通道。
  2. VIP 绑定:通过 loadBalancerIP 锁定 kube-vip 分配的 10.0.10.100
  3. 全局 TLS 弹药库:配置 tlsStore.default,指向上一期 Cert-manager 生成的泛域名证书 Secret。这是实现“无感加密”的核心黑科技!

👉 获取核心软装图纸:infrastructure/traefik/values.yaml

步骤 3:点亮网关监控大屏 (IngressRoute)

Section titled “步骤 3:点亮网关监控大屏 (IngressRoute)”

为了直观地监控经过这扇大门的每一滴流量,我们暴露 Traefik 自带的极客风监控面板。在 Traefik 中,我们不再使用老旧的原生 Ingress,而是使用更强大的 CRD:IngressRoute

得益于上一步的全局 TLS 配置,在这份图纸中,我们完全不需要指定任何证书 Secret,只需一句 tls: {} 即可!

👉 获取路由图纸:infrastructure/traefik/dashboard-route.yaml


将上述配置全部推送至 GitHub 仓库。ArgoCD 会在几秒钟内捕捉到更新,并在 K3s 集群中全自动浇筑出这扇绝对大门。

你可以通过以下指令确认 kube-vip 是否成功接管了 IP:

Terminal window
kubectl get svc -n traefik traefik
# 预期 EXTERNAL-IP 应稳稳显示为 10.0.10.100
  1. DNS 引导:进入 Cloudflare(或你家局域网路由如 OPNsense),将 *.k3s.besthomelab.tech 的 A 记录指向 10.0.10.100
  2. 安全访问:打开浏览器,直奔 https://traefik.k3s.besthomelab.tech/dashboard/

如果你看到了极具科幻感的流量监控台,并且地址栏挂着一把坚不可摧的绿色小锁,宣告着你的泛域名护盾已完美合龙!

💡 架构师进阶法则:白嫖证书的终极奥义

Section titled “💡 架构师进阶法则:白嫖证书的终极奥义”

在 Kubernetes 中,Secret 是严格受命名空间隔离的。正常情况下,如果你在 default 命名空间部署应用,是无法跨区调用 traefik 命名空间里的证书的。

但是,因为我们在 values.yaml 中将泛域名证书硬塞进了 Traefik 的 全局底层库 (tlsStore: default),Traefik 会自动在底层进行聪明的 SNI 嗅探。

从此以后,你的赛博堡垒里任何命名空间的新建筑,只要域名属于 *.k3s.besthomelab.tech,并在路由中声明 tls: {},即可实现上线即加密,无需再为证书挂载多写一行代码。尽情用 ArgoCD 向集群倾泻你的应用图纸吧!

🗺️ 赛博海关的通关文牒:流量调度全解析 (Traffic Flow)

Section titled “🗺️ 赛博海关的通关文牒:流量调度全解析 (Traffic Flow)”

在上一篇《K3s HA 终极筑基》中,我们通过 kube-vip 拿到了控制平面的护卫,通过 Cilium 拿到了业务 IP 池的发牌权。现在,Traefik 坐镇 10.0.10.100 这个 VIP 靓号,正式成为了整座堡垒的“赛博海关”。

当你从个人电脑访问 https://traefik.k3s.besthomelab.tech 时,数据包在到达你真正的业务面板之前,经历了一场极其硬核的“越狱与潜入”:

💡 深度原理解析:为何这套架构不可撼动?

Section titled “💡 深度原理解析:为何这套架构不可撼动?”
  1. Cilium 的“影分身” (L2 Announcement): 虽然 Traefik 的大门是 10.0.10.100,但它在局域网内并没有真实的物理网卡。Cilium 就像一个幻术师,它会在你的物理交换机询问这个 IP 时,代替 Traefik 回复自己宿主机的 MAC 地址。这就是流量能从外部无缝打入 K3s 节点的根本原因。

  2. Traefik 的“万能钥匙” (TLS Termination): 当加密流量到达 Traefik 时,它会去我们在 values.yaml 里配置的 tlsStore 弹药库里翻找。因为它手里攥着 *.k3s.besthomelab.tech 的泛域名证书,所以它能瞬间拆开所有在这个域名下的加密信封,看清里面的真实请求(如 /dashboard)。

  3. eBPF 的“量子隧道” (Bypass iptables): 传统的网关在把流量转给 Pod 时,会经过 Linux 内核极其厚重的 iptables 规则链,像是在满是红绿灯的闹市区开车。而 Cilium 利用 eBPF 黑科技,直接在网卡接收到数据包的瞬间(TC/XDP 层)就决定了它的去向,像是在内核里修了一条量子隧道,将数据包“瞬移”到了目标容器,大幅降低了七层网关的响应延迟。


📋 架构师的日常巡检:如何确认大门常开?

Section titled “📋 架构师的日常巡检:如何确认大门常开?”

如果有一天域名突然打不开了,作为赛博总监工,你需要按照这张拓扑图反向破案:

Terminal window
# 1. 查大门:确认 VIP 是否有人领薪水 (局域网广播是否正常)
# 预期看到哪台 Master 正在抢占持有 10.0.10.100 的 Lease
kubectl get lease -n kube-system | grep traefik
# 2. 查钥匙:确认 Traefik 是否拿到了 Cert-manager 的证书弹药
# 检查日志中是否有证书加载相关的 Error
kubectl logs -n traefik -l app.kubernetes.io/name=traefik --tail=100
# 3. 查隧道:确认 Cilium 的 eBPF 路由是否通畅
# 运行 Cilium 自检,确保 kubeProxyReplacement 状态为 True
cilium status

Last updated: