K8S下http請求在ingress和nginx間無限循環(huán)的問題及解決
現(xiàn)象
應(yīng)用發(fā)布uat后,某個(gè)接口的請求一直報(bào)
400 Bad Request Request Header Or Cookie Too Large
排查過程
1 根據(jù)錯(cuò)誤提示,按照網(wǎng)上的教程,在nginx的配置里增加對應(yīng)的配置
large_client_header_buffers 4 1M;
client_header_buffer_size 10M;
2 重啟nginx,再次請求,依然是這個(gè)報(bào)錯(cuò),但是nginx的日志明顯變長了
3 觀察nginx的日志,發(fā)現(xiàn)最后一個(gè)變量$http_x_forwarded_for特別的不正常,十分的長。觀察到請求在兩個(gè)服務(wù)器之間不斷的循環(huán),一直到header的長度被撐爆。這兩個(gè)服務(wù)器,一個(gè)是這臺nginx本身,另一個(gè)是ingress controller。
4 查看對應(yīng)的nginx的配置。proxy_pass轉(zhuǎn)發(fā)到的是域名,這個(gè)域名是解析到了ingress controller 的ip上的。
location ~ ^/workflow-alogrithm/ {
proxy_set_header Host $http_host;
client_max_body_size 20M;
proxy_set_header X-Real-IP $http_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://***-uat.***.com;
}
5 由于配置了 proxy_set_header Host $http_host;,請求ingress的時(shí)候請求頭Host攜帶的是這臺nginx掛的域名,ingress轉(zhuǎn)發(fā)的時(shí)候又會根據(jù)這個(gè)Host轉(zhuǎn)發(fā)到我的這臺nginx上,于是形成了一個(gè)無限循環(huán)。一直到X-Forwarded-For 變量的長度撐爆了請求頭。
PS, nginx是根據(jù)Host請求頭來把請求路由到對應(yīng)的server塊的,參考nginx官方文檔 https://nginx.org/en/docs/http/request_processing.html
6 proxy_set_header Host $http_host;去掉這個(gè)配置,重啟。問題修復(fù)
K8S網(wǎng)絡(luò)請求拓?fù)?/h2>

ingress controller負(fù)責(zé)k8s外部流量到k8s內(nèi)部流量的轉(zhuǎn)發(fā)。
ingress會根據(jù)host判斷請求應(yīng)該走哪個(gè)server(選擇nginx作為ingress controller的情況下)。
k8s內(nèi)部服務(wù)之間的流量轉(zhuǎn)發(fā),推薦用service,別用dns解析到ingress的域名,避免導(dǎo)致無限循環(huán),少一次網(wǎng)絡(luò)轉(zhuǎn)發(fā),性能也更好。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Rainbond云原生部署開源社區(qū)Discourse的配置過程
這篇文章主要為大家介紹了Rainbond云原生部署開源社區(qū)Discourse配置過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04
kubernetes需要默認(rèn)的serviceaccount的原因解析
這篇文章主要介紹了kubernetes為何需要默認(rèn)的serviceaccount,ServiceAccount 是 Kubernetes 中的一種重要概念,它的實(shí)際使用場景包括很多,本文給大家講解的非常詳細(xì),需要的朋友可以參考下2023-04-04
CentOS?8.2?k8s?基礎(chǔ)環(huán)境配置
這篇文章主要介紹了CentOS?8.2?k8s?基礎(chǔ)環(huán)境配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10
K8s解決主機(jī)重啟后kubelet無法自動啟動問題(推薦)
在安裝配置好Kubernetes后,正常情況下服務(wù)器關(guān)機(jī)重啟,kubelet也會自動啟動的,如何解決這個(gè)問題呢,下面小編給大家?guī)砹薑8s解決主機(jī)重啟后kubelet無法自動啟動問題,感興趣的朋友一起看看吧2022-08-08
不同k8s集群間服務(wù)如何相互訪問實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了不同k8s集群間服務(wù)如何相互訪問實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04

