Traefik2.X 版本 中 URL Rewrite 的使用
k8s版本:1.20.12
traefik版本:2.4.8
根据实践操作,部分内容跟原文对比有删改
比如我们现在在 Kubernetes 集群中部署了一个 Nexus 应用,和其他应用一样,我们通过 IngressRoute 来暴露服务,对应的资源清单如下所示:(nexus.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nexus
namespace: test
labels:
app: nexus
spec:
selector:
matchLabels:
app: nexus
template:
metadata:
labels:
app: nexus
spec:
containers:
- image: sonatype/nexus3:3.37.3
imagePullPolicy: IfNotPresent
name: nexus
ports:
- containerPort: 8081
---
apiVersion: v1
kind: Service
metadata:
labels:
app: nexus
name: nexus
namespace: test
spec:
ports:
- name: nexusport
port: 8081
targetPort: 8081
selector:
app: nexus
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: nexus
namespace: test
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`www.aaa.com`)
services:
- kind: Service
name: nexus
port: 8081
dashboard面板使用的网址是www.daniel.com,在这里还是用的话访问报错404,因此换一个网址,本机hosts文件里添加解析
执行查看
kubectl apply -f nexus.yaml
kubectl get ingressroute -n test
kubectl get deployment -n test
kubectl get svc -n test
kubectl get pod -n test
部署完成后,我们根据 IngressRoute 对象中的配置,只需要将域名 www.aaa.com 解析到 Traefik 的节点即可访问:
同样的现在我们有一个需求是目前我们只有一个域名可以使用,但是我们有很多不同的应用需要暴露,这个时候我们就只能通过 PATH 路径来进行区分了,比如我们现在希望当我们访问 http:/www.daniel.com/nexus 的时候就是访问的我们的 Nexus 这个应用,当路径是 /foo 开头的时候是其他应用,这种需求是很正常的,这个时候我们就需要来做 URL Rewrite 了。
首先我们使用 StripPrefix这个中间件,这个中间件的功能是在转发请求之前从路径中删除前缀,在使用中间件的时候我们只需要理解中间件操作的都是我们直接的请求即可,并不是真实的应用接收到请求过后来进行修改。
现在我们添加一个如下的中间件:
apiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: strip-foo-path
namespace: test # 注意中间件所在命名空间
spec:
stripPrefix:
prefixes:
- /nexus
创建中间件
然后现在我们就需要从 http:/www.aaa.com/nexus 请求中去匹配 /nexus 的请求,把这个路径下面的请求应用到上面的中间件中去,因为最终我们的 Nexus 应用接收到的请求是不会带有 /nexus 路径的,所以我们需要在请求到达应用之前将这个前缀删除,更新 IngressRoute 对象:
注意:这一步是修改www.aaa.com的IngressRoute 对象,也就是上一步创建的
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: nexus
namespace: test
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`www.aaa.com`) && PathPrefix(`/nexus`)
middlewares:
- name: strip-foo-path
services:
- kind: Service
name: nexus
port: 8081
更新完成上面的 IngressRoute 对象后,这个时候我们前往浏览器中访问 http:/www.aaa.com/nexus,这个时候发现我们的页面任何样式都没有了:
通过 Chrome 浏览器的 Network 可以查看到 /nexus路径的请求是200状态码,但是其他的静态资源对象确全都是404了,这是为什么呢?我们仔细观察上面我们的 IngressRoute 资源对象,我们现在是不是只匹配了 /nexus的请求,而我们的静态资源是 /static 路径开头的,当然就匹配不到了,所以就出现了404,所以我们只需要加上这个 /static 路径的匹配就可以了,同样更新 IngressRoute 对象:
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: nexus
namespace: test
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`www.aaa.com`) && PathPrefix(`/nexus`)
middlewares:
- name: strip-foo-path
services:
- kind: Service
name: nexus
port: 8081
- kind: Rule
match: Host(`www.aaa.com`) && PathPrefix(`/static`)
services:
- kind: Service
name: nexus
port: 8081
然后更新 IngressRoute 资源对象,这个时候再次去访问应用,可以发现页面样式已经正常了,也可以正常访问应用了,但进入应用后发现还是有错误提示信息,通过 Network 分析发现还有一些 /service 开头的请求是404,当然我们再加上这个前缀的路径即可:
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: nexus
namespace: test
spec:
entryPoints:
- web
routes:
- kind: Rule
match: Host(`www.aaa.com`) && PathPrefix(`/nexus`)
middlewares:
- name: strip-foo-path
services:
- kind: Service
name: nexus
port: 8081
- kind: Rule
match: Host(`www.aaa.com`) && PathPrefix(`/static`) || PathPrefix(`/service`)
services:
- kind: Service
name: nexus
port: 8081
更新后,再次访问应用就已经完全正常了
Traefik2.X 版本 中 URL Rewrite 的使用的更多相关文章
- Windows10中的IIS10安装php manager和IIS URL Rewrite 2.0组件的方法
Windows10中自带的Server:Microsoft-IIS/10.0,然后这个10却让原本支持组件无法安装了,php manager组件安装时提示“必须安装IIS7以上才可以安装”.那是不是真 ...
- 在ASP.NET MVC中使用IIS级别的URL Rewrite
原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的文章(2.3.4),把ASP.NET平台上进行URL Rewrit ...
- Windows Server 2016中,安装PHP Manager,ARR3.0或者URL Rewrite 2.0无法成功的解决办法
如图: 无法安装原因都是这几个工具无法识别10.0这个版本,可以修改注册表来先完成安装,然后再改回去 PHPManager的修改方法如下: 打开注册表工具(运行Regedt32),找到:HKEY_LO ...
- resin中关于url rewrite来传递jsessionid的问题
最近两天在项目中碰到,一个很奇怪的问题.同一个账号多次切换登录时,会出现这个账号的信息在session中找不到,虽然可以登录成功,但是之后这个用户信息好像没有保存到session中一样,或者是被改变了 ...
- ASP.NET Core中怎么实现Url rewrite功能
我们可以使用ASP.NET Core的中间件来实现Url rewrite功能,下面我们定义一个中间件ReplaceQueryStringMiddleware来替换Http请求中的Url参数即Query ...
- 在IIS 中如何配置URL Rewrite,并且利用出站规则保持被重写的Cookie的域
Url Rewrite配置 xx.aa.com/bb/test1.aspx 会重写到 bb.aa.com/test1.aspx 具体怎么配置入站 出站规则 结果:
- 翻译:为 URL Rewrite 模块创建重写规则
原文名称:Creating Rewrite Rules for the URL Rewrite Module 原文地址:http://www.iis.net/learn/extensions/url- ...
- IIS URL Rewrite Module防盗链规则配置方法
IIS版本:IIS 7.5 URL Rewrite组件:IIS URL Rewrite Module(http://www.iis.net/downloads/microsoft/url-rewrit ...
- IIS7伪静态化URL Rewrite模块
原文 IIS7伪静态化URL Rewrite模块 在Win7安装了IIS7.5之后,搭建一些网站或者博客,但是IIS7.5本身没有URL Rewrite功能,也就是无法实现网址的伪静态化. 从网上找了 ...
随机推荐
- java-Stream的总结
JAVA中的Stream 01.什么是Stream Stream是JDK8中引入,Stream是一个来自数据源的元素序列并支持聚合操作.可以让你以一种声明的方式处理数据,Stream 使用一种类似用 ...
- for增强
package study5ran2yl.study; public class ForDemo02 { public static void main(String[] args) { int[] ...
- linux服务配置IP或者说可以远程连接
切换目录 cd /etc/sysconfig/network-scripts ls查看当前目录下的东西 找到ipcfg- 开头的,而且不是iocfg-lo,而上图就是那个ifcfg-ens33. 则进 ...
- MYSQL--安装2(命令行连接到数据库)
使用命令行窗口连接 MYSQL 数据库[操作示意图]
- 中国顶级程序员,从金山WPS走出来,自研了“表格编程”神器
程序员的圈子里有很多如明星般闪耀的牛人! 有中国"第一代程序员"--求伯君,有在微信获得巨大成功的张小龙,有图灵奖获得者姚期智,有商业巨子张一鸣,更有开源影响力人物--章亦春. 章 ...
- SpringBoot集成文件 - 集成POI之Excel导入导出
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能.本文主要介绍通过Spr ...
- while练习题_1到100之间的偶数和
依然是while循环四步骤 初始化变量 条件判断 条件执行体 最后就是输出答案就可以了 点击查看笔者代码 a = 1 sum = 0 while a <= 100: if (a+1)%2:#if ...
- 使用try_catch_finally处理流中的异常和JDK7流中的异常处理
在jdk1.7之前使用try_catch_finally处理流中的异常 格式: try{ 可能会出现异常的代码 }catch(异常类变量 变量名){ 异常的处理逻辑 }finally{ 一定会执行的代 ...
- python subprocess相关操作
python subprocess常用操作 1.subprocess模块的常用函数 函数 描述 subprocess.run() Python 3.5中新增的函数.执行指定的命令,等待命令执行完成后返 ...
- 【freertos】013-任务通知及其实现细节
前言 参考: https://www.freertos.org/RTOS-task-notifications.html 原文:https://www.cnblogs.com/lizhuming/p/ ...