现在ambassador文档啃得差不多了。进入实战阶段。
一开始,就偶遇426错误。
网络结构大致如下:
浏览器访问nginx,
nginx代理到k8s内的ambassador,
ambassador代理到k8s内的service。
别问为什么这么复杂,
还有更复杂的。
比如,ambassador代理到k8s内的nginx,
nginx再代理到k8s集群外的服务。
多一层代理,多一层灵活和控制,
看场景和心态啦。
最后,解决靠了百度。
URL:
https://blog.csdn.net/pushme_pli/article/details/88411373
426(https://httpstatuses.com/426)表示服务器拒绝浏览器使用当前协议发送的请求。
懵逼了,
原来这个protocol指的是HTTP的version,而罪魁祸首是nginx。具体来讲是:
- browser使用HTTP 1.1发送request到nginx
- nginx使用HTTP 1.0(https://serverfault.com/questions/442960/nginx-ignoring-clients-http-1-0-request-and-respond-by-http-1-1)把request重定向到ambassador(Envoy)
- Envoy受不了HTTP 1.0,要求升级为1.1,所以抛出426
那好办了,让nginx重定向时使用HTTP1.1,在nginx的router rule中加入:
proxy_http_version 1.1; proxy_set_header Connection "";
所有评论(0)