k8s设置证书acme
0. 前置:安装 cert-manager & reflector
0.1 cert-manager(如果已经装了可以跳过)
1 | helm repo add jetstack https://charts.jetstack.io |
0.2 reflector(跨 namespace 同步 Secret 用)
建议装在
kube-system或单独的reflectorns,这里用kube-system举例。
1 | helm repo add emberstack https://emberstack.github.io/helm-charts |
1. ClusterIssuer:Let’s Encrypt + DNS-01 + ECC
文件名:
clusterissuer-letsencrypt-prod-ecc.yaml
请根据你的 DNS 提供商修改solvers那块示例(下面是 Cloudflare 模板)。
1 | apiVersion: cert-manager.io/v1 |
配套的 DNS token Secret(Cloudflare 示例):
1 | kubectl create secret generic cloudflare-api-token-secret \ |
应用 ClusterIssuer:
1 | kubectl apply -f clusterissuer-letsencrypt-prod-ecc.yaml |
确认 Ready:
1 | kubectl describe clusterissuer letsencrypt-prod-ecc |
2. Certificate:ECC 通配证书 + 自动加 reflector 注解
文件名:
certificate-wildcard-tls-ecc.yaml
⚠️ 把example.com换成你的真实域名。
这里利用secretTemplate直接给生成的 Secret 打上 reflector 的注解。
1 | apiVersion: cert-manager.io/v1 |
应用:
1 | kubectl apply -f certificate-wildcard-tls-ecc.yaml |
然后看状态:
1 | kubectl describe certificate wildcard-tls-ecc -n cert-manager |
当 Certificate 变成:
Type: Ready Status: True
并且 wildcard-tls-ecc-secret 里有 tls.crt / tls.key 时说明证书已经签好了。
再验证下同步情况(reflector 自动帮你镜像 Secret):
1 | kubectl get secret wildcard-tls-ecc-secret -n default |
能看到同名 Secret,就说明「全命名空间统一证书」已经实现 ✅。
3. Ingress-NGINX(或任意 Ingress Controller)
若你已经有 ingress controller,可以跳过安装,直接用第 4 步的 Ingress。
安装 ingress-nginx 示例:
1 | helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx |
4. 所有业务 Namespace 统一使用这张证书的 Ingress 示例
文件名示例:
ingress-app-a.yaml
⚠️ 换掉:
namespace: app-ahost: app-a.example.comservice.name: app-a-svc
只要 reflector 已经同步 Secret,这个 Ingress 在任何命名空间都可以直接用同一个 secretName:
1 | apiVersion: networking.k8s.io/v1 |
另外一个命名空间 app-b 直接复制一份,改 namespace / host / service 就行,secretName 仍然用 wildcard-tls-ecc-secret。
5. DNS 解析(最后一步)
在你的 DNS 提供商那里,给这张通配证书配置解析即可:
- Ingress LB 对外 IP:假设
1.2.3.4 - 或对外域名:比如
lb-xxxx.cloudprovider.com
方案 A:IP(A 记录)
| 主机记录 | 类型 | 值 |
|---|---|---|
| @ | A | 1.2.3.4 |
| * | A | 1.2.3.4 |
方案 B:LB 域名(CNAME)
| 主机记录 | 类型 | 值 |
|---|---|---|
| @ | CNAME | lb-xxxx.cloudprovider.com |
| * | CNAME | lb-xxxx.cloudprovider.com |
这样:
app-a.example.comapp-b.example.com- ……
都会走同一个 Ingress Controller,用同一张 *.example.com 的 ECC 证书。
总结一下这套“最终版本”
你完成下面 3 件事,这个方案就完全落地了:
ClusterIssuer + Certificateletsencrypt-prod-eccwildcard-tls-ecc(ECC + 通配 + secretTemplate 里带 reflector 注解)
reflector 安装 OK,且自动把
wildcard-tls-ecc-secret同步到所有业务 ns所有 Ingress 的
spec.tls.secretName统一写wildcard-tls-ecc-secret- DNS 把
*.你的域名指到 Ingress LB
- DNS 把
1.k8s本地集群方案对比
2.PVE8升9
3.PVE虚拟机磁盘扩容
4.js watermark实现水印效果
5.libnesec.so反调试机制绕过
6.十大CI/CD工具对比
7.Python 遭遇 ProxyError 问题记录
8.20种开发运维工具