cert-manager 企业证书自动化

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
ACME Automatic Certificate Management Environment 自动化证书管理协议
API Application Programming Interface 应用程序编程接口
ARN Amazon Resource Name AWS 资源名称,用于唯一标识资源
AWS Amazon Web Services 亚马逊云服务
CA Certificate Authority 证书颁发机构
CRD Custom Resource Definition Kubernetes 自定义资源定义
DNS Domain Name System 域名系统
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
IAM Identity and Access Management 身份与访问管理
IRSA IAM Roles for Service Accounts 通过 Kubernetes 服务账号关联 AWS IAM 角色
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
TLS Transport Layer Security 传输层安全协议
TXT Text record DNS 文本记录;这是记录类型名
URL Uniform Resource Locator 统一资源定位符,通常指访问地址

场景:为 Gateway 的订单域名自动签发/续期证书。前置:基线、公网 DNS 委派、DNS-01 出口;本例 EKS + Route 53 + ACME。内部域名使用企业 CA/Vault issuer,不要求公网 ACME 为私有名称签发。

身份与安装#

按 IRSA创建 cert-manager/cert-manager 专属角色。IAM 只允许指定 hosted zone 的 ChangeResourceRecordSets、ListResourceRecordSets,以及 GetChange 的 change ARN;指定 hostedZoneID 可避免全局 zone 查询。进一步用 Route 53 条件限制 TXT 与 _acme-challenge 记录名,包含通配符域名对应的挑战名称。Route 53 solver

export CM_VERSION='vREPLACE_VERSION'
helm show values oci://quay.io/jetstack/charts/cert-manager --version "$CM_VERSION" > cm-defaults.yaml

保存 cm-values.yaml,替换角色;使用完整 values,避免升级时丢失自定义项:

crds:
  enabled: true
replicaCount: 2
serviceAccount:
  name: cert-manager
  annotations:
    eks.amazonaws.com/role-arn: REPLACE_CERT_MANAGER_ROLE_ARN
webhook:
  replicaCount: 3
cainjector:
  replicaCount: 2
helm upgrade --install cert-manager oci://quay.io/jetstack/charts/cert-manager --version "$CM_VERSION" -n cert-manager --create-namespace -f cm-values.yaml --wait --timeout 10m
cmctl check api --wait=2m

给 webhook 配置跨节点放置、requests/limits/PDB,确认 API Server 到 webhook 的网络。可用性测试失败会阻塞 Certificate 等资源准入;不要通过全局关闭校验解决网络问题。Helm 安装

Hands-on:签发、验证、续期#

保存 orders-certificate.yaml,先用 ACME staging 验证 DNS 流程:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata: {name: acme-staging}
spec:
  acme:
    email: platform@example.com
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    privateKeySecretRef: {name: acme-staging-account}
    solvers:
      - selector:
          dnsZones: [staging.example.com]
        dns01:
          route53:
            region: REPLACE_REGION
            hostedZoneID: REPLACE_ZONE_ID
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata: {name: orders, namespace: edge}
spec:
  secretName: orders-tls
  dnsNames: [orders.staging.example.com]
  privateKey: {rotationPolicy: Always}
  issuerRef: {name: acme-staging, kind: ClusterIssuer}
kubectl create namespace edge --dry-run=client -o yaml | kubectl apply -f -
kubectl apply -f orders-certificate.yaml
kubectl -n edge get certificate,certificaterequest,orders.acme.cert-manager.io,challenges
kubectl -n edge wait --for=condition=Ready certificate/orders --timeout=10m
cmctl status certificate orders -n edge

staging 证书不受浏览器信任。流程通过后创建另一个 acme-production issuer,使用正式 ACME URL/独立 account Secret,再修改 Certificate 的 issuerRef;确认信任链正常才接入 Gateway,不以 curl -k 作为验收。

# 验证一次受控续期,不要循环调用触发 CA 限流。
cmctl renew orders -n edge
cmctl status certificate orders -n edge
openssl s_client -connect orders.staging.example.com:443 -servername orders.staging.example.com -verify_return_error </dev/null

记录 Secret resourceVersion、证书序列号和线上证书变化;不打印私钥。确认 Gateway 能热加载,续期期间订单无失败。GKE 使用 Cloud DNS solver + Workload Identity,角色仅绑定验证域对应 zone;不复制 AWS solver 配置。

企业运维#

告警覆盖证书剩余时间(例如 21/7 天)、Ready=False、Challenge 超时和 CA 限流。演练撤销预生产挑战 zone写权限,确认旧证书继续可用且续期失败告警;恢复权限后恢复签发。

平台限制谁能创建 ClusterIssuer/引用高权限 issuer;能申请任意域证书也是权限风险。备份 ACME account、issuer 配置和必要 TLS Secrets,私钥加密管理。卸载 cert-manager 前确认所有证书归属、续期替代方案和 CRD 生命周期,不能直接删除 CRD。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