現象
Istio 默認只支持 HTTP/1.1 以上協議版本,並不支持 HTTP/1.0。
原因
Istio 中負責流量轉發的是 Envoy。
Envoy 中可以設置支持 HTTP/1.0。
Istio 負責分配“規則”的是 Pilot。
Pilot 的環境變量 PILOT_HTTP10
默認爲 0
,即不支持 HTTP/1.0。
解決方法
修改 Pilot 的環境變量 PILOT_HTTP10
爲 1
。
阿里雲
阿里雲安裝 Istio 的方式與其他平臺不同,因此配置方法需要使用阿里雲控制檯。
-
進入 Istio 管理,點擊右上角
更新
按鈕。 -
找到 Pilot 配置項,增加如下配置,並更新。
enableHttp10: true
注:此配置項爲詢問阿里雲工程師獲得,阿里雲文檔中未找到。
-
檢查 Pilot 環境變量是否生效。
其他平臺
其他平臺一般使用 Istioctl 或者 Helm 安裝,只要在 Pilot 配置項中加入 PILOT_HTTP10
爲 1 即可,下面以 Istioctl 安裝爲例。
-
編輯 Istioctl 安裝配置項文件。
# Istio.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: # Use the default profile as the base # More details at: https://istio.io/docs/setup/additional-setup/config-profiles/ profile: default values: pilot: # https://github.com/istio/istio/issues/11235 env: PILOT_HTTP10: 1 gateways: ......
-
istioctl apply 該配置文件即可。
istioctl manifest apply -f Istio.yaml
-
檢查 Pilot 環境變量是否生效。
Istio 1.5.0 及以上版本
$ kubectl describe deployment istiod -n istio-system | grep PILOT_HTTP10 PILOT_HTTP10: 1
Istio 1.4.x 及以下版本
$ kubectl describe deployment istio-pilot -n istio-system | grep PILOT_HTTP10 PILOT_HTTP10: 1