ssl新闻资讯

文档中心

K8s濡備綍鎵归噺瀵煎叆澶氫釜HTTPS璇佷功锛熻繍缁磋€侀笩鐨?绉嶅疄鎴樻柟妗?txt

时间 : 2025-09-27 16:22:42浏览量 : 4

2K8s濡備綍鎵归噺瀵煎叆澶氫釜HTTPS璇佷功锛熻繍缁磋€侀笩鐨?绉嶅疄鎴樻柟妗?txt

在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怎么部署