Kubernetes 1.30.0 / cert-manager 1.17
该笔记将记录:在 Kubernetes Cluster 中,部署 cert-manager 组件,以及相关问题解决办法;
补充说明
- 作为系列部署资源,cert-manager 运行在 Kubernetes Cluster 中,并利用 CRD 来配置 CA 并请求证书;
- 部署方式:我们使用官方文档中推荐的 Helm Chart 方式,不再使用原始的 YAML 清单文件;
- 在部署 cert-manager 组件之后,需要创建代表 CA 的 Issuer 或 ClusterIssuer 资源;
- 在集群中,部署多个 cert-manager 实例会出现意外行为(以前 v1.3 文档提到过,该版本不清楚是否存在该限制);
部署 cert-manager 组件
安装组件:
helm repo add jetstack https://charts.jetstack.io helm repo update jetstack helm search repo jetstack/cert-manager | grep 1.17 helm pull jetstack/cert-manager --version v1.17.1 helm show values ./cert-manager-x.x.x.tgz > cert-manager-x.x.x.tgz.helm-values.yaml vim cert-manager-x.x.x.tgz.helm-values.yaml ... installCRDs: true ... Image Repository and Image Tag helm upgrade --install --namespace cert-manager --create-namespace \ cert-manager ./cert-manager-x.x.x.tgz -f cert-manager-x.x.x.helm-values.yaml
验证安装:
# cmctl check api --wait=2m The cert-manager API is ready # kubectl get pods --namespace cert-manager NAME READY STATUS RESTARTS AGE cert-manager-69c97bc646-zh7sf 1/1 Running 0 34m cert-manager-cainjector-77cc778cc8-rfxgq 1/1 Running 0 34m cert-manager-startupapicheck-x7tm5 0/1 Completed 0 34m cert-manager-webhook-6b8f8c55f4-7d8gk 1/1 Running 0 34m
签发测试:通过创建自签名证书,并检查证书是否能够自动签发(参考 Verifying the Installation 文档,以获取具体细节)我们有使用手工方式来验证(我们通过文档中提到的社区工具来验证,但是失败):
cat > test-resources.yaml <<EOF apiVersion: v1 kind: Namespace metadata: name: cert-manager-test --- apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: test-selfsigned namespace: cert-manager-test spec: selfSigned: {} --- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: selfsigned-cert namespace: cert-manager-test spec: dnsNames: - example.com secretName: selfsigned-cert-tls issuerRef: name: test-selfsigned EOF kubectl apply -f test-resources.yaml kubectl describe -n cert-manager-test certificates | grep -E '^Status:' -A 11 kubectl delete -f test-resources.yaml