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/v1beta1kind: Ingressmetadata: name: tomcat-test namespace: test annotations: kubernetes.io/ingress.class: "nginx" nginx.ingress.kubernetes.io/ssl-redirect: 'true' nginx.ingress.kubernetes.io/rewrite-target: /$2spec: 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.jsphello 2020-03-19

如果要是代理外部url怎么办呢,这边先导入下service和endpoints

2. ingress代理外部应用

创建一个service

[root@ingress]# cat service.yaml kind: ServiceapiVersion: v1metadata: name: tengine-nginxspec: type: ClusterIP ports: - port: 8000 targetPort: 8000

创建一个 与 Service 同名的 endpoint

kind: EndpointsapiVersion: v1metadata: name: tengine-nginxsubsets: - addresses: - ip: 10.48.22.145 ports: - port: 8000

创建ingress

apiVersion: extensions/v1beta1kind: Ingressmetadata: name: tengine-nginxspec: rules: - host: test.sy.com http: paths: - backend: serviceName: tengine-nginx servicePort: 8000 path: /

访问:

ingress-nginx请求改写

假设前面我们再加上一个跳转,让他默认跳转到10.48.22.145, 可以通过 configuration-snippet 配置来完成,如下 Ingress 对象:

apiVersion: extensions/v1beta1kind: Ingressmetadata: 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(/|$)(.*)

访问效果:


往期精彩文章



参考链接

  • 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 标签

K8s之Ingress-nginx原理及配置

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装

VSCode自定义代码片段14——Vue的axios网络请求封装