Traefik 2.0 实现自动化 HTTPS
这篇文章讲述的是使用traefik配置服务访问使用https形式,使用免费的可自动续订的证书。当然参考这些内容,可以直接使用已有的证书来设置(参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/14986597.html)。
另外就是使用中间件,访问http自动跳转到https.
本文是使用http 这种验证方式进行的,还有一种是使用DNS 校验的方式,地址:https://www.cnblogs.com/sanduzxcvbnm/p/15749641.html
这里就以 Traefik 的 WebUI 为例
参考转载的文章内容经过实践操作
k8s版本:1.20.12
traefik版本:2.4.8
我这里安装的traefik是使用kubeoperator安装k8s集群时选择的,已经安装有dashboard了,参考文章:https://www.cnblogs.com/sanduzxcvbnm/p/15741429.html
要使用 Let's Encrypt 来进行自动化 HTTPS,就需要首先开启 ACME,开启 ACME 需要通过静态配置的方式,也就是说可以通过环境变量、启动参数等方式来提供,我们这里还是直接使用启动参数的形式来开启,在 Traefik 的部署文件中添加如下命令行参数:
# 参考内容
args:
- --entrypoints.web.Address=:80
- --entrypoints.websecure.Address=:443
- --api.insecure=true # 开启 webui 需要该参数
- --providers.kubernetescrd
- --api
- --api.dashboard=true
- --accesslog
# 使用 tls 验证这种方式
- --certificatesresolvers.default.acme.tlsChallenge=true
# 邮箱配置
- --certificatesResolvers.default.acme.email="ych_1024@163.com"
# 保存 ACME 证书的位置
- --certificatesResolvers.default.acme.storage="acme.json"
# 下面是用于测试的ca服务,如果https证书生成成功了,则移除下面参数
- --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
这里我们使用的是 tlsChallenge 这种 ACME 验证方式,需要注意的是当使用这种验证时,Let's Encrypt 到 Traefik 443 端口必须是可达的,除了这种验证方式外,还有 httpChallenge 和 dnsChallenge 两种验证方式,更常用的是 http 这种验证方式,关于这几种验证方式的使用可以查看文档:
,Let's Encrypt 到 Traefik 443 端口必须是可达的:我这是在公司内部,防火墙可以映射443端口到指定主机,但是443端口被运营商禁止的
我这里安装的traefik是使用kubeoperator安装k8s集群时选择的,对照上面的文件,修改步骤有两种,第一种是修改对应的yaml文件,第二种是通过kubepi进行修改
修改对应的yaml文件

通过kubepi进行修改:略
上面我们相当于指定了一个名为 default 的证书解析器,然后要注意的是,一定要将这里的 WebUI 的域名 www.daniel.com 解析到 Traefik 的所在节点,解析完成后,重新部署 Traefik:kubectl apply -f traefik.yaml
部署完成后,我们需要让 WebUI 的域名去监听 443 端口,因为我们这里使用的是 tlsChallenge 这种验证方式,在上面的 IngressRoute.yaml 文件中新建一个对象,用来监听 443 端口,如下所示:
# 参考文档内容
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-webui-tls
namespace: kube-system
spec:
entryPoints:
- websecure # 注意这里是websecure这个entryPoint,监控443端口
routes:
- match: Host(`traefik.youdianzhishi.com`)
kind: Rule
services:
- name: traefik
port: 8080
tls:
certResolver: default # 使用我们配置的 default 这个解析器
# 根据实际情况使用的内容,参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/15741429.html
# cat IngressRoute.yaml
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
namespace: kube-system
name: traefik-dashboard-tls
labels:
app.kubernetes.io/name: traefik
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- websecure # # 注意这里是websecure这个entryPoint,监控443端口
routes:
- match: Host(`www.daniel.com`) && PathPrefix(`/dashboard`) || PathPrefix(`/api`) # 新加上Host(`www.daniel.com`) &&
kind: Rule
services:
- name: api@internal
kind: TraefikService
tls:
certResolver: default # # 使用我们配置的 default 这个解析器
然后更新对象:kubectl apply -f IngressRoute.yaml
现在有两个 IngressRoute 对象,分别是traefik-dashboard和traefik-dashboard-tls
这个时候如果一切正常的话我们已经可以通过 HTTPS 去访问我们的服务了:
Traefik 会自动跟踪其生成的 ACME 证书的到期日期。如果证书过期之前还不到 30 天了,Traefik 会尝试进行自动续订。
同样的,我们通过 HTTP 协议也是可以访问到的,但是如果需要将 HTTP 请求强制跳转到 HTTPS 的话,就需要借助 Traefik 2.0 的提供的中间件来完成了。

