Kubernetes 部署证书
本页面将介绍如何手动在 Kubernetes 中部署 SSL 证书
自动部署
关于利用 Kubernetes 自动部署证书,可以参考 Kubernetes 自动部署证书。接下来开始手动部署的操作。
准备工作
在开始之前,请准备好
- 证书 yourdomain.pem (含证书与证书链的完全证书)
- 证书私钥 yourdomain.key
- Kubernetes 和 Ingress 。本文使用的 Ingress Controller 为 NGINX Ingress Controller。
找不到证书,或没有完整证书链吗?参考证书导出操作, 并选择 PEM 单个证书文件。
概览
本文的步骤概述如下
- 创建 Secret
- 创建 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