随着 HTTPS 不断普及,越来越多的网站都在从 HTTP 升级到 HTTPS,使用 HTTPS 就需要向权威机构申请证书,需要付出一定的成本,如果需求数量多,也是一笔不小的开支。cert-manager 是 Kubernetes 上的全能证书管理工具,如果对安全级别和证书功能要求不高,可以利用 cert-manager 基于 ACME 协议与 Let’s Encrypt 来签发免费证书并自动续期,实现永久免费使用证书。
Cert-Manager 是一个云原生证书管理开源项目,用于在 Kubernetes 集群中提供 HTTPS 证书并自动续期,支持 Let’s Encrypt / HashiCorp / Vault 这些免费证书的签发。在 Kubernetes 中,可以通过 Kubernetes Ingress 和 Let’s Encrypt 实现外部服务的自动化 HTTPS。
解释下几个关键的资源:
这里借助中文官网,对K3S进行一个简单的介绍。如果感兴趣可以自行访问它的中文官网:K3s | 轻量级Kubernetes | 物联网及边缘计算K8S解决方案 | Rancher
K3S是轻量级的Kubernetes,程序本身大小以及运行资源占用情况都非常小,但又可几乎像使用Kubernettes一样的使用各种编排命令,甚至命令格式都是完全兼容的(官方文档指出k3s可以替代k8s)同时安装使用又非常简单。
如果你有多台云服务器或者对kubernetes有一定研究和使用经验,这里非常建议尝试一下k3s。
------ 至此,关于K3S的介绍到此为止,别忘了,我们的主要内容是:K3s+Traefik+Cert-manager+LetsEncrypt实现web服务全Https。
安装Cert-manager的方法很多,有Helm的,也有kubectl方式的,这里使用kubectl方式(注:如果你边做边看这篇文章,建议严格按照本文内容操作)
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.yaml# 运行如下命令kubectl get pods --namespace cert-manager# 返回类似下方的结果,都为Running状态则安装成功NAME READY STATUS RESTARTS AGEcert-manager-54f645f7d6-2gld5 1/1 Running 0 9m4scert-manager-cainjector-79b7fc64f-m9b62 1/1 Running 0 9m5scert-manager-webhook-6484955794-5zrm6 1/1 Running 0 9m4s新建一个yml文件,内容如下:
apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata: name: letsencrypt-prodspec: acme: email: 【此处修改为你的邮箱】 privateKeySecretRef: name: letsencrypt-prod server: https://acme-v02.api.letsencrypt.org/directory solvers: - http01: ingress: class: traefik保存后,执行如下命令:
kubectl apply -f clusterIssuer.yml至此,基本配置已完成,接下来我们建立一个deployment,service,traefik进行测试。
创建一个Deployment资源,nginx.yml
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deploymentspec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80执行如下命令:
kubectl apply -f nginx.ymlnginxservice.yml
apiVersion: v1kind: Servicemetadata: labels: app: video-nginx name: video-nginx namespace: defaultspec: ports: - port: 8888 protocol: TCP name: nginx targetPort: 80 type: ClusterIP selector: app: nginx执行如下命令:
kubectl apply -f nginxservice.yml本文使用的是Traefik作为Ingress
workingress.yml
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: work-ingress namespace: default annotations: kubernetes.io/ingress.class: traefik cert-manager.io/cluster-issuer: letsencrypt-prod # letsencrypt-prod为ClusterIssuer名称 spec: tls: - secretName: test-tls # 证书名 hosts: - your domain # 域名 rules: - host: your domain # 域名 http: paths: - path: / pathType: ImplementationSpecific backend: service: name: video-nginx # 服务名 port: number: 80 # 服务的端口号 service port,非pod port执行如下命令:
kubectl apply -f workingress.yml至此,测试配置已准备完毕,接下来我们只需要在浏览器输入https://你的域名,即可看到网站已经支持HTTPS了。
但是,当我们在浏览器上输入http://域名时,没有自动跳转到Https://域名,该如如何实现这个特性呢?继续往下看。
本人对K3S、K8S了解的并不是很深入,主要以使用为主,所以本人算是“面向百度使用K3S、K8S”,下面便是本人搜索到的解决方案:
如原文所述操作:
apiVersion: traefik.containo.us/v1alpha1kind: Middlewaremetadata:name: redirect-httpsspec:redirectScheme:scheme: httpspermanent: true原文格式更佳
k3s+traefik+cert-manager+letsencrypt实现web服务全https|NGUP的个人技术博客
| 留言与评论(共有 0 条评论) “” |