同样,在上面的 IngressRoute.yaml 文件中添加一个 Middleware 的 CRD 对象,内容如下所示:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: redirect-https
namespace: kube-system
spec:
redirectScheme:
scheme: https
这里我们就声明了一个名为 redirectSchemea 的中间件,该中间件可以将我们的请求跳转到另外的 scheme 请求,然后将该中间件配置到 HTTP 请求的服务上面:
# 参考内容
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: traefik-webui
namespace: kube-system
spec:
entryPoints:
- web
routes:
- match: Host(`traefik.youdianzhishi.com`)
kind: Rule
services:
- name: traefik
port: 8080
middlewares: # 使用上面新建的中间件
- name: redirect-https
# 实际使用的内容,参考网址:https://www.cnblogs.com/sanduzxcvbnm/p/15741429.html
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
namespace: kube-system
name: traefik-dashboard
labels:
app.kubernetes.io/name: traefik
kubernetes.io/ingress.class: traefik
spec:
entryPoints:
- web
routes:
- match: Host(`www.daniel.com`) && PathPrefix(`/dashboard`) || PathPrefix(`/api`)
kind: Rule
services:
- name: api@internal
kind: TraefikService
middlewares: # 使用上面新建的中间件
- name: redirect-https
然后更新对象:kubectl apply -f IngressRoute.yaml
这样当我们通过 HTTP 去访问 WebUI 服务时,也会自动跳转到 HTTPS 上面去.
本文中用到的资源清单文件可以从这里获取:https://github.com/cnych/kubeapp/tree/master/traefik2/https。
Traefik 2.0 实现自动化 HTTPS的更多相关文章
- 云原生生态周报 Vol. 21 | Traefik 2.0 正式发布
作者 | 浔鸣.心水.元毅.源三.衷源 业界要闻 CNCF 计划将 TOC 升至 11 人 技术监督委员会(TOC)是 CNCF 的三大核心管理机构之一,从 2020 年 1 月起,TOC 将从 9 ...
- Traefik 2.0 tcp 路由试用
对于tcp 的路由是基于sni (需要tls)但是可以通过统配(*) 解决不试用tls的,当然也可以让Traefik 自动生成tls 证书 以下是测试http 以及mysql 的tcp 路由配置(de ...
- Traefik 2.0 发布了
Traefik 2.0 发布了,包含了很多不错的行特性 tcp 路由(同时也支持sni 路由) 参考配置 tcp: routers: to-db-1: entrypoints: - web-secur ...
- Traefik 2.0 实现灰度发布
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484478&idx=1&sn=238390dc ...
- Traefik 2.0 暴露 Redis(TCP) 服务
文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484452&idx=1&sn=0a17b907 ...
- Tomcat 6.0下配置HTTPS
最近项目需要使用到https,所以回顾整理了一下,其实在tomcat的文档中已经有了详细描述,我们启动Tomcat后,可以在docs文档中找到 地址如下:http://localhost:8080/d ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(30)-Fiddler如何抓取Android7.0以上的Https包-番外篇
1.简介 通过宏哥前边几篇文章的讲解和介绍想必大家都知道android7.0以上,有android的机制不在信任用户证书,导致https协议无法抓包.除非把证书装在系统信任的证书里,此时手机需要roo ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...
- 关于Android 7.0无法进行https抓包的问题
在App进行数据请求的时候,如果每次都打印log去判断是一件很不"人性化"的操作行为,所以一般都会进行抓包分析. 以最常用的软件Fiddler来说,进行普通的http抓包没什么事, ...
随机推荐
- C#《原CSharp》第三回 万文疑谋生思绪 璃月港口见清玉
第三回 万文疑谋生思绪 璃月港口见清玉 ===================================================================== 云溪愣了下,在他的认 ...
- 5-11 Redis缓存 | 持久化 | 集群_哨兵_主从复制_读写分离
Redis 强化 缓存淘汰策略 Redis服务器繁忙时,有大量信息要保存 如果Redis服务器内存全满,再要往Redis中保存新的数据,就需要淘汰老数据,才能保存新数据 noeviction:返回错误 ...
- 1_day01_操作系统安装
操作系统安装 内容介绍 1.制作U盘启动器 2.备份驱动 3.安装操作系统 4.驱动更新 5.依赖库检测 6.系统漏洞修复 7.系统布局优化 一.制作U盘启动器 1.1 下载老毛桃 下载老毛桃pe工具 ...
- vue 数据更新了但视图没改变?试试 $set
场景 编辑表格中某行数据时,需要把它赋值给对话框表单 this.form,如果直接用 = 赋值,会导致:表单的输入框内容无法二次编辑. 使用 Vue-dev-tool 的 Components 功能测 ...
- 《HelloGitHub》第 76 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...
- 万答#1,MySQL中如何查询某个表上的IS(意向共享)锁
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 问题 问题原文是这样的: 假如在MySQL事务里,给某个表的一行加了 共享锁,理 ...
- JAVA语言基础组成(2)
函数 函数的定义 1.什么是函数? 函数就是定义在类中的具有特定功能的一段独立小程序.函数也称为方法. 2.函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,.. ...
- Luogu P5030 长脖子鹿放置(网络流)
匈牙利T了,Dinic飞了... 按奇偶连 #include <cstdio> #include <iostream> #include <cstring> #in ...
- BZOJ1787/Luogu4281: [Ahoi2008]Meet 紧急集合
画画图可知,三点\(lca\)必有两相同,\(a,b,c\)距离为\(dis_a + dis_b + dis_c - dis_{lca(a,b)} - dis_{lca(b,c)} - dis_{lc ...
- linux设置系统环境变量的天坑
在设置系统环境变量,也就是 .bash_profile 或者 /etc/proflie 或者 .bashrc 中把path写错或者是把设置系统环境变量的格式写错! 会 导致 系统无法进入.登录无限循环 ...