Istio 常见问题 - Istio 支持 HTTP/1.0

现象

Istio 默认只支持 HTTP/1.1 以上协议版本,并不支持 HTTP/1.0

原因

Istio 中负责流量转发的是 Envoy

Envoy 中可以设置支持 HTTP/1.0

Istio 负责分配“规则”的是 Pilot

Pilot 的环境变量 PILOT_HTTP10 默认为 0,即不支持 HTTP/1.0

解决方法

修改 Pilot 的环境变量 PILOT_HTTP101

阿里云

阿里云安装 Istio 的方式与其他平台不同,因此配置方法需要使用阿里云控制台。

  1. 进入 Istio 管理,点击右上角更新按钮。

    faq

  2. 找到 Pilot 配置项,增加如下配置,并更新。

    1
    
    enableHttp10: true
    

    注:此配置项为询问阿里云工程师获得,阿里云文档中未找到。

    faq

  3. 检查 Pilot 环境变量是否生效。

    faq

其他平台

其他平台一般使用 Istioctl 或者 Helm 安装,只要在 Pilot 配置项中加入 PILOT_HTTP10 为 1 即可,下面以 Istioctl 安装为例。

  1. 编辑 Istioctl 安装配置项文件。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    # 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:
    ......
    
  2. istioctl apply 该配置文件即可。

    1
    
    istioctl manifest apply -f Istio.yaml
    
  3. 检查 Pilot 环境变量是否生效。

    Istio 1.5.0 及以上版本

    1
    2
    
    $ kubectl describe deployment istiod -n istio-system | grep PILOT_HTTP10
       PILOT_HTTP10:                                 1
    

    Istio 1.4.x 及以下版本

    1
    2
    
    $ kubectl describe deployment istio-pilot -n istio-system | grep PILOT_HTTP10
       PILOT_HTTP10:                                 1
    

参考

延伸阅读


CatchZeng
Written by CatchZeng Follow
AI (Machine Learning) and DevOps enthusiast.