cert manager 介绍

cert-manager 是一个可信证书管理器,可以自动为您的集群中的服务提供SSL证书和可靠的基础设施。它执行以下任务:

自动通过类似 Let’s Encrypt 和 eigene 之类的 Certificate Authority (CA) 重新生成即将过期的证书。 为您的集群中的服务自动生成证书。 提供一个组件库,可用于自签名证书或其他CA API。 主要特性:

  • 自动生成/重新生成证书
  • 支持多种 CA 颁发的证书:Let’s Encrypt、自签名证书、HashiCorp Vault 等
  • 支持多种记录类型:DNS01、HTTP01、Kubernetes Ingress 等
  • 适用于支持 TLS 密码学的任何 Kubernetes API 对象
  • 具有密钥轮换功能,可无缝替换即将到期的证书
  • 流畅的 API,易于扩展

总的来说,cert-manager 可以让您将集群负载均衡的 TLS 实现自动化,减少运维负担。它主要用于解决基础设施中最常见的挑战:如何高可用地为应用提供 TLS 证书。

申请证书

接下来我来讲解本文的重点:如何使用 cert-manager 申请证书并配置于ingress上。

安装 cert-manager

执行 kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml 部署最新版本 cert-manager.

img.png

查看 pod状态

部署后,过一会执行 kubectl get pods -n cert-manager 查看pod状态。

img_1.png

创建 ClusterIssuer

创建 cert-manager 的crd ClusterIssuer.资源清单例子:

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod-http01
spec:
  acme:
    server: https://acme-v02.api.letsencrypt.org/directory
    email: <your_email_name@gmail.com>  #替换为您的邮箱名。
    privateKeySecretRef:
      name: letsencrypt-http01
    solvers:
    - http01: 
        ingress:
          class: nginx

配置ingress

创建 ClusterIssuer 后,我们就可以配置ingress了,实例清单如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tls
  annotations:
    kubernetes.io/ingress.class: "nginx"
    cert-manager.io/cluster-issuer: "letsencrypt-prod-http01"
spec:
  tls:
  - hosts:
    - <your_domain_name>        # 替换为您的域名。
    secretName: ingress-tls   
  rules:
  - host: <your_domain_name>    # 替换为您的域名。
    http:
      paths:
      - path: /
        backend:
          serviceName: <your_service_name>  # 替换为您的后端服务名。
          servicePort: <your_service_port>  # 替换为您的服务端口。

执行 kubectl get cert 可以看到证书顺利生成成功

接下来我们就可以通过 https://域名 来访问相关网站了。

小结

本文讲解了如何通过 cert-manager 配置证书来给 nginx-ingress使用,后面还会有 apisix-ingress 通过 cert-manager 配置的文章,敬请期待。

参考