Kubernetes 部署证书

本页面将介绍如何手动在 Kubernetes 中部署 SSL 证书

自动部署

关于利用 Kubernetes 自动部署证书,可以参考 Kubernetes 自动部署证书。接下来开始手动部署的操作。

准备工作

在开始之前,请准备好

  1. 证书 yourdomain.pem (含证书与证书链的完全证书)
  2. 证书私钥 yourdomain.key
  3. Kubernetes 和 Ingress 。本文使用的 Ingress Controller 为 NGINX Ingress Controller

找不到证书,或没有完整证书链吗?参考证书导出操作, 并选择 PEM 单个证书文件

概览

本文的步骤概述如下

  1. 创建 Secret
  2. 创建 Ingress 并指定 Secret

步骤 1. 创建 Secret

假设已拿到证书和私钥,利用 kubectl 创建 Secret。

kubectl create secret tls your-secret-name --cert yourdomain.pem --key yourdomain.key

其中 your-secret-name 为该 Secret 的名称。执行完成后,会出现:

secret/your-secret-name created

查看 Secret 描述:

kubectl describe secrets/your-secret-name

结果类似如下显示:

Name:         your-secret-name
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/tls

Data
====
tls.crt:  1688 bytes
tls.key:  1704 bytes

步骤 2. 为 Ingress 指定 Secret

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: your-ingress-name
spec:
  tls:
    - secretName: your-secret-name
  rules:
    - host: yourdomain.com
      http:
        paths:
          - backend:
              serviceName: service-name
              servicePort: port

将在步骤 1 中创建的 Secret, 填入 tls 下的 secretName。 将此配置复制到 your-ingress-config.yaml 文件中保存。执行:

kubectl apply -f your-ingress-config.yaml

查看 Ingress 描述:

kubectl describe ingress your-ingress-name
Name:             your-ingress-name
Namespace:        default
.......
TLS:
  your-secret-name terminates
.........

显示此 Ingress 资源已与创建的 Secret 关联。在浏览器里输入域名,查看证书是否生效。

手动替换证书

若需要手动更新证书,对于 kubectl 1.18 及以上的版本,执行:

kubectl create secret tls your-secret-name --cert yourdomain.pem --key yourdomain.key --dry-run=client -o yaml | kubectl apply -f -

若 kubectl 版本低于 1.18, 执行:

kubectl create secret tls your-secret-name --cert yourdomain.pem --key yourdomain.key --dry-run -o yaml | kubectl apply -f -

执行完成结果:

secret/your-secret-name configured
March 4, 2021