要将zhuty.com指向hugo-nfs-svc并配置HTTPS以及自动更新Certbot证书,您需要执行以下步骤:

  1. 创建一个Kubernetes Secret以存储您的TLS证书和密钥:

    kubectl create secret tls zhuty-tls --key /path/to/tls.key --cert /path/to/tls.crt
    

    请将/path/to/tls.key/path/to/tls.crt替换为您的TLS证书和密钥的路径。

  2. 创建一个Traefik IngressRoute以将zhuty.com指向hugo-nfs-svc

    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: zhuty
      namespace: default
    spec:
      entryPoints:
        - websecure
      routes:
        - match: Host(`zhuty.com`)
          kind: Rule
          services:
            - name: hugo-nfs-svc
              port: 80
      tls:
        secretName: zhuty-tls
    

    请确保将name字段设置为您选择的名称,将namespace字段设置为您选择的命名空间,将match字段设置为您的域名,将nameport字段设置为您的服务名称和端口。

  3. 部署Traefik Ingress Controller:

    kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.5/examples/k8s/traefik-deployment.yaml
    
  4. 安装Certbot:

    sudo apt-get update
    sudo apt-get install certbot
    
  5. 生成Let’s Encrypt证书:

    sudo certbot certonly --manual --preferred-challenges dns -d zhuty.com
    

    然后按照提示在DNS中添加TXT记录,并等待DNS记录生效。完成后,Certbot将生成证书,并将其保存在/etc/letsencrypt/live/zhuty.com/目录中。

  6. 创建一个Kubernetes Secret以存储Certbot证书和密钥:

    kubectl create secret tls zhuty-tls --key /etc/letsencrypt/live/zhuty.com/privkey.pem --cert /etc/letsencrypt/live/zhuty.com/fullchain.pem
    
  7. 创建一个Certificate资源以自动更新Certbot证书:

    apiVersion: cert-manager.io/v1
    kind: Certificate
    metadata:
      name: zhuty-tls
      namespace: default
    spec:
      secretName: zhuty-tls
      dnsNames:
        - zhuty.com
      privateKeySecretRef:
        name: zhuty-tls
      issuerRef:
        name: letsencrypt-prod
        kind: ClusterIssuer
    
  8. 创建一个ClusterIssuer以自动更新Certbot证书:

    apiVersion: cert-manager.io/v1
    kind: ClusterIssuer
    metadata:
      name: letsencrypt-prod
    spec:
      acme:
        email: your-email@example.com
        server: https://acme-v02.api.letsencrypt.org/directory
        privateKeySecretRef:
          name: letsencrypt-prod
        solvers:
          - dns01:
              cloudflare:
                email: your-email@example.com
                apiKeySecretRef:
                  name: cloudflare-api-key
                  key: api-key
    

不配置 dns 服务器时: solvers: [] 请确保将email字段设置为您的电子邮件地址,并将solver设置为您的DNS提供商。此处以Cloudflare为例,请将emailapiKeySecretRef.key字段设置为您的Cloudflare电子邮件地址和API密钥。

完成上述步骤后,Traefik Ingress Controller将自动配置HTTPS并请求证书。证书将存储在Kubernetes Secret中,并且将自动更新。