首页 > 其他分享 >k3s+traefik+cert-manager+letsencrypt实现web服务全https

k3s+traefik+cert-manager+letsencrypt实现web服务全https

时间:2022-10-28 23:35:47浏览次数:82  
标签:web name k3s 证书 cert nginx manager https

1. 简介

随着 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。

架构原理图

 

解释下几个关键的资源:

Issuer/ClusterIssuer: 用于指示 cert-manager 用什么方式签发证书,本文主要讲解签发免费证书的 ACME 方式。ClusterIssuer 与 Issuer 的唯一区别就是 Issuer 只能用来签发自己所在 namespace 下的证书,ClusterIssuer 可以签发任意 namespace 下的证书。
Certificate: 用于告诉 cert-manager 我们想要什么域名的证书以及签发证书所需要的一些配置,包括对 Issuer/ClusterIssuer 的引用。

2.准备

k3s集群环境
有效的域名(如果是国内云服务器还需要备案)
一个可登录的邮箱

3.开始部署
3.1部署cert-manager
本文直接使用kubectl安装,未使用Helm.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.yaml

 运行如下命令可看到创建了3个pod,并STATUS为:Running

kubectl get pods --namespace cert-manager

 

 

3.2 配置ClusterIssuer

创建clusterIssuer.yml,内容如下

apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
  name: letsencrypt-prod
spec:
  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进行测试

4.测试
4.1创建nginx Deployment
创建一个Deployment资源,nginx.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  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

4.2创建Nginx Service
nginxservice.yml

apiVersion: v1
kind: Service
metadata:
  labels:
    app: video-nginx
  name: video-nginx
  namespace: default
spec:
  ports:
    - port: 8888
      protocol: TCP
      name: nginx
      targetPort: 80
  type: ClusterIP
  selector:
    app: nginx

5.创建Ingress (重点)
workingress.yml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  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

 

至此,测试程序已经部署完成,接下来,在浏览器输入https://你的域名,即可看到你的网站已经使用HTTPS协议了。

6.Http自动重定向到Https

6.1创建一个Middleware

apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: redirect-https
spec:
  redirectScheme:
    scheme: https
    permanent: true

6.2在Ingress中添加注解traefik.ingress.kubernetes.io/router.middlewares: default-redirect-https@kubernetescrd注意default是命名空间,redirect-https为Middleware的name

 

 

免费在线流程图、思维导图、专业强大的作图工具,支持多人实时在线协作,可用于原型图、UML、BPMN、网络拓扑图等多种图形绘制 感觉真不错推荐给大家!

 

标签:web,name,k3s,证书,cert,nginx,manager,https
From: https://www.cnblogs.com/JoePotter/p/16837815.html

相关文章

  • luci web崩了
    旁路由主路由将此旁路由的lanmac做静态ip绑定开启dhcp,dns和默认网关设置为:旁路由静态ipopenclash扩容u盘挂在到根目录,不要挂在到overlay,具体挂在到根......
  • java http web getToken and login.
    LogInHelper.javapackagecom.yd.dcap.integration.helper;importcom.fasterxml.jackson.annotation.JsonIgnoreProperties;importcom.yd.dcap.integration.EnvConf......
  • web安全学习(sql注入1)
    web安全学习(sql注入1)一.简介sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句。sql注入可能造成信息泄露以及服务器......
  • 使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容
    废话不多说直接上代码:不清楚的加群:群:191065815privatevoidForm1_Load(objectsender,EventArgse){try{//更改设置......
  • webform asp.net gridview 分页 利用aspnetpager 分页
    最近做项目成功温习了一个10年前的老项目asp.netwebform哈哈。 这里温习下,gridview真分页 1.BindDataPage真分页2.BindData假分页 都给了相应的列子大家可以试试u......
  • C# webAPI +access+xadmin+layui 前端
    1.首先创建webAPI项目: 2.创建DAL类库,用户访问数据库。添加AccessHelper封装一个数据库访问类:usingSystem;usingSystem.Collections.Generic;usingSystem.Data;using......
  • 如何在uniapp中优雅地使用WebView
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助从webview页面传值到uniapp中官方文档已经很详细了,这里给大家上我的实战代码,首先在webview页面中引入相......
  • asp.net mvc 3 配置全局异常处理 Web.config中设置CustomError
    Web.config中设置CustomErrorCustomError定义自动处理异常的行为,如下所示:<system.web><!--<customErrorsmode="RemoteOnly"defaultRedirect="~/error.html"/>--><cust......
  • uniapp开发使用 web-view APP 与 H5 (vue)通信
    需求:这边是uniapp开发的APP 需要内嵌H5(vue),就得使用web-view跳转网页H5端在vue的index,html文件引入web-view的插件<scripttype="text/javascript"src="https://js......
  • web微信js WechatWeb js方法
    获取自己的信息JSangular.element(".info").scope().account;angular.element(".profile_mini").scope().contact获取左边的正在聊天的好友angular.element("#J_NavChatScro......