1. 程式人生 >實用技巧 >其它 >Istio使用Envoy轉發Http請求錯誤碼426 Upgrade Required

Istio使用Envoy轉發Http請求錯誤碼426 Upgrade Required


背景

此前將公司的幾個服務進行了服務網格的技術改造,其中一個應用是為H5提供Http介面,在改造之前,H5通過域名呼叫後臺介面,請求經過nginx進行轉發,轉發的目標是阿里雲SLB(阿里雲負載均衡產品)的ip埠,服務網格改造後,Nginx的轉發目標變成了k8s的ingress閘道器的ip埠,接著問題就出現了,介面調不通,Http返回426 Upgrade Required。

解決辦法

426 Upgrade Required解釋

該錯誤碼意思是客戶端需要升級協議版本

導致原因和解決辦法

原因

Istio使用Envoy作為資料面轉發HTTP請求,而Envoy預設要求使用HTTP/1.1或HTTP/2,當客戶端使用HTTP/1.0時就會返回426 Upgrade Required,如果用nginx進行proxy_pass反向代理,預設會用 HTTP/1.0

解決:nginx顯示指定 proxy_http_version為1.1

修改nginx的配置檔案nginx.conf,顯示指定代理proxy_http_version為1.1,程式碼如下:

server {
    ...

    location /http/path/ {
        proxy_http_version 1.1;
        proxy_pass http://ip:port;
    }
}

參考

Istio常見問題狀態碼: 426 Upgrade Required