摘要:直接访问IP是访问不到的,原因是做了正则表达式的匹配路径重写规则。
kubernetes 重写URL统一资源定位符可以把一个请求的地址URL重定向到另外一个路径。
前端:frontend
后端:backed
touch ingress.yaml
vim ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
name: rew.87long.com
namespace: ingress-nginx
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
ingressClassName: nginx
rules:
- host: rew.87long.com
paths:
- path: /api/(/|$)(.*)
pathType: ImplementationSpecific
backend:
name: nginx-service
number: 80
kubectl create -f ingress.yaml
打开主机hosts文件,添加域名解析IP:
$ip rew.87long.com
查看ingress:
kubectl get ingress -n ingress-nginx
直接访问IP是访问不到的,原因是做了正则表达式的匹配路径重写规则。
应该访问的方式是:域名/api
除此之外,斜杠之后还可以匹配斜杠或者字符串的请求路径。
这样做的好处是:改写了后端服务的URL路径,或者是统一资源定位服务。
前端:frontend
后端:backend
可以利用重写方案,把后端的一些URL路径重新定位到新的service服务里面,这就是重写的意义。
重写和重定向的区别:
在ingress控制器中,rewrite重写和Redirect重定向是两种不同的操作。
重写rewrite是指修改请求的路径,但是客户端不会察觉到这个变化,它仅在服务器内部发生,在kubernetes中,可以通过ingress的注解来配置重写规则。
比如在一个服务部署在/api的路径下,但是希望用户访问时不需要输入/api,那么可以使用重写将请求从根路径/重写到/api。
当然,倒过来也可以。把一个对根/的请求,也可以再加上不同的访问路径。
rewrite重写规则,添加或者减少URL中的路径都是可以的。
重定向是Redirect,是指服务器向客户端发起一个新的URL,让客户端进行新的请求。客户端会收到一个HTTP 3xx的状态码,然后根据其中的重定向地址进行新的请求。这意味着客户端会知道发生了重定向,它会发起新的请求。
比如一个旧网站的网址是http://www.87long.com,但是你希望把所有的请求都转发到HTTPS://www.baidu.com,这时就可以使用重定向将所有的HTTP请求重定向到HTTPS。
重定向就是代理域名的意思,通过A域名解析到B域名。
重定向可以使用curl 域名 -I 去查看。
只要网站的地址发生变化,都可以使用重定向去做到。
重写和重定向是不同的作用,需要注意区分。
重写和重定向的区别是:
影响范围:rewrite重写只是在服务器内部修改请求路径,不会影响到客户端。而redirect重定向则会向客户端发送一个新的URL,让客户端发起新的请求。
状态码不同:Rewrite重写不涉及状态码的改变,而Redirect重定向会向客户端发送一个重定向的HTTP状态码,例如301永久重定向、302临时重定向等。
可见性来说: Rewrite重写对于客户端来说是透明的,而Redirect则会告知客户端发生了重定向。
在选择Rewrite重写还是Redirect时,需要根据具体的需求来决定。如果你希望在不修改客户端请求的情况下修改路径,那么使用重写Rewrite。如果你希望客户端知道发生了重定向,并且根据新的URL访问新的请求,那么使用Redirect重定向。
玉渊潭秋景
鼓励的话语:强者不是没有眼泪,而是含着眼泪依然奔跑!
来源:Kaimai杂货铺