K3s + NGINX Ingress Controller + Cert-Manager 最佳实践:从 HTTPS 头疼到自动化
最近在K3s 集群内搭建服务的时候,我深刻体会到一个问题:新增、管理和维护 HTTPS 证书真的是一件让人头疼的事情。尤其是当集群里有多个服务,有些服务需要独立域名和证书时,阿里云上手动申请下载证书,在集群内手动创建以及后续续期的替换,这个过程很折磨。
为了彻底解决这个问题,我总结了自己在 K3s 上使用 NGINX Ingress Controller + Cert-Manager 的实践经验,希望能帮你少踩坑、快速上手。
一、为什么要用 NGINX + Cert-Manager?
官方最佳实践:https://cert-manager.io/docs/tutorials/acme/nginx-ingress
NGINX Ingress Controller 透明、可控,配合 Cert-Manager,可以做到:
自动申请和续期 Let’s Encrypt 证书
统一管理 TLS 配置
换句话说,就是把手动 HTTPS 的“头疼”问题彻底交给 Kubernetes 和 Cert-Manager 自动化完成。
二、k3s集群部署
安装 k3s 并禁用 Traefik:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--disable=traefik" sh -
三、部署 NGINX Ingress Controller
我选择 Helm 安装 NGINX,因为:
可维护性高
支持多副本高可用
支持各种自定义资源配置
默认安装:
# 添加仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
# 拉取chart
helm fetch ingress-nginx/ingress-nginx --untar
# 部署ng控制器
helm install ingress-nginx ingress-nginx -n kube-system四、部署 Cert-Manager 并自动化 HTTPS
Cert-Manager 是我解决 HTTPS “头疼”的关键。它可以:
自动向 Let’s Encrypt 申请证书
自动续期
安装步骤:
# 部署cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.19.2/cert-manager.yaml配置 ClusterIssuer
这是我在生产环境里常用的配置:
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
email: xxx@xxx.com
server: https://acme-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx五、Ingress 配置示例
我通常用如下 Ingress 规范,既清晰又方便扩展:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: home
namespace: dev
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
ingressClassName: nginx
tls:
- hosts:
- gengbo.top
secretName: gengbo.top-tls
rules:
- host: gengbo.top
http:
paths:
- path: /
pathType: ImplementationSpecific
backend:
service:
name: home
port:
number: 80应用后,Cert-Manager 会自动去申请证书,生成 gengbo.top-tls Secret。
六、总结
从最开始“新增 HTTPS 服务很头疼”,到现在 K3s + NGINX + Cert-Manager 自动化管理证书,整个流程大大简化:
新增服务:只需要写一个 Ingress
自动 HTTPS:Cert-Manager 自动申请和续期
运维方便:统一管理证书、日志可查