在kubernetes的ingress中配置let's encrypt自动https
平时在普通的机器上,用cert-manager配置let's encrypt自动开启https非常方便。而在kubernetes中,如果使用ingress做反向代理路由,那么也可以安装对应版本的cert-manager自动开启https, 自动续证书。
1. 安装helm和tiller
helm的安装这里不详细讲,现在一般云服务商(比如阿里云)的kubernetes中都会安装好helm和tiller,只需要在客户端安装helm即可,mac下可以直接用homebrew
brew install kubernetes-helm
2. 安装cert-manager
直接贴上来自官方的安装命令即可。大致为新建一个cert-manager的namespace,然后用helm安装相应版本的cert-manager。为了获取更新的版本,执行前可以参考一下官方:https://docs.cert-manager.io/en/latest/getting-started/install/kubernetes.html
# Install the CustomResourceDefinition resources separately
kubectl apply --validate=false -f https://raw.githubusercontent.com/jetstack/cert-manager/release-0.11/deploy/manifests/00-crds.yaml
# Create the namespace for cert-manager
kubectl create namespace cert-manager
# Add the Jetstack Helm repository
helm repo add jetstack https://charts.jetstack.io
# Update your local Helm chart repository cache
helm repo update
# Install the cert-manager Helm chart
helm install cert-manager \
--namespace cert-manager \
--version v0.11.0 \
jetstack/cert-manager
注意,如果是v3以前的版本,最后一句换成:
helm install \
--name cert-manager \
--namespace cert-manager \
--version v0.11.0 \
jetstack/cert-manager
检查是否安装成功
kubectl get pods --namespace cert-manager
成功的话类似下方,可以看到3个pod都ready:
NAME READY STATUS RESTARTS AGE
cert-manager-5c6866597-zw7kh 1/1 Running 0 2m
cert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m
cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m
如果是国内的机器,这一步可能非常慢,这些pod拉取镜像会需要比较久的时间
3. 配置issuer
注意下面的邮箱需要改成你自己的
创建一个production-issuer.yaml
文件,内容如下
apiVersion: cert-manager.io/v1alpha2
kind: Issuer
metadata:
name: letsencrypt-prod
spec:
acme:
# The ACME server URL
server: https://acme-v02.api.letsencrypt.org/directory
# Email address used for ACME registration
email: user@example.com
# Name of a secret used to store the ACME account private key
privateKeySecretRef:
name: letsencrypt-prod
# Enable the HTTP-01 challenge provider
solvers:
- http01:
ingress:
class: nginx
$ kubectl create --edit -f production-issuer.yaml
issuer.cert-manager.io "letsencrypt-prod" created
配置完再查看一眼
kubectl describe issuer letsencrypt-prod
4. 开始添加域名使用
首先用常规的方法配置ingress,并等待其分配好IP等信息。然后编辑yaml, 添加issuer,在annotations中加入两行:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kuard
annotations:
kubernetes.io/ingress.class: "nginx" # letsencrypt
cert-manager.io/issuer: "letsencrypt-prod" # letsencrypt
有些云服务商需要手动添加tls证书
spec:
...
tls:
- hosts:
- www.example.com
secretName: example-com-tls
加完之后,耐心等待,cert-manager会自动申请证书,期间可以看到有临时的ingress出现,这就是在验证域名。等待最多10分钟即可配置完成。
如果需要强制https跳转,则再添加一个annotations
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
文章原始链接:https://sijie.wang/posts/kubernetes-letsencrypt
本站文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请保留原始链接