惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
博客园 - Franky
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
L
LangChain Blog
博客园_首页
Recent Announcements
Recent Announcements
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Hackread – Cybersecurity News, Data Breaches, AI and More
爱范儿
爱范儿
博客园 - 叶小钗
博客园 - 【当耐特】
The Cloudflare Blog
J
Java Code Geeks
G
Google Developers Blog
云风的 BLOG
云风的 BLOG
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans

博客园 - Morya

不当心升级到 redis 7.4 怎么回到 valkey8 traefik学习 k8s 1.28 安装配置 knative-serving v1.15.2 + cert-manager v1.16.1 ssh端口映射玩法 golang echo group 用法的微妙注意点 使用docker最小化部署Git CI环境 使用mailpopbox构建个人独享EmailServer Influx cli cheetsheet 通过php docker快速验证简单代码 通过k8s service代理外部服务 run gitlab-runner in k8s K8S配置traefik ingressroutes支持TLS ucloud k8s部署traefik的forward-auth 使用nginx构建限频、限速、限并发的应用保护层 macos 更改罗技k810无线键盘的映射 - Morya - 博客园 C++11 thread condition_variable mutex 综合使用 goland scope pattern 设置 Go 1.11 Module 介绍 - Morya hustOJ 添加 golang 支持
使用 cert-manager 为 traefik 自动申请和续约 https 证书
Morya · 2025-03-24 · via 博客园 - Morya

使用 cert-manager 为 traefik 自动申请和续约 https 证书

安装 traefik, cert-manager 无法pull image?

可以考虑使用 docker run -d -P m.daocloud.io/docker.io/library/nginx 类似的办法,完成镜像加速下载。
同时,注意 cert-manager yaml args: 部分,有指定 --acme-http01-solver-image=acmesolver:v1.16.2指令中:

repository: quay.io/jetstack/cert-manager-acmesolver 必须替换为可以访问到的镜像地址。

traefik文档地址

步骤

  • 正确安装 cert-manager
  • 正确安装和配置 Traefik
    • 然后就可以在 Ingress / IngressRoute / HTTPRoute 中引用正常生成的 tls-secret.

关键注意点


apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: clusterissuer-letencrypt-to-ingress
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: xxx@dddd.com # do-not-use default email
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: clusterissuer-letsencrypt-secret
    # Enable the HTTP-01 challenge provider
    solvers:
      - http01:
          ingress:
            ingressClassName: traefik

在 certificate 中引用 clusterissuer

apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: headers-demo01
  namespace: default
spec:
  secretName: tls-demo01        # <===  Name of secret where the generated certificate will be stored.
  dnsNames:
    - "demo01.mydomain.tv"
  issuerRef:
    name: clusterissuer-letencrypt-to-ingress
    kind: ClusterIssuer

进而,就可以在 ingressroute 中使用 tls-demo01了。

apiVersion: traefik.io/v1alpha1  # supported from traefik v3
kind: IngressRoute
metadata:
  name: demo01.mydomain.tv
  namespace: default

spec:
  entryPoints:
    - websecure
    # - web
  tls:
    secretName: tls-demo06
  routes:
    - kind: Rule
      match: Host(`demo01.mydomain.tv`)
      services:
        - kind: Service
          name: some-service
          passHostHeader: true
          port: 80

  • 需要正确配置 issuer (不可以使用 acme-staging),否则,会导致 traefik 不加载此 tls-secret.
  • 需要注意合理的 namespace 否则会导致引用失败。

失败情况下的定位

几条非常有用的指令:

 kubectl get certificate
NAME             READY   SECRET       AGE
headers-demo06   True    tls-demo06   11m
kubectl describe certificate headers-demo06

output

  Type    Reason     Age   From                                       Message
  ----    ------     ----  ----                                       -------
  Normal  Issuing    11m   cert-manager-certificates-trigger          Issuing certificate as Secret does not exist
  Normal  Generated  11m   cert-manager-certificates-key-manager      Stored new private key in temporary Secret resource "headers-demo06-dqxth"
  Normal  Requested  11m   cert-manager-certificates-request-manager  Created new CertificateRequest resource "headers-demo06-1"
  Normal  Issuing    11m   cert-manager-certificates-issuing          The certificate has been successfully issued