在 Kubernetes 部署自动证书签发

上一篇博客介绍了如何在 Kubernetes 上部署 Nginx 并从 80 端口 http 访问后端服务,本文将介绍如何使用 cert manager 配置自动证书签发。

安装

cert-manager 的安装比较复杂,有较多的配置文件,因此我们使用 helm 安装。 对于从前文介绍的 stackpoint 安装的集群,已经自动在集群上部署了 tiller,可以从本地远程连接部署。 安装好 helm 并配置了 kubeconfig 的环境变量指向配置文件后,可以简单的使用一行命令安装 cert-manager:

1
helm install --name cert-manager --namespace kube-system stable/cert-manager

配置证书

1
2
3
4
5
6
7
8
9
10
11
apiVersion: certmanager.k8s.io/v1alpha1
kind: ClusterIssuer
metadata:
name: submodule-checker-ssl-cert
spec:
acme:
email: cert@hlyue.com
http01: {}
privateKeySecretRef:
name: submodule-checker-ssl-cert
server: https://acme-v01.api.letsencrypt.org/directory

这份配置非常好理解,从 Let’s encrypt 安装了证书,保存到了 secret 中。

从 stackpoint 的左侧可以直接链接到当前集群的 dashboard 界面,选择 secret 中的 submodule-checker-ssl-cert 可以看到自动签发的证书:

配置 Ingress

证书申请好后,需要在 Ingress 中配置启用 TLS 并指定证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: submodule-checker-ingress
annotations:
certmanager.k8s.io/cluster-issuer: submodule-checker-ssl-cert
spec:
tls:
- hosts:
- submodule-checker.hlyue.com
secretName: submodule-checker-ssl-cert
rules:
- host: submodule-checker.hlyue.com
http:
paths:
- backend:
serviceName: submodule-checker-service
servicePort: 7777

默认情况下 Nginx Ingress Controller 在有 TLS 的情况下启用了 HSTS 头和 http 自动重定向,如果想要关闭这些功能请参考文档。

参考链接

  1. https://medium.com/containerum/how-to-launch-nginx-ingress-and-cert-manager-in-kubernetes-55b182a80c8f
  2. helm: https://helm.sh/
  3. cert-manager: http://cert-manager.readthedocs.io/en/latest/getting-started/index.html