安装 cert-manager

参考官方文档: https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html

介绍几种安装方式,不管是用哪种我们都先规划一下使用哪个命名空间,推荐使用 cert-manger 命名空间,如果使用其它的命名空间需要做些更改,会稍微有点麻烦,先创建好命名空间:

kubectl create namespace cert-manager

cert-manager 部署时会生成 ValidatingWebhookConfiguration 来注册 [ValidatingAdmissionWebhook])(ValidatingAdmissionWebhook) 来实现 CRD 校验,而ValidatingWebhookConfiguration 里需要写入 cert-manager 自身校验服务端的证书信息,就需要在自己命名空间创建 ClusterIssuerCertificate 来自动创建证书,创建这些 CRD 资源又会被校验服务端校验,但校验服务端证书还没有创建所以校验请求无法发送到校验服务端,这就是一个鸡生蛋还是蛋生鸡的问题了,所以我们需要关闭 cert-manager 所在命名空间的 CRD 校验,通过打 label 来实现:

kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true

使用原生 yaml 资源安装

直接执行 kubectl apply 来安装:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.11.0/cert-manager.yaml

使用 kubectl v1.15 及其以下的版本需要加上 --validate=false,否则会报错。

使用 Helm 安装

安装 CRD:

kubectl apply -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml

添加 repo:

helm repo add jetstack https://charts.jetstack.io
helm repo update

执行安装:

helm install \
--name cert-manager \
--namespace cert-manager \
--version v0.11.0 \
jetstack/cert-manager

校验是否安装成功

检查 cert-manager 相关的 pod 是否启动成功:

$ kubectl get pods --namespace cert-manager
NAME READY STATUS RESTARTS AGE
cert-manager-cainjector-74bb68d67c-4vplr 1/1 Running 0 101s
cert-manager-f7f8bf74d-j4hcz 1/1 Running 0 101s
cert-manager-webhook-665df569b5-5p6x8 1/1 Running 0 101s