配置Ingress实现产品服务降级

通过增加Ingress实现服务降级

近期遇到一个问题,产品升级过程过程中实现所有服务访问定向到升级页面,升级完成后,产品所有服务恢复正常,同时,针对部分服务进行过滤(监控、告警等),升级过程中仍保持可访问状态。

产品通过Nginx-ingress-controller提供http服务,通过升级前创建ingress,升级后删除ingress实现升级过程中的重定向吗,ingress yaml如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingressName
namespace: myNameSpace
annotations:
kubernetes.io/ingress.class: “nginx”
ingress.kubernetes.io/use-regex: “true”
ingress.kubernetes.io/server-snippet: |
if ($uri !~* "(.css)|(.png)") {
rewrite /(.
) /getUpgradePage;
}
if ($uri ~
"(.*css)|(.png)") {
rewrite (.
) /$1;
}
spec:
rules:
- http:
paths:
//这里不支持标准的正则,例如(!?.*png)(!?.css),无法创建ingress
- path: /(.
)
backend:
serviceName: gateway-service
servicePort: 80

遇到的问题:
1、创建ingress后无法重定向到对应的服务
解决办法:使用ingress.kubernetes.io/rewrite-target: /index.html,请求重定向到gateway-service的index.html

2、重定向页面成功,但是删除ingress后页面缓存,导致用户一直在升级页面,除非用户ctrl+F5
解决办法:html的head里增加如下内容
<meta http-equiv=“Cache-Control” content=“private, no-cache, no-store, must-revalidate, max-age=0, proxy-revalidate, s-maxage=0”/>
<meta http-equiv=“Pragma” content=“no-cache”/>
<meta HTTP-EQUIV=“expires” CONTENT=“Wed, 26 Feb 1997 08:21:57 GMT”>
<meta HTTP-EQUIV=“expires” CONTENT=“0”>

3、使用带图片的index.html,页面无法正常显示图片
解决办法:原因是配置的ingress每次请求生效,因此当浏览器请求index.html引用的image时,仍然会重定向到index.html,所以图片无法加载,解决思路是配置ingress,当请求包含css、png等资源文件时,不要重定向到index.html,配置方法如下:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingressName
namespace: myNameSpace
annotations:
kubernetes.io/ingress.class: “nginx”
ingress.kubernetes.io/use-regex: “true”
ingress.kubernetes.io/server-snippet: |
if ($uri !~
"(.css)|(.png)") {
rewrite /(.
) /getUpgradePage;
}
if ($uri ~
"(.css)|(.png)") {
rewrite (.
) /$1;
}

spec:
rules:
- http:
paths:
//这里不支持标准的正则,例如(!?.png)(!?.css),无法创建ingress
**- path: /(.
)
*
backend:
serviceName: gateway-service
servicePort: 80
蛋疼的是,这里直接在path进行正则匹配不行,对于(!?.*png)(!?.*css)这样的正则,ingress似乎无法解析,因此才用上述方法

4、带图片的index.html存在缓存现象,用户每次得ctrl+F5
解决办法:页面内容通过getUpgradePage返回,则每次新增、删除ingress后,页面的请求都是200;如果是index.html,则页面返回的结果是302

参考了一些blog,都还行,如下:
正则语法:https://www.runoob.com/regexp/regexp-syntax.html
ingress的配置方法:https://blog.51cto.com/pengjc/1980634
ingress的配置方法以及样例,包括ingress的加载顺序:https://blog.51cto.com/270142877/2338348在这里插入图片描述
在线正则测试:http://tool.oschina.net/regex/

发布了12 篇原创文章 · 获赞 0 · 访问量 566

猜你喜欢

转载自blog.csdn.net/weixin_42305433/article/details/102465669
今日推荐