前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ingress-nginx请求改写

ingress-nginx请求改写

作者头像
SY小站
发布2020-06-15 15:16:38
1.7K0
发布2020-06-15 15:16:38
举报
文章被收录于专栏:SY小站的专栏

1. ingress-nginx uri 改写功能

对于 ingress-nginx 来说配置请求麻烦一点,一些复杂的需求需要通过 Ingressannotation 来实现,比如我们需要实现一个 url rewrite 的功能。

URL 路径做一个 Rewrite, 在 ingress-nginx 官方文档中也给出了说明:

1.1 配置目标应用的ingress

创建一个 ingress,path 匹配规则为 /abb(/|$)(.*),rewrite-target 中可以使用 path 中的正则匹配

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-test
  namespace: test
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'
    nginx.ingress.kubernetes.io/rewrite-target: /$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 效果

代码语言:javascript
复制
[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

代码语言:javascript
复制
[root@ingress]# cat service.yaml 
kind: Service
apiVersion: v1
metadata:
 name: tengine-nginx
spec:
 type: ClusterIP
 ports:
 - port: 8000
   targetPort: 8000

创建一个 与 Service 同名的 endpoint

代码语言:javascript
复制
kind: Endpoints
apiVersion: v1
metadata:
 name: tengine-nginx
subsets:
 - addresses:
     - ip: 10.48.22.145
   ports:
     - port: 8000

创建ingress

代码语言:javascript
复制
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 对象:

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tengine-nginx
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/app-root: /10.48.22.145
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      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(/|$)(.*)

访问效果:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SY技术小站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. ingress-nginx uri 改写功能
  • 1.1 配置目标应用的ingress
  • 1.2 效果
  • 2. ingress代理外部应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档