如何安装通配符让我们在 Vultr Kubernetes 引擎上加密 SSL 证书

一、介绍

本文解释了如何在 Vultr Kubernetes 引擎上安装通配符 Let’s Encrypt SSL 证书。

通配符 SSL 证书是可以保护无限子域的单个 SSL 证书。Let’s Encrypt是一个免费的证书颁发机构,提供免费的SSL证书。

示例应用程序是一个 Nginx Web 服务器,它通过 Kubernetes 服务在端口 80 上提供 HTTP 流量。Nginx 入口控制器使用通配符 Let’s Encrypt SSL 证书通过 Vultr 负载均衡器处理 HTTPS 流量。

二、准备工作

在开始之前,您应该:

  • 部署 Vultr Kubernetes 集群。
  • 配置,,并在您的计算机中。kubectlhelmgit
  • 有一个域名。

三、安装 Nginx 入口控制器

  1. 安装 NGINX 入口控制器
    helm upgrade --install ingress-nginx ingress-nginx --repo https://kubernetes.github.io/ingress-nginx --namespace ingress-nginx --create-namespace
    
  2. 转到负载均衡器仪表板并获取新创建的负载均衡器的 IP 地址。这是为 NGINX 入口控制器创建的负载均衡器。
  3. (可选)使用以下命令获取负载均衡器的 IP 地址。IP 地址位于“外部 IP”列中。
    kubectl get services/ingress-nginx-controller -n ingress-nginx
    

 四、将域名服务器更改为 Vultr DNS

  1. 访问https://www.vultr.com/docs/vultr-dns-servers/ 以获取最新的 Vultr 名称服务器,例如 sand。ns1.vultr.comns2.vultr.com
  2. 转到域提供商并将域的名称服务器更改为 Vultr 名称服务器。
  3. 转到https://my.vultr.com/dns/add/。在字段中输入您的域,并在新 IP 地址字段中输入负载均衡器的IP 地址

五、获取个人访问令牌 API

  1. 访问https://my.vultr.com/settings/#settingsapi
  2. 单击启用 API
  3. 复制 API 密钥。在下一步中需要此 API 密钥。
  4. 单击允许所有 IPv4以允许所有 IP 地址访问 API。为了提高安全性,您可以在 Kubernetes 集群中添加每个节点的 IP 地址。

六、安装 cert-manager 和 cert-manager-webhook-vultr

本节介绍如何安装证书管理器以使用“加密”处理 SSL 证书。

  1. 安装证书管理器以管理 SSL 证书
    kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.10.0/cert-manager.yaml
    
  2. 使用以下命令创建名为的密钥。替换为上一节中的 API 密钥。vultr-credentials<YOUR_API_KEY>
    kubectl create secret generic "vultr-credentials" --from-literal=apiKey=<YOUR_API_KEY> --namespace=cert-manager
    
  3. 从 GitHub 下载cert-manager-webhook-vultr
    git clone https://github.com/vultr/cert-manager-webhook-vultr
    
    cd cert-manager-webhook-vultr
    
  4. 安装 Vultr 证书管理器 Webhook
    helm install --namespace cert-manager cert-manager-webhook-vultr ./deploy/cert-manager-webhook-vultr
    

 七、创建 Let’s Encrypt ClusterIssuer

此示例使用“让我们加密”生产环境。对于过渡环境,替换为https://acme-v02.api.letsencrypt.org/directoryhttps://acme-staging-v02.api.letsencrypt.org/directory

  1. 创建名为以下内容的清单文件。替换为您的电子邮件地址issuer.yaml<YOUR_EMAIL_ADDRESS>
    apiVersion: cert-manager.io/v1
    
    kind: ClusterIssuer
    
    metadata:
    
      name: letsencrypt-issuer
    
    spec:
    
      acme:
    
        # You must replace this email address with your own.
    
        # Let's Encrypt will use this to contact you about expiring
    
        # certificates, and issues related to your account.
    
        email: <YOUR_EMAIL_ADDRESS>
    
        server: https://acme-v02.api.letsencrypt.org/directory
    
        privateKeySecretRef:
    
          # Secret resource that will be used to store the account's private key.
    
          name: letsencrypt-issuer
    
        solvers:
    
          - dns01:
    
              webhook:
    
                groupName: acme.vultr.com
    
                solverName: vultr
    
                config:
    
                  apiKeySecretRef:
    
                    key: apiKey
    
                    name: vultr-credentials
    
    ---
    
    apiVersion: rbac.authorization.k8s.io/v1
    
    kind: Role
    
    metadata:
    
      name: cert-manager-webhook-vultr:secret-reader
    
      namespace: cert-manager
    
    rules:
    
      - apiGroups: [""]
    
        resources: ["secrets"]
    
        resourceNames: ["vultr-credentials"]
    
        verbs: ["get", "watch"]
    
    ---
    
    apiVersion: rbac.authorization.k8s.io/v1
    
    kind: RoleBinding
    
    metadata:
    
      name: cert-manager-webhook-vultr:secret-reader
    
      namespace: cert-manager
    
    roleRef:
    
      apiGroup: rbac.authorization.k8s.io
    
      kind: Role
    
      name: cert-manager-webhook-vultr:secret-reader
    
    subjects:
    
      - apiGroup: ""
    
        kind: ServiceAccount
    
        name: cert-manager-webhook-vultr
    
  2. 部署使用 Kubectlissuer.yaml
    kubectl apply -f issuer.yaml
    

 八、创建通配符证书

