k8s使用traefik ACME自动配置证书
k8s使用traefik ACME自动配置证书

背景与核心痛点:在 Kubernetes(K8s)生产级集群中,为各个业务 Ingress 域名申请和维护 HTTPS 证书往往流程繁琐。传统方式常因证书到期忘记续签导致服务中断。通过 Helm 部署 Traefik Ingress Controller 并开启原生 ACME 证书解析器,配合 Cloudflare DNS Challenge 校验与 Let's Encrypt 证书中心,可实现泛域名与各级子域名 SSL 证书的零人工干预全自动签发与无感平滑续期。
目录
- 架构设计与准备工作
- 配置 Cloudflare API 凭证 Secret
- 定制 Traefik Helm values.yaml
- Helm 部署 Traefik Ingress Controller
- 部署 WordPress 容器服务验证 HTTPS
- 证书签发结果验证与运维要点
架构设计与准备工作
- 集群包管理器:添加官方 Traefik Helm 仓库:
helm repo add traefik https://helm.traefik.io/traefik helm repo update - DNS Challenge 优势:相比 HTTP-01 验证必须开放 80 端口且无法签发泛域名,DNS-01 验证借助 Cloudflare 域名 API 可直接签发
*.yourdomain.com泛域名证书,且无需暴露集群内网环境。
配置 Cloudflare API 凭证 Secret
- 登录 Cloudflare 控制台,进入 My Profile -> API Tokens -> 查看 Global API Key(或创建具备 DNS 编辑权限的专用 Token)。
- 在 K8s 集群中创建凭证 Secret:
kubectl create secret generic cloudflare-credentials \ --from-literal=globalApiKey="你的Cloudflare全局APIKey" \ -n kube-system
定制 Traefik Helm values.yaml
下载官方默认 values.yaml 并针对 ACME 证书自动申请进行关键字段配置:
# 开启 ACME 证书解析器参数
additionalArguments:
- "--certificatesresolvers.letsencrypt.acme.email=admin@yourdomain.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json"
- "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.letsencrypt.acme.dnschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.dnschallenge.provider=cloudflare"
# 注入 Cloudflare 鉴权环境变量
env:
- name: CF_API_EMAIL
value: "your-email@gmail.com"
- name: CF_API_KEY
valueFrom:
secretKeyRef:
name: cloudflare-credentials
key: globalApiKey
# 挂载持久化存储用于存储 acme.json
persistence:
enabled: true
name: data
size: 1Gi
path: /data
# 暴露 Dashboard 并开启 TLS 默认解析器
ingressRoute:
dashboard:
enabled: true
💡 防踩坑提示:若容器报
acme.json file has invalid permissions错误,需确保 Pod 安全上下文配置了正确的存储权限(如securityContext.fsGroup: 65532)。
Helm 部署 Traefik Ingress Controller
执行 Helm 安装或升级命令:
helm upgrade --install traefik traefik/traefik -f values.yaml -n kube-system
检查 Pod 运行状态:
kubectl get pods -n kube-system -l app.kubernetes.io/name=traefik
部署 WordPress 容器服务验证 HTTPS
使用 Bitnami Helm 仓库部署示例应用验证自动签发链路:
1. 添加 Bitnami 仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
2. 定制 Ingress 配置并部署
在 WordPress 的 values.yaml 中启用 Ingress 并指定 Traefik TLS 解析器:
ingress:
enabled: true
ingressClassName: traefik
hostname: blog.yourdomain.com
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
traefik.ingress.kubernetes.io/router.tls.certresolver: letsencrypt
tls: true
安装实例:
helm install wordpress bitnami/wordpress -f values.yaml
证书签发结果验证与运维要点
- 查看 Traefik 实时日志:
日志中显示kubectl logs -n kube-system -l app.kubernetes.io/name=traefik -fLegocert: [INFO] [blog.yourdomain.com] acme: Validations succeeded即代表 Cloudflare DNS 验证成功。 - 浏览器访问校验:浏览器打开
https://blog.yourdomain.com,地址栏显现权威 Let's Encrypt 绿色有效安全锁,证书期限自动维持在 90 天内动态续期。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 zszweb
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果