k8s-3:cert-manager安装使用
一、安装这里使用helm安装的1.6.1版本先决条件安装 Helm 版本 3 或更高版本。安装受支持的 Kubernetes 或 OpenShift 版本。如果您在云平台上使用 Kubernetes,请阅读与 Kubernetes 平台提供商的兼容性1. 添加 Jetstack Helm 存储库:$ helm repo add jetstack https://charts.jetstack.io
一、安装
这里使用helm安装的1.6.1版本
先决条件
- 安装 Helm 版本 3 或更高版本。
- 安装受支持的 Kubernetes 或 OpenShift 版本。
- 如果您在云平台上使用 Kubernetes,请阅读与 Kubernetes 平台提供商的兼容性
1. 添加 Jetstack Helm 存储库:
|
|
2. 更新您本地的 Helm 图表存储库缓存
|
|
3.安装 CustomResourceDefinitions
cert-manager 需要一些 CRD 资源,可以使用手动安装,也可以在安装 Helm chart 时kubectl使用installCRDs选项。
|
|
选项 2:安装 CRD 作为 Helm 版本的一部分
要在 Helm 版本中自动安装和管理 CRD,您必须将--set installCRDs=true标志添加到 Helm 安装命令中。
在接下来的步骤中取消注释相关行以启用此功能。
请注意,如果您使用的是helm基于 Kubernetesv1.18或更低版本(Helm v3.2) 的版本,installCRDs则无法与 cert-manager 一起使用v0.16。有关更多详细信息,请参阅v0.16 升级说明。
4.安装证书管理器
要安装 cert-manager Helm chart,请使用Helm install 命令,如下所述。
|
|
--set ingressShim.defaultIssuerName=letsencrypt-prod --set ingressShim.defaultIssuerKind=ClusterIssuer:用于全自动TLS,在ingress.yaml中配置kubernetes.io/tls-acme: "true"后会自动创建证书
部署 cert-manager 后,您可以验证安装。
查看
|
|
验证
创建测试资源 kubectl apply -f test-resources.yaml
|
|
检查新创建证书的状态。您可能需要等待几秒钟,然后cert-manager才能处理证书请求。
|
|
清理测试资源。
|
|
输出 YAML
可以使用Helm 模板命令创建静态 YAML 清单,而不是使用 Helm 直接安装 cert-manager 。可以通过提供覆盖默认 Helm 值的标志来调整此静态清单:
|
|
卸载
警告:要卸载 cert-manger,您应该始终使用相同的安装过程,但相反。从静态清单或 Helm 安装 cert-manager 是否偏离以下过程可能会导致问题和潜在的损坏状态。请确保在卸载时遵循以下步骤以防止发生这种情况。
在继续之前,请确保已删除用户创建的所有 cert-manager 资源。您可以使用以下命令检查任何现有资源:
|
|
删除所有这些资源后,您就可以使用由您的安装方式确定的过程卸载 cert-manager
使用 Helm 卸载
从helm安装中卸载 cert-manager是运行安装过程的一种情况,相反,在kubectl 和上使用 delete 命令helm。
|
|
接下来,删除 cert-manager 命名空间:
|
|
最后,CustomResourceDefinitions 使用vX.Y.Z您安装的版本的链接删除证书管理 器:
警告:此命令还将删除已安装的 cert-manager CRD。
certificates.cert-manager.ioKubernetes 的垃圾收集器将删除所有证书管理器资源(例如资源)。
$ kubectl delete -f https://github.com/jetstack/cert-manager/releases/download/vX.Y.Z/cert-manager.crds.yaml
命名空间卡在终止状态
如果命名空间已被标记为删除,而没有先删除 cert-manager 安装,则命名空间可能会卡在终止状态。这通常是因为APIService资源仍然存在,但是 webhook 不再运行,因此不再可访问。要解决此问题,请确保您已正确运行上述命令,如果您仍然遇到问题,请运行:
$ kubectl delete apiservice v1beta1.webhook.cert-manager.io
二、配置
ACME配置
|
|
metadata.name 是我们创建的签发机构的名称,后面我们创建证书的时候会引用它
spec.acme.email 是你自己的邮箱,证书快过期的时候会有邮件提醒,不过 cert-manager 会利用 acme 协议自动给我们重新颁发证书来续期
spec.acme.server 是 acme 协议的服务端,我们这里用 Let’s Encrypt,这个地址就写死成这样就行
spec.acme.privateKeySecretRef 指示此签发机构的私钥将要存储到哪个 Secret 对象中,名称不重要
spec.acme.http01 这里指示签发机构使用 HTTP-01 的方式进行 acme 协议 (还可以用 DNS 方式,acme 协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
|
|
三、使用出现的问题以及解决方式
k8s集群是1.22.4的,使用这个会造成证书签发不成功
kubectl get certificate 查看READY对应的是False,好久都不会成功
解决方式:
在ingress.yaml加入以下配置
|
cert-manager.io/issue-temporary-certificate: "true" |
如:
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: third-platform-management
annotations:
acme.cert-manager.io/http01-edit-in-place: 'true'
cert-manager.io/cluster-issuer: letsencrypt-prod
cert-manager.io/issue-temporary-certificate: 'true'
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/redirect-entry-point: https
traefik.ingress.kubernetes.io/router.middlewares: zmj-prod-scheme@kubernetescrd
traefik.ingress.kubernetes.io/router.tls: 'true'
traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
spec:
tls:
- hosts:
- platfrom.zmarthome.cn
secretName: third-platform-management-tls
rules:
- host: platfrom.zmarthome.cn
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: third-platform-management
port:
number: 80
status:
loadBalancer: {}
更多推荐
所有评论(0)