Kubernetes(K8S) 自动申请证书https访问

1.安装Cert Manager

curl -sL \
https://github.com/cert-manager/cert-manager/releases/download/v1.13.2/cert-manager.yaml |\
sed -r 's/(image:.*):(v.*)$/-arm:/g' > cert-manager-arm.yaml
kubectl apply -f cert-manager-arm.yaml

我们可以通过 kubectl --namespace cert-manager get pods 来检查安装何时完成,直到所有 Pod 都处于 Running 状态。

这就完成了 cert-manager 的安装。

当然你也可以用helm安装。

2.配置 cert-manager 来使用 Let’s Encrypt

现在,我们需要配置 cert-manager 来通过 Let’s Encrypt 颁发证书。

创建一个名为 letsencrypt-issuer-production.yaml 的文件

踩坑记录:cert-manager 过旧的版本会报错(例如很多老文档里使用的alpha2版本),注意修改

apiVersion: cert-manager.io/v1   # 过旧的版本会报错,注意修改
kind: ClusterIssuer
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: [email protected]   # 你的邮箱
    # Name of a secret used to store the ACME account private key
    privateKeySecretRef:
      name: letsencrypt-prod
    # Enable the HTTP-01 challenge provider
    # HTTP-01 最简单,复杂网络环境实用 DNS-01 的方式,即检查DNS记录控制权
    solvers:
    - http01:
        ingress:
          class: traefik    # 使用的ingress controller
kubectl apply -f letsencrypt-issuer-production.yaml

3.更新网站的Ingress

节选Ingress部分(完整代码可参看 使用 Kubernetes部署博客):

kind: Ingress  # 创建 Ingress 资源
apiVersion: networking.k8s.io/v1
metadata:
  name: &name wordpress  # 引用锚点指定的名称
  namespace: default
  annotations:
    traefik.ingress.kubernetes.io/router.entrypoints: web,websecure  # Traefik 路由入口配置
    cert-manager.io/cluster-issuer: letsencrypt-prod   # (新增)
spec:
  rules:
    - host: blog.netvps.top  # 定义访问 Ingress 的域名
      http:
        paths:
          - path: /  # 匹配路径为/
            pathType: Prefix  # 路径类型为前缀匹配
            backend:
              service:
                name: *name  # 引用锚点指定的 Service 名称
                port:
                  name: http  # 引用锚点指定的端口名称
  tls:
  - hosts:
    - blog.netvps.top
    secretName: blog-netvps-top-tls   # (新增)
  • 所做的更改是添加了注解 cert-manager.io/cluster-issuer: letsencrypt-prod ,这告诉 traefik 创建证书时使用哪个发行者。
  • 其他唯一增加的是 tls: 块,这告诉 traefik 我们希望在主机 blog.netvps.top 上具有 TLS 功能,并且我们希望 TLS 证书文件存储在机密信息 blog-netvps-top-tls 中。

请记住,我们没有创建这些证书!Traefik 将读取这些配置并继续寻找机密信息。当找不到时,它会看到注释说我们想使用 letsencrypt-prod 发行者来获取它。由此,它将提出请求并为我们安装证书到机密信息之中!

kubectl get certificates 检查证书 :

大功告成!


清理证书:

清理证书和我们创建的机密信息:

kubectl delete certificates blog-netvps-top
kubectl delete secrets blog-netvps-top-tls


参考:

https://cloud.tencent.com/developer/article/1879588

分享你的喜爱

留下评论

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