Cert Manager在k8s中的使用
学习参考链接
https://www.bilibili.com/video/BV1qa411V7xs/?spm_id_from=333.337.search-card.all.click&vd_source=0372d3f32c3f19a6a2676a7529d6698a
https://tech.aufomm.com/how-to-use-cert-manager-on-kubernetes/
https://cert-manager.io/docs/installation/helm/
Cert Manager在k8s中的使用
helm repo add jetstack https://charts.jetstack.io
helm repo update
2. 从该颁发者请求证书
步骤一:定义一个证书颁发者(Issuer)
自签名颁发者示例
apiVersion: cert-manager.io/v1 kind: Issuer metadata: name: selfsigned-issuer namespace: default spec: selfSigned: {}
kubectl apply -f selfsigned-issuer.yaml
Let's Encrypt 颁发者示例
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-issuer spec: acme: # Let's Encrypt 的服务器地址 server: https://acme-v02.api.letsencrypt.org/directory email: your-email@example.com # 替换为你的邮箱,用于证书到期提醒 privateKeySecretRef: name: letsencrypt-key solvers: - http01: ingress:
class: nginx # 替换为你的 Ingress Controller 类型(如 nginx、traefik)
kubectl apply -f letsencrypt-issuer.yaml
CA 颁发者示例
申请到合法的CA证书,通过证书创建 secret
kubectl create secret tls -n cert-manager ca-key-pair --cert=ca.cert.pem --key=ca.key.pem
再使用这个 secret 来创建issuer, 这里创建一个cluster issuer, 因为想给全局使用
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: ca-issuer spec: ca: secretName: ca-key-pair
步骤二:从该颁发者请求证书
直接生成证书
#my-certificate.yaml
apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: my-certificate namespace: default spec: secretName: my-certificate-secret issuerRef: name: letsencrypt-issuer kind: Issuer commonName: my-domain.com dnsNames: - my-domain.com - www.my-domain.com
kubectl apply -f my-certificate.yaml
证书将被存到对应的secret资源 my-certifaicate-secret 中
b. 在 ingress 中使用此证书
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: my-ingress annotations: kubernetes.io/ingress.class: nginx spec: tls: - hosts: - my-domain.com secretName: my-certifaicate-secret rules: - host: your - domain.com http: paths: - path: / pathType: Prefix backend: service: name: your-service port: number: 80