Let’s Encrypt的免费证书真是慈善行为,可惜周期只有90天,所以每隔一两个月就要申请证书续期,还要把证书再安装导入一遍,真是麻烦。一不小心逾期,网站就会崩出不安全的提示,实在是受不了。

cert-manager是kubernetes环境下的证书管理工具,可以为多个域名自动申请、安装证书,到期后能够自动续期,让免费证书的使用变得非常轻松自在。

首先,你应该已经安装好了ingress-nginx控制器,并在域名服务器上给你的网站分配了域名。

安装cert-manager

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.13.1/cert-manager.yaml

然后,新建和保存staging-issuer.yaml文件

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-staging
spec:
  acme:
    # The ACME server URL
    server: https://acme-staging-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: user@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-staging
    # Enable the HTTP-01 challenge provider
    solvers:
      - http01:
          ingress:
            ingressClassName: nginx

以上代码的目的,是申请let’s encrypt 的临时发行。其中email需要改为你的邮件地址。

然后运行

kubectl apply -f ./staging-issuer.yaml

如果运行正常,说明证书临时发行没有问题,接下来就可以注册正式发行。

新建并保存production-issuer.yaml

apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
  name: letsencrypt-prod
spec:
  acme:
    # The ACME server URL
    server: https://acme-v02.api.letsencrypt.org/directory
    # Email address used for ACME registration
    email: user@example.com
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    solvers:
      - http01:
          ingress:
            ingressClassName: nginx

注意把email改为自己的邮件地址

然后

kubectl apply -f ./production-issuer.yaml

完成正式发行注册。

接下来部署ingress并申请证书,新建和保存文件ingress-tls.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: kuard
  annotations:
    cert-manager.io/issuer: "letsencrypt-staging"

spec:
  ingressClassName: nginx
  tls:
  - hosts:
    - example.example.com
    secretName: quickstart-example-tls
  rules:
  - host: example.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: kuard
            port:
              number: 80

其中hosts和host都要改为你的网站域名,name改为你想要的ingress名字,secretname改成你想要的secret名字,service 下面的name改为ingress后台实际映射的其他service名字。

然后

kubectl apply -f ./ingress-tls.yaml

部署ingress,在这个过程中,cert-manager会自动向let’s encrypt给你的网站申请一个证书,并安装到ingress中。

接下来,可以检查一下证书的部署情况

kubectl get certificate

kubectl describe certificate 证书名称

最后,用https访问你的网站,检查一下是不是搞定了。

参考:

https://cert-manager.io/docs/tutorials/acme/nginx-ingress/

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注