星辰
星辰
Published on 2024-04-07 / 28 Visits
1
0

Cert Manager 申请 Cloudflare 域名证书

1 环境准备

在使用 cert-manager 申请证书前需要完成两点环境准备:

1.1 安装 helm 工具

helm 工具安装可参考文章 《Helm 快速安装》

1.2 部署 cert-manager 组件

在 kubernetes 中部署 cert-manager 组件可参考文章 《Kubernetes 中部署 Cert Manager 证书管理工具》

2 申请 Cloudflare 域名证书

cert-manager 在 DNS-01 的申请上默认集成了 Cloudflare DNS 的支持,可直接申请托管在 Cloudflare 上域名的证书。

2.1 创建 Cloudflare API Token

访问 Cloudflare Dashboard,在 User Profile > API Tokens > API Tokens 中完成 API Token 创建,创建涉及选型按照如下要求设置:

  • Permissions:

    • Zone - DNS - Edit

    • Zone - Zone - Read

  • Zone Resources:

    • Include - All Zones

随后保存生成的 Cloudflare API Token。

2.2 在 K8s 中创建 Cloudflare API Token 密钥

在 Kubernetes 中创建 Cloudflare API Token 密钥:

nano cloudflare-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: cloudflare-secret
  namespace: cert-manager
type: Opaque
stringData:
  api-token: <API Token>
kubectl apply -f cloudflare-secret.yaml

2.3 在 K8s 中创建 Cloudflare 的证书申请器

在 Kubernetes 中创建指向 Cloudflare API Token 密钥的证书申请器:

nano cloudflare-clusterissuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: cloudflare
spec:
  acme:
    privateKeySecretRef:
      name: cloudflare-letsencrypt
    email: youremail@example.com
    server: <https://acme-v02.api.letsencrypt.org/directory>
    solvers:
    - dns01:
        cloudflare:
          email: youremail@example.com
          apiTokenSecretRef:
            name: cloudflare-secret
            key: api-token
kubectl apply -f cloudflare-clusterissuer.yaml

2.4 在 K8s 中申请 Cloudflare 域名证书

在 Kubernetes 中创建使用 let’s encrypt DNS-01 认证的托管在 Cloudflare DNS 上域名的 TLS 证书:

nano cert-astralor-com.yaml
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: cert-astralor-com
spec:
  secretName: cert-astralor-com
  issuerRef:
    name: cloudflare
    kind: ClusterIssuer
    group: cert-manager.io
  dnsNames:
    - "astralor.com"
    - "*.astralor.com"
kubectl apply -f cert-astralor-com.yaml

创建后等待证书完成申请:

kubectl get certificates/cert-astralor-com -w

申请后证书状态如下所示:

image.png


Comment