ingress-nginx-controller 414 Request—URI Too Large

問題

        線上某平臺,通過Jenkins的API查詢流水線的執行歷史記錄時,報錯414.

 

排查

         1.jenkins的訪問,使用的爲ingress的訪問方式,414的返回碼,可能是jenkins本身返回,也可能是ingress-controller返回(使用的爲nginx-ingress-controller,版本爲0.26.1)。於是同時對ingress-controller和jenkins的pod抓包,定位414返回碼爲ingress-controller返回(同時刻jenkins的pod未抓取到414的返回碼),同時在nginx-ingress-controller的日誌也顯示414的錯誤;判定調用jenkins的API時,請求到nginx-ingress-controller時就被中止了。

                         如上圖,在ingress-controller的上面抓包的414錯誤

          2.排查Request—URI Too Large,爲請求頭參數過長的錯誤,解決辦法爲加大client_header_buffer_size 和large_client_header_buffers的配置。於是修改jenkins對應的ingress的annotation部分,檢查nginx-ingress-controller的對應server段配置文件,配置已經生效。

        3.在nginx-ingress-controller的server增加了上述配置後,發現查詢流水線執行歷史記錄,仍然報錯414.網上未搜索到配置不生效原因,於是嘗試配置client_header_buffer_size,large_client_header_buffers到nginx-ingress-controller的configmap(nginx-ingress-controller會把configmap裏面的配置注入到nginx.conf的http配置段),初始在configmap裏面,client_header_buffer_size,large_client_header_buffers都是使用的下劃線,發現一直無法注入到配置文件;後改成中劃線後才注入成功,414問題才解決。

 

 總結

        1.client_header_buffer_size 和large_client_header_buffers必須配置到nginx-ingress-controller的configmap裏面,進而注入到nginx.conf裏面的http配置段覆蓋默認值;通過ingress的annotation,雖然能單獨配置client_header_buffer_size 和large_client_header_buffers,注入到nginx.conf的server段,但是優先級較低,系統仍以http的配置爲主(查詢nginx官網未找到此兩點優先級的說明,待進一步調查)。

        2.client_header_buffer_size 和large_client_header_buffers配置到nginx-ingress-controller的configmap裏面時,必須改成中劃線

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章