k8s部署cert-manager实现证书自动化
cert-manager 是一个云原生证书管理开源项目,用于在 Kubernetes 集群中提供 HTTPS 证书并自动续期,支持 Let’s Encrypt, HashiCorp Vault 这些免费证书的签发。在Kubernetes集群中,我们可以通过 Kubernetes Ingress 和 Let’s Encrypt 实现外部服务的自动化 HTTPS。前言在Kubernetes集群中使用H
cert-manager 是一个云原生证书管理开源项目,用于在 Kubernetes 集群中提供 HTTPS 证书并自动续期,支持 Let’s Encrypt, HashiCorp Vault 这些免费证书的签发。在Kubernetes集群中,我们可以通过 Kubernetes Ingress 和 Let’s Encrypt 实现外部服务的自动化 HTTPS。
前言
在Kubernetes
集群中使用HTTPS
协议,需要一个证书管理器、一个证书自动签发服务,主要通过Ingress
来发布HTTPS
服务,因此需要Ingress Controller
并进行配置,启用HTTPS
及其路由。
开始部署cert-manager(yaml方式部署)
从cert-manager v0.11.0
开始,Kubernetes
的最低支持版本是v1.12.0
。仍在运行Kubernetes v1.11
或更低版本的用户应在安装cert-manager
之前升级到受支持的版本。
1、创建namespace
yaml文件中已经定义namespace
2、安装cert-manager
# Kubernetes 1.16+
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
# Kubernetes <1.16
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.1.0/cert-manager-legacy.yaml
# Kubernetes 1.15+
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.16.1/cert-manager.yaml
# Kubernetes <1.15
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.16.1/cert-manager-legacy.yaml
3、创建clusterissuer
为了配置cert-manager
以开始颁发证书,必须先创建Issuer
或ClusterIssuer
资源。这些资源代表特定的签名机构,并详细说明如何满足证书请求。Issuer只能用来签发自己所在namespace
下的证书,ClusterIssuer
可以签发任意namespace
下的证书,这里以ClusterIssuer
为例创建一个签发机构。
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-staging-v02.api.letsencrypt.org/directory
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
# 配置
cat <<EOF > cluster-issuer.yaml
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: 524719755@qq.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
EOF
说明:
metadata.name
创建的签发机构的名称,创建证书的时候会引用
spec.acme.email
邮箱,证书快过期的时候会有邮件提醒,不过cert-manager
会利用acme
协议自动给我们重新颁发证书来续期
spec.acme.server
acme
协议的服务端,由官方给出
spec.acme.privateKeySecretRef
指示此签发机构的私钥将要存储到哪个Secret
对象中
spec.acme.solvers.http01
指示签发机构使用HTTP-01
的方式进行acme
协议 (还可以用DNS
方式,acme
协议的目的是证明这台机器和域名都是属于你的,然后才准许给你颁发证书)
4、为域名创建certificate
(证书)
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: blog
namespace: default
spec:
secretName: blog-tls
issuerRef:
name: letsencrypt-prod
kind: ClusterIssuer
duration: 2160h
renewBefore: 360h
dnsNames:
- blog.ssgeek.com
说明:
spec.secretName
指示证书最终存到哪个 Secret
中spec.issuerRef.kind
值为 ClusterIssuer
说明签发机构不在本 namespace
下,而是在全局
spec.issuerRef.name
我们创建的签发机构的名称 (ClusterIssuer.metadata.name
)
spec.duration
证书过期时间
spec.renewBefore
在过期前自动更新
spec.dnsNames
指示该证书的可以用于哪些域名
官网链接: cert-manager.io.
更多推荐
所有评论(0)