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

推荐订阅源

博客园 - 【当耐特】
小众软件
小众软件
S
SegmentFault 最新的问题
GbyAI
GbyAI
量子位
爱范儿
爱范儿
L
LangChain Blog
Vercel News
Vercel News
A
About on SuperTechFans
腾讯CDC
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
月光博客
月光博客
博客园 - 聂微东
Stack Overflow Blog
Stack Overflow Blog
H
Help Net Security
U
Unit 42
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
V
Visual Studio Blog
美团技术团队
D
DataBreaches.Net
The GitHub Blog
The GitHub Blog
N
Netflix TechBlog - Medium

博客园 - 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