Files
Deploy-Laboratory/ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml
jack be97836e0d chore: 清理调试脚本并收敛到 Ansible 流程
移除已废弃的调试/验证脚本与空目录,统一文档与脚本说明到 ansible-playbook 的部署方式,避免失效引用和误用路径。

Made-with: Cursor
2026-03-23 19:18:55 +08:00

84 lines
4.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 03-03 Traefik Dashboard + ACME唯一清单推荐
# =============================================================================
# 含HelmChartConfiglocal-path 持久化 /data + ACME Cloudflare DNS-01 + Dashboard
# + IngressRoute/dashboard、/api
# acme.json 与 chart persistence 均落在 /dataPod 重建后证书仍在nodeSelector 须固定单节点RWO
#
# 部署kubectl apply -f ansible/files/traefik-dashboard-acme/traefik-dashboard-acme.yaml
# 使用前:替换 <YOUR_REAL_EMAIL>、nodeSelector 主机名Secret cloudflare-api-token 已存在(见 03-02
# 全集群只能有一份 HelmChartConfig metadata.name=traefik
#
# --- 不要 Dashboard 时 ---
# 删除文末 IngressRoute 整段;并在 valuesContent 中删掉 ports可选、--api.dashboard、--api.insecure
#
# --- 临时不用持久化(不推荐)---
# 将 persistence.enabled 改为 false 并删掉 persistence 下其余字段(证书可能随 Pod 丢失)
# =============================================================================
---
apiVersion: helm.cattle.io/v1 # HelmChartConfig 所在的 API 版本
kind: HelmChartConfig # HelmChartConfig给 K3s/Helm 注入 values 的资源
metadata: # 资源标识信息
name: traefik # chart 对应的 name需要与 Traefik chart/约定一致)
namespace: kube-system # Traefik 通常运行在 kube-system
spec: # 该资源要注入 chart 的配置
valuesContent: |- # 以“字符串形式的 YAML”注入到 Helm chart values由 chart 解析)
ports: # 暴露 entrypoints 给集群入口
web: # HTTP entrypoint
expose: true # 允许暴露 web
websecure: # HTTPS entrypoint
expose: true # 允许暴露 websecure
persistence: # chart 持久化配置:为 /data 挂载 PVC
enabled: true # 开启持久卷
name: data # chart 创建/引用的卷名PVC 等)
accessMode: ReadWriteOnce # RWO同一时间只能在一个节点挂载
size: 512Mi # 请求容量local-path 会据此创建本地卷)
storageClass: local-path # 使用 K3s 的 local-path-provisioner
path: /data # 容器内挂载目录(与 acme.storage 一致)
additionalArguments: # 额外传给 Traefik 的 CLI 参数
- "--api.dashboard=true" # 打开 dashboard 功能
- "--api.insecure=true" # k8s允许 dashboard 在入口可用(注意安全)
- "--log.level=INFO" # 日志级别
- "--certificatesresolvers.cloudflare.acme.dnschallenge.resolvers=1.1.1.1:53,1.0.0.1:53" # DNS 解析器列表(用于 DNS-01
- "--certificatesresolvers.cloudflare.acme.email=<YOUR_REAL_EMAIL>" # ACME 注册邮箱
- "--certificatesresolvers.cloudflare.acme.storage=/data/acme.json" # 证书与账户存储(容器内 /data
# - "--certificatesresolvers.cloudflare.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory" # 测试用,上线前删除
- "--certificatesresolvers.cloudflare.acme.dnschallenge.provider=cloudflare" # DNS-01 providercloudflare
- "--certificatesresolvers.cloudflare.acme.dnschallenge.propagation.delayBeforeChecks=600" # DNS-01 propagation 等待秒数
- "--ping=true" # 开启 ping healthcheck
- "--ping.entryPoint=websecure" # ping 使用 websecure(HTTPS) entrypoint
- "--entrypoints.web.proxyProtocol.trustedIPs=192.168.2.0/24" # web entrypoint 信任的代理网段
- "--entrypoints.websecure.proxyProtocol.trustedIPs=192.168.2.0/24" # websecure entrypoint 信任的代理网段
env: # 环境变量注入
- name: CF_DNS_API_TOKEN # 供 Traefik 使用的 Cloudflare Token 环境变量名
valueFrom: # 从 Secret 挂载
secretKeyRef: # Secret 引用方式
name: cloudflare-api-token # Secret 名
key: api-token # Secret 内 key
nodeSelector: # 将 Traefik Pod 固定到指定节点(避免 local-path RWO 迁移导致丢数据)
kubernetes.io/hostname: ylc61 # 目标节点主机名
---
# 显式 IngressRoute与 03-01 一致,确保 /dashboard 可达; Helm ingressRoute.dashboard 在 K3s chart 中未必生效)
apiVersion: traefik.io/v1alpha1 # IngressRoute API 版本
kind: IngressRoute # Traefik 路由 CRD
metadata: # IngressRoute 元信息
name: traefik-dashboard # 路由名称
namespace: kube-system # 命名空间
spec: # IngressRoute 规则
entryPoints: # 入口点列表
- web # 使用 web(HTTP) 入口
routes: # 路由规则列表
- match: PathPrefix(`/dashboard`) || PathPrefix(`/api`) # 匹配 Dashboard/API 路径前缀
kind: Rule # 规则类型
services: # 后端服务
- name: api@internal # Traefik 内置 API 服务
kind: TraefikService # 服务类型