ssl配置
OK,那我们可以在 Kubernetes 里给你的 CDN 边缘 Nginx 加上 HTTPS 支持,并且用 Let’s Encrypt 自动签发和续期证书。 在 K8s 里这通常是通过 cert-manager 来做的。
1. 原理概述
- cert-manager 会在集群里自动申请/续期 Let’s Encrypt 证书
- Nginx 直接挂载这个证书文件,就能跑 HTTPS
- 证书存储在 Secret,由 cert-manager 维护,不需要你手动更新
2. 部署 cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.15.1/cert-manager.yaml
3. 配置 Let’s Encrypt Issuer
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: your-email@example.com # 用你的邮箱
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: traefik
如果你用的是外部 LoadBalancer + NodePort 而不是 Ingress,需要改用
http01+ NodePort 的 solver 配置。
4. 为 CDN Nginx 申请证书
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: cdn-cert
namespace: default
spec:
secretName: cdn-tls
duration: 2160h # 90天
renewBefore: 360h # 提前15天续期
dnsNames:
- cdn.example.com # 你的 CDN 域名
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
5. 修改 Nginx DaemonSet 使用证书
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 443
volumeMounts:
- mountPath: /etc/nginx/conf.d
name: nginx-conf
- mountPath: /etc/letsencrypt/live
name: tls-certs
readOnly: true
volumes:
- name: nginx-conf
configMap:
name: nginx-config
- name: tls-certs
secret:
secretName: cdn-tls
6. Nginx 配置(支持 HTTPS)
server {
listen 443 ssl;
server_name cdn.example.com;
ssl_certificate /etc/letsencrypt/live/tls.crt;
ssl_certificate_key /etc/letsencrypt/live/tls.key;
proxy_cache my_cache;
proxy_pass http://origin-server;
proxy_set_header Host $host;
}
✅ 这样做的好处
- Let’s Encrypt 自动签发 & 续期
- 无需手动操作证书文件
- Nginx 重启后直接加载最新证书
- 可结合 多个 DaemonSet 在每个节点多副本运行
我可以帮你直接把 “多 DaemonSet + 缓存 + 自动 HTTPS” 合成一份完整可运行的 YAML 配置, 你 apply 一下就能跑起来。
要我直接帮你生成这份一体化的可用版本吗?这样你就能直接部署你的 CDN 边缘节点了。