本部分创建一个免费的通配符让我们加密 SSL 证书。此证书可以保护 的任何子域。名为存储通配符证书的机密。*.example.comexample.comwildcard-example-com-tls

  1. 创建名为以下内容的清单文件。替换为您的域。certificate.yamlexample.com
    apiVersion: cert-manager.io/v1
    
    kind: Certificate
    
    metadata:
    
      name: wildcard-example-com-tls
    
      namespace: default
    
    spec:
    
      commonName: "*.example.com"
    
      dnsNames:
    
        - "*.example.com"
    
      issuerRef:
    
        name: letsencrypt-issuer
    
        kind: ClusterIssuer
    
      secretName: wildcard-example-com-tls
    
  2. 部署使用 Kubectlcertificate.yaml
    kubectl apply -f certificate.yaml
    
  3. 检查状态
    kubectl describe certificate wildcard-example-com-tls
    
  4. 等待挑战
    $ kubectl get challenges -w
    
    NAME                                                    STATE     DOMAIN            AGE
    
    wildcard-example-com-tls-4rwk7-1141133851-2526175681   pending   YOUR_DOMAIN   103s
    
    wildcard-example-com-tls-4rwk7-1141133851-2526175681   valid     YOUR_DOMAIN   2m33s
    
  5. (可选)描述查找问题的挑战。将质询名称替换为上一步中的值。
    kubectl describe challenge wildcard-example-com-tls-4rwk7-1141133851-2526175681
    

 九、部署 Nginx Web 服务器

本节部署一个 Nginx Web 服务器,并通过 Kubernetes 服务在端口 80 上公开它。nginx-service

  1. 创建具有以下内容命名的文件nginx.yaml
    apiVersion: apps/v1
    
    kind: Deployment
    
    metadata:
    
      name: nginx-deployment
    
    spec:
    
      selector:
    
        matchLabels:
    
          name: nginx
    
      template:
    
        metadata:
    
          labels:
    
            name: nginx
    
        spec:
    
          containers:
    
            - name: nginx
    
              image: nginx
    
              ports:
    
                - containerPort: 80
    
    ---
    
    apiVersion: v1
    
    kind: Service
    
    metadata:
    
      name: nginx-service
    
    spec:
    
      ports:
    
        - name: http
    
          port: 80
    
      selector:
    
        name: nginx
    
  2. 部署使用 Kubectlnginx.yaml
    kubectl apply -f nginx.yaml
    

 十、为 Nginx 服务器部署入口

本部分部署一个入口,该入口通过域公开上述 Kubernetes 服务。您可以在此部分中使用域的任何子域。此子域的证书来自上一节中的机密。nginx-servicenginx.example.comwildcard-example-com-tls

  1. 创建具有以下内容命名的文件。替换为您的域。ingress.yamlnginx.example.com
    apiVersion: networking.k8s.io/v1
    
    kind: Ingress
    
    metadata:
    
      annotations:
    
        kubernetes.io/ingress.class: nginx
    
        cert-manager.io/cluster-issuer: letsencrypt-issuer
    
      name: nginx-example-com
    
      namespace: default
    
    spec:
    
      tls:
    
        - hosts:
    
            - nginx.example.com
    
          secretName: wildcard-example-com-tls
    
      rules:
    
        - host: nginx.example.com
    
          http:
    
            paths:
    
              - path: /
    
                pathType: Prefix
    
                backend:
    
                  service:
    
                    name: nginx-service
    
                    port:
    
                      number: 80
    
  2. 部署使用 Kubectlingress.yaml
    kubectl apply -f ingress.yaml
    
  3. 导航到访问您的 Nginx 服务器。https://<YOUR_DOMAIN>
  4. (可选)查看日志。
    kubectl logs deploy/ingress-nginx-controller --namespace ingress-nginx
赞(0)
未经允许不得转载:主机百科 » 如何安装通配符让我们在 Vultr Kubernetes 引擎上加密 SSL 证书