文档中心
K8s濡備綍鎵归噺瀵煎叆澶氫釜HTTPS璇佷功锛熻繍缁磋€侀笩鐨?绉嶅疄鎴樻柟妗?txt
时间 : 2025-09-27 16:22:42浏览量 : 4

在Kubernetes(K8s)集群中管理多个HTTPS证书是运维和DevOps工程师的常见需求。无论是微服务架构下的多域名场景,还是混合云环境中的跨集群证书同步,都需要高效、安全的证书导入方案。本文将通过实际案例,用大白话拆解3种主流方法,并附上避坑指南。
一、为什么需要批量导入证书?
想象一个电商平台:
- 主站用 `www.example.com`
- 支付模块用 `pay.example.com`
- 后台管理用 `admin.example.com`
每个子域名都需要独立的HTTPS证书(如Let's Encrypt或企业级CA签发)。手动一个个挂载证书到Pod或Ingress,不仅效率低,还容易出错。这时候就需要批量处理方案。
二、方案1:通过Secret统一管理证书
适用场景:证书数量较少(例如10个以内),且需频繁更新。
操作步骤
1. 将证书打包为Secret:
```bash
将PEM格式的证书和私钥存入Secret
kubectl create secret tls cert-pay --cert=pay.crt --key=pay.key -n default
```
2. 在Ingress中引用:
```yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: pay-ingress
spec:
tls:
- hosts:
- pay.example.com
secretName: cert-pay
指定Secret名称
rules:
- host: pay.example.com
http: {...}
优缺点
- ? 简单直接,K8s原生支持。
- ? 每个证书需单独创建Secret,大量证书时维护成本高。
三、方案2:使用ConfigMap +脚本自动化
适用场景:证书数量多(如50+),且需要动态更新。
实战案例
某金融公司有上百个子域名,每天自动续签证书。他们的做法:
1. 将证书存入ConfigMap:
将所有证书文件打包到一个目录certs/
kubectl create configmap certs-configmap --from-file=./certs/ -n default
2. 通过InitContainer挂载并同步到Pod:
volumes:
- name: certs-volume
configMap:
name: certs-configmap
initContainers:
- name: sync-certs
image: busybox
command: ["sh", "-c", "cp /certs/* /etc/nginx/ssl/"]
volumeMounts:
- mountPath: /certs/
name: certs-volume
- mountPath: /etc/nginx/ssl/
name: nginx-ssl
- ? 适合大规模批量管理,减少人工干预。
- ? ConfigMap有大小限制(默认1MB),超限需分片存储。
四、方案3:借助Cert-Manager实现全自动化
适用场景:需要自动签发、续期、分发证书的场景(推荐生产环境使用)。
核心流程
Cert-Manager是K8s的“证书管家”,它能:
1. 对接Let's Encrypt自动申请免费证书;
2. 监听Ingress规则自动创建对应Secret;
3. 到期前自动续签。
配置示例
```yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
定义CA来源(如Let's Encrypt)
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: admin@example.com
privateKeySecretRef:
name: letsencrypt-prod-key
solvers:
- http01:
ingress:
class: nginx
apiVersion: networking.k8s.io/v1
kind: Ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
关联ClusterIssuer
tls:
- hosts:
- pay.example.com
secretName: pay-tls-secret
Cert-Manager会自动创建此Secret
```
优缺点
- ? “一次配置终身受益”,彻底解放双手。
- ? 需要额外部署Cert-Manager组件,学习曲线略高。
五、避坑指南
1. 权限问题: Secret默认仅限同一Namespace访问,跨NS需手动授权;
2. 性能瓶颈: ConfigMap挂载大量文件可能导致Pod启动变慢;
3. 安全风险: Private Key必须严格限制访问权限(建议用`kubectl create secret generic`加密存储)。
****
根据业务规模选择合适方案:
- ?? *少量固定证书* → Secret手动管理;
- ?? *大规模动态需求* → Cert-Manager自动化;
- ?? *过渡期临时方案* → ConfigMap+脚本组合拳。
掌握这些方法后,你会发现K8s的HTTPS证书管理就像“收纳整理”——用对工具,杂乱无章的钥匙串也能变得井井有条!
TAG:k8s导入多个https证书,k8s ssl证书,k8s生成证书,k8s怎么部署