1. 说明
项目地址: cert-manager
CertManager 需要以下镜像:
1
2
3
quay.io/jetstack/cert-manager-cainjector:v1.9.1
quay.io/jetstack/cert-manager-controller:v1.9.1
quay.io/jetstack/cert-manager-webhook:v1.9.1
2. 导入资源
由于 CertManager 的配置过于庞大,不便于在此展示,可将文件 conf/cert-manager.yaml 推送到控制节点,再使用 kubectl apply -f cert-manager.yaml
导入资源。
或者你可以使用以下命令在线导入资源:
1
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.9.1/cert-manager.yaml
导入完成后使用以下命令查看结果:
1
kubectl get pods -n cert-manager
3. 创建证书
此次测试需要有一个域名,同时需要 Cert-Manager 支持此域名服务商的 DNS API。 |
3.1. 创建ApiKey
添加 Cloudflare Api 到 Secret 下
1
2
3
4
5
6
7
8
9
apiVersion: v1
kind: Secret
metadata:
name: secret-cert-manager-cloudflare-api-token
namespace: cert-manager
type: Opaque
stringData:
# 需要修改为实际数据
api-token: '<请填写你的 CloudFlare 账户的Token值>' (1)
其中:
1 | 此处填写你 CloudFlare API Token |
将此文件保存至 api.yaml
后执行 kubectl apply -f api.yaml
即可。
3.2. 绑定 Issuer
将 Cloudflare API 绑定至 ClusterIssuer。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: issuer-dns01-cloudflare-1
namespace: cert-manager
spec:
acme:
privateKeySecretRef:
name: lets-encrypt-dns01
server: https://acme-v02.api.letsencrypt.org/directory
solvers:
- dns01:
cloudflare:
email: '<请填写你的 CloudFlare 账户邮箱信息>' (1)
apiTokenSecretRef:
name: secret-cert-manager-cloudflare-api-token (2)
key: api-token
1 | 此处填写你的 Cloudflare Email |
2 | 关联的 Cloudflare Token |
将此文件保存至 issuer.yaml
后执行 kubectl apply -f issuer.yaml
即可。
3.3. 签发证书
接下来使用测试域名 d7z.net
签发证书。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: 'cert-d7z-net'
namespace: cert-manager
spec:
secretTemplate:
annotations:
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops" (1)
reflector.v1.k8s.emberstack.com/reflection-allowed: "true" (2)
reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true" (3)
reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops" (4)
privateKey:
algorithm: RSA
size: 4096
dnsNames: (5)
- 'd7z.net'
- '*.d7z.net' # 通用公开地址
- '*.pages.d7z.net' # gitlab pages 相关地址
issuerRef:
kind: ClusterIssuer
name: issuer-dns01-cloudflare-1 (6)
secretName: 'tls-pub-d7z'
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: 'cert-internal-d7z-net'
namespace: cert-manager
spec:
secretTemplate:
annotations:
reflector.v1.k8s.emberstack.com/reflection-allowed-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops" (1)
reflector.v1.k8s.emberstack.com/reflection-allowed: "true" (2)
reflector.v1.k8s.emberstack.com/reflection-auto-enabled: "true" (3)
reflector.v1.k8s.emberstack.com/reflection-auto-namespaces: "kube-system,default,core-system,core-middleware,core-app,share-app,monitor-app,dev-ops" (4)
privateKey:
algorithm: RSA
size: 4096
dnsNames: (5)
- 'internal.d7z.net'
- '*.internal.d7z.net' # 通用私有地址
issuerRef:
kind: ClusterIssuer
name: issuer-dns01-cloudflare-1 (6)
secretName: 'tls-pri-d7z'
其中:
1 | reflector 相关配置:管理的命名空间 |
2 | reflector 相关配置:允许镜像 |
3 | reflector 相关配置:自动镜像 |
4 | reflector 相关配置:自动镜像的命名空间 |
5 | 配置证书下的 dns.01 内容,可添加通配符证书 |
6 | 选择对应的 Issuer |
3.4. 验证
执行以下命令,查看对应证书的签发状态
1
2
# 查看证书签发状态
kubectl get certificate -n cert-manager
如果 READY
项为 True
,则表明证书签发成功。
1
2
3
NAME READY SECRET AGE
cert-d7z-net True tls-pub-d7z 18h
cert-internal-d7z-net True tls-pri-d7z 18h
注意,需要填充的内容必须真实有效,否则将导致签发失败。如果没有可用的域名可参考 笔记 中的自签名证书。 |