基本框架

This commit is contained in:
2026-03-21 04:36:06 +08:00
commit de1be1dbe5
125 changed files with 10302 additions and 0 deletions

View File

@@ -0,0 +1,117 @@
# 03-03-k3s Traefik Dashboard + ACME
> 按顺序完成 Traefik Dashboard 与 ACME 自动证书为后续应用GitLab、Homer 等)提供 HTTPS 能力。**ACME 配置与 03-03 已实机验证**2026-03K3s 4 节点、Cloudflare DNS-01、Let's Encrypt本页为 Dashboard + ACME 合并版。
## 前置条件
- 已完成 `01-02-k3s-工作节点.md`(集群与 Traefik 可用)
- 若使用 Cloudflare DNS 验证:域名托管在 Cloudflare已获取 API Token
## 1. 创建 SecretCloudflare API Token
```bash
kubectl -n kube-system create secret generic cloudflare-api-token \
--from-literal=api-token='<YOUR_CLOUDFLARE_API_TOKEN>'
```
> **Token 与 Secret 验证**:建议先按 `03-02-k3s-traefik-acme.md` 中「Token 与 Secret 验证」一节做 zone 查询与哈希对比,避免 ACME 失败时根因不明。
## 2. 完整 HelmChartConfigDashboard + ACME 合并)
> 说明Traefik 的 `HelmChartConfig` 只能有一份Dashboard 与 ACME 需合并在同一文件中。**ACME 配置基于 03-03 实机验证**(递归 DNS、propagation 等待、ping、PROXY protocol、nodeSelector
创建 `traefik-dashboard-acme.yaml`,推荐放入 K3s manifests 目录(路径同 03-02。**唯一真源**[HelmChartConfig 完整 YAML](../../ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml),复制后替换 `<YOUR_REAL_EMAIL>` 等占位符;或在仓库根执行 `kubectl apply -f ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml`
> 将 `<YOUR_REAL_EMAIL>` 替换为你的邮箱。正式上线前删除 `caserver` 该行即切回生产 Let's Encrypt。**ACME 排障**DNS 解析错误、证书解析器不存在等)见 `03-02-k3s-traefik-acme.md` 中「常见问题」与「排查」小节。
## 3. 部署(按实际路径选择其一复制执行)
```bash
# 默认路径
kubectl apply -f /var/lib/rancher/k3s/server/manifests/traefik-dashboard-acme.yaml
kubectl -n kube-system rollout status deploy/traefik
kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme || true
```
```bash
# 自定义 data-dir如 /storage
kubectl apply -f /storage/server/manifests/traefik-dashboard-acme.yaml
kubectl -n kube-system rollout status deploy/traefik
kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme || true
```
## 4. 验证
```bash
# Dashboard临时端口转发访问
kubectl -n kube-system port-forward deploy/traefik 9000:9000
# 浏览器打开 http://127.0.0.1:9000/dashboard/
# ACME 日志
kubectl -n kube-system logs deploy/traefik --tail=100 | grep -i acme
```
为 Ingress 使用 `tls` + `certResolver: cloudflare` 后,可通过 `curl -Iv https://你的域名` 检查证书是否由 Let's Encrypt 签发。
---
## 5. 使用 Tomcat + test05.jackadam.top 验证 HTTPS
> 本节给出一个**完整、独立**的 Tomcat 示例:包含 Deployment + Service + Ingress三段 YAML域名为 `test05.jackadam.top`。前提是已经按本页前文配置并成功加载了 ACME`traefik-acme.yaml` 或 `traefik-dashboard-acme.yaml`)。
1. **唯一真源**[`ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml`](../../ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml)。将其中域名改成你实际解析到集群入口 IP 的 FQDN。
2. 应用并查看 ACME 日志 + 访问验证:
```bash
kubectl apply -f ansible/files/traefik-dashboard-acme/tomcat-acme-test05.yaml
# 查看 ACME 相关日志(证书申请、签发情况)
kubectl -n kube-system logs deploy/traefik --tail=200 | grep -i acme || true
# 使用 --resolve 覆盖 DNS将域名指向入口 IP 验证 HTTPS
curl -Iv https://test05.jackadam.top --resolve test05.jackadam.top:443:192.168.2.61
```
若 ACME 与 Cloudflare 配置正确Traefik 日志中将看到针对 `test05.jackadam.top` 的证书申请与成功信息;`curl -Iv` 输出中应展示 Let's Encrypt 证书,浏览器访问 `https://test05.jackadam.top` 时会看到 Tomcat 默认首页。
---
## 6. 删除部署与文件
后续若改回 03-02仅 Dashboard或 03-03仅 ACME单独测试时需先删除本部署并删掉 manifest 文件。
1. **删除集群内 HelmChartConfig**
```bash
# 默认路径
kubectl delete -f /var/lib/rancher/k3s/server/manifests/traefik-dashboard-acme.yaml
kubectl -n kube-system rollout status deploy/traefik
```
```bash
# 自定义 data-dir如 /storage
kubectl delete -f /storage/server/manifests/traefik-dashboard-acme.yaml
kubectl -n kube-system rollout status deploy/traefik
```
2. **删除宿主机上的 manifest 文件**(否则 K3s 重启会再次加载):
```bash
# 默认路径
sudo rm -f /var/lib/rancher/k3s/server/manifests/traefik-dashboard-acme.yaml
```
```bash
# 自定义 data-dir如 /storage
sudo rm -f /storage/server/manifests/traefik-dashboard-acme.yaml
```
3. **可选**:若不再使用 ACME可删除 Secret`kubectl -n kube-system delete secret cloudflare-api-token`
## 7. 下一步
- `03-02-k3s-traefik-acme.md`:仅 ACME 不合并 Dashboard 时,或 TLS 矩阵test01test04验证、排障详情
- `03-04-k3s-cloudflare-tunnel-配置接入.md`:若需 Cloudflare Tunnel 接入
- `01-08-openwrt-haproxy.md`:如需调整外部端口/防火墙,参考 HAProxy 监听与转发(第 6 节)