ingress-nginx请求改写
Posted SY技术小站
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ingress-nginx请求改写相关的知识,希望对你有一定的参考价值。
1. ingress-nginx uri 改写功能
对于 ingress-nginx
来说配置请求麻烦一点,一些复杂的需求需要通过 Ingress
的 annotation
来实现,比如我们需要实现一个 url rewrite 的功能。
URL 路径做一个 Rewrite, 在 ingress-nginx 官方文档中也给出了说明:
1.1 配置目标应用的ingress
创建一个 ingress,path 匹配规则为 /abb(/|$)(.*)
,rewrite-target 中可以使用 path 中的正则匹配
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tomcat-test
namespace: test
annotations:
"nginx" :
'true' :
/$2 :
spec:
rules:
host: test.sy.com
http:
paths:
path: /abb(/|$)(.*)
backend:
serviceName: tomcat-test
servicePort: 6080
tls:
hosts:
test.sy.com
secretName: tls-secret
需要注意 rewrite-target 对 ingress 中的所有 path 有效。
1.2 效果
[root@ingress]# curl --cacert ca.crt https://test.sy.com/abc/check_health.jsp
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>openresty/1.15.8.1</center>
</body>
</html>
[root@ingress]# curl --cacert ca.crt https://test.sy.com/abb/abc/check_health.jsp
hello 2020-03-19
如果要是代理外部url怎么办呢,这边先导入下service和endpoints
2. ingress代理外部应用
创建一个service
cat service.yaml
kind: Service
apiVersion: v1
metadata:
name: tengine-nginx
spec:
type: ClusterIP
ports:
port: 8000
targetPort: 8000
创建一个 与 Service 同名的 endpoint
kind: Endpoints
apiVersion: v1
metadata:
name: tengine-nginx
subsets:
addresses:
ip: 10.48.22.145
ports:
port: 8000
创建ingress
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tengine-nginx
spec:
rules:
host: test.sy.com
http:
paths:
backend:
serviceName: tengine-nginx
servicePort: 8000
path: /
访问:
假设前面我们再加上一个跳转,让他默认跳转到10.48.22.145, 可以通过 configuration-snippet
配置来完成,如下 Ingress 对象:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: tengine-nginx
annotations:
"nginx" :
/10.48.22.145 :
/$2 :
| :
rewrite ^(/10.48.22.145)$ $1/ redirect;
spec:
rules:
host: test.sy.com
http:
paths:
backend:
serviceName: tengine-nginx
servicePort: 8000
path: /10.48.22.145(/|$)(.*)
访问效果:
往期精彩文章
参考链接
-
https://kubernetes.github.io/ingress-nginx/examples/rewrite/ -
https://kubernetes.github.io/ingress-nginx/examples/auth/basic/
您的关注是小站的动力
以上是关于ingress-nginx请求改写的主要内容,如果未能解决你的问题,请参考以下文章
Sublime Text自定制代码片段(Code Snippets)
通过正则表达式 logql 提取 loki ingress-nginx 标签
VSCode自定义代码片段14——Vue的axios网络请求封装