如何编写Envoy Filter允许HTTP 1.0接入Kubernetes集群(含报错)
如何编写Envoy Filter允许HTTP 1.0请求进入Kubernetes集群?
问题背景
使用curl请求集群入口时收到响应:
HTTP/1.1 426 Upgrade Required
尝试编写的EnvoyFilter配置执行创建操作时,触发如下报错:
来自服务器的错误:创建".\http10-envoy-filter.yml"时出错:准入Webhook "validation.istio.io"拒绝了请求:配置无效:Envoy filter:无法反序列化嵌套的Any类型proto type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager:无法解析Any消息类型:type.googleapis.com/envoy.config.filter.http.http_protocol_options.v2.HttpProtocolOptions
错误配置示例
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: http10-filter spec: workloadSelector: labels: istio: ingress configPatches: - applyTo: NETWORK_FILTER match: context: GATEWAY listener: filterChain: filter: name: envoy.filters.network.http_connection_manager patch: operation: INSERT_BEFORE value: name: envoy.filters.network.http_connection_manager typed_config: "@type": type.googleapis.com/envoy.config.filter.network.http_connection_manager.v2.HttpConnectionManager stat_prefix: ingress_http http_filters: - name: envoy.filters.http.http_protocol_options typed_config: "@type": type.googleapis.com/envoy.config.filter.http.http_protocol_options.v2.HttpProtocolOptions enable_http1: true allow_absolute_url: true - name: envoy.filters.http.router
问题分析与修正方案
核心错误原因
- 错误地将
http_protocol_options作为独立HTTP过滤器添加,实际上它是HTTP连接管理器的内置配置参数,并非单独的过滤器。 - 使用了过时的v2版本API,当前Istio/Envoy版本多已适配v3 API,导致序列化解析失败。
修正后的EnvoyFilter配置
apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: http10-filter spec: workloadSelector: labels: istio: ingress configPatches: - applyTo: NETWORK_FILTER match: context: GATEWAY listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: MERGE value: typed_config: "@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager" http_protocol_options: enable_http_10: true upgrade_configs: []
关键修改点说明
- 采用
MERGE操作替代INSERT_BEFORE,直接修改现有HTTP连接管理器的配置,避免重复添加组件。 - 将
http_protocol_options移至HTTP连接管理器的根配置层级,启用enable_http_10参数(v3 API参数名与v2的enable_http1不同)。 - 清空
upgrade_configs,防止Envoy强制要求升级HTTP版本。 - 切换为v3版本的API类型,适配当前Istio/Envoy的版本要求。
验证方法
部署修正后的配置后,用curl发送HTTP 1.0请求测试:
curl -v --http1.0 http://<你的集群入口地址>/<测试路径>
若返回正常业务响应,说明配置生效。
内容的提问来源于stack exchange,提问作者Chethan Chowdary
相关产品推荐
相关产品推荐

