k8s中的nginx-ingress如何配置路径重定向
k8s中的nginx-ingress如何配置路径重定向
一. 需求描述
路径重定向的一般应用场景:
- 调整用户浏览的URL,看起来更规范
- 为了让搜索引擎收录网站内容,让用户体验更好
- 网站更换新域名后
- 根据特殊的变量、目录、客户端信息进行跳转
我这里遇到的问题是,以前的很多服务路径配置不规范,有的服务使用项目名作为二级路径,有的服务是随意定义的访问路径,为了统一使用项目名作为访问的二级路径,避免修改代码,所以需要配置路径重定向。
举一个例子,我有一个 a 服务
,它原来的访问路径是 api/v1/apps
,现在我需要通过路径 a/api/v1/apps
访问,需要将 a/
重定向到 /
。
也就是 www.test.com/a/api/v1/apps
重定向到 www.test.com/api/v1/apps
。
二. 解决方法
需要确保在集群中有一个 ingress controller
正在运行。我们可以按照如下方式配置 ingress
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
ingressClassName: nginx
rules:
- host: www.test.com
http:
paths:
- path: /a(/|$)(.*)
pathType: Prefix
backend:
service:
name: http-svc
port:
number: 80
在这个 ingress 的定义中,通过在 annotations
中指定了 nginx.ingress.kubernetes.io/rewrite-target: /$2
来进行重定向,(.*)
捕获的任何字符都将被分配给占位符 $2
,然后在 rewrite-target
中用作参数。
应用上面的 ingress 配置,可以实现下面的重定向:
www.test.com/a
重定向到www.test.com/
www.test.com/a/
重定向到www.test.com/
www.test.com/a/api/v1/apps
重定向到www.test.com/api/v1/apps
rewriting
可以使用下面的 anntations
进行控制:
名称 | 描述 | 值 |
---|---|---|
nginx.ingress.kubernetes.io/rewrite-target |
必须重定向流量的目标URI | string |
nginx.ingress.kubernetes.io/ssl-redirect |
表示位置部分是否可访问SSL(当Ingress包含证书时默认为True) | bool |
nginx.ingress.kubernetes.io/force-ssl-redirect |
强制重定向到HTTPS,即使入口没有启用TLS | bool |
nginx.ingress.kubernetes.io/app-root |
定义应用根,如果它在'/'上下文中,控制器必须重定向它 | string |
nginx.ingress.kubernetes.io/use-regex |
表示Ingress上定义的路径是否使用正则表达式 | bool |
App Root
创建一个带有 nginx.ingress.kubernetes.io/app-root
注解的 ingress
,如下所示:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/app-root: /app1
name: approot
namespace: default
spec:
ingressClassName: nginx
rules:
- host: approot.bar.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: http-svc
port:
number: 80
检查 rewrite 是否起作用:
$ curl -I -k http://approot.bar.com/
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.11.10
Date: Mon, 13 Mar 2017 14:57:15 GMT
Content-Type: text/html
Content-Length: 162
Location: http://approot.bar.com/app1
Connection: keep-alive
参考文档
https://github.com/kubernetes/ingress-nginx/blob/main/docs/examples/rewrite/README.md
https://www.cnblogs.com/brianzhu/p/8624703.html
k8s中的nginx-ingress如何配置路径重定向的更多相关文章
- Debian中CodeIgniter+nginx+MariaDB+phpMyAdmin配置
本文不讲述软件安装过程,记述本人在Debia中配置CodeIgniter时遇到的问题及解决方法,希望能够为有需要的人提供帮助. 一.Debian版本及所需的软件 Debian 9.8 stretch ...
- kubernetes nginx ingress 使用记录
前言 ingress是一种可以暴露k8s集群内部service的方式,用户编辑配置文件定义一个ingress资源即可实现外部网络访问内网service. ingress controller是来管理所 ...
- Nginx Ingress 高并发实践
概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分 ...
- 在win10 docker启动的centos容器中安装nginx
我是在win10机器上搭建了一个docker,在docker启动了centos容器,在centos中安装nginx. 安装配置docker 直接在官网下载docker for windows:http ...
- [转帖]在 k8s 中通过 Ingress 配置域名访问
在 k8s 中通过 Ingress 配置域名访问 https://juejin.im/post/5db8da4b6fb9a0204520b310 在上篇文章中我们已经使用 k8s 部署了第一个应用,此 ...
- 实操教程丨如何在K8S集群中部署Traefik Ingress Controller
注:本文使用的Traefik为1.x的版本 在生产环境中,我们常常需要控制来自互联网的外部进入集群中,而这恰巧是Ingress的职责. Ingress的主要目的是将HTTP和HTTPS从集群外部暴露给 ...
- k8s中几个基本概念的理解,pod,service,deployment,ingress的使用场景
k8s 总体概览 前言 Pod 副本控制器(Replication Controller,RC) 副本集(Replica Set,RS) 部署(Deployment) 服务(Service) ingr ...
- 在k8s中部署前后端分离项目进行访问的两种配置方式
第一种方式 (1) nginx配置中只写前端项目的/根路径配置 前端项目使用的Dockerfile文件内容 把前端项目编译后生成的dist文件夹放在nginx的html默认目录下,浏览器访问前端项目时 ...
- [转帖]在 k8s 中自动为域名配置 https
在 k8s 中自动为域名配置 https https://juejin.im/post/5db8d94be51d4529f73e2833 随着 web 的发展,https 对于现代网站来说是必不可少的 ...
随机推荐
- Sentry 开发者贡献指南 - 前端(ReactJS生态)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- GDC异步获取数据例子
- (void)processImageDataWithBlock:(void (^)(NSData *imageData))processImage //声明函数processImageDataWi ...
- 2020信息安全铁人三项 pwn复盘
第一赛区 hacknote 程序存在格式化字符串漏洞和uaf,不多说了,很简单. 1 from pwn import * 2 3 p = process('./hacknote') 4 elf = E ...
- LuoguB2101 计算矩阵边缘元素之和 题解
Content 给定一个 \(m\times n\) 的矩阵,求矩阵边缘元素之和. 数据范围:\(1\leqslant m,n\leqslant 100\). Solution 对于新手来说,看到这题 ...
- JS获取url中query_str JavaScript RegExp 正则表达式基础详谈
面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.window.location.href(设置或获取整个 URL ...
- IDEA结合mybatis插件自动生成代码
pom文件 添加插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>myb ...
- 【LeetCode】264. Ugly Number II 解题报告(Java & Python)
标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ https://leetcode.com/prob ...
- 【LeetCode】654. Maximum Binary Tree 解题报告 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归 日期 题目地址:https://leetcode ...
- 【LeetCode】819. Most Common Word 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 正则+统计 日期 题目地址:https://leet ...
- 1109 01组成的N的倍数
1109 01组成的N的倍数 基准时间限制:1 秒 空间限制:131072 KB 给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1.求最小的M. ...