istio关于开启gzip压缩

简介

开始阶段我们在kubernetes中使用ingress-nginx来提供http对外暴漏服务,由于服务网格的流行,开始将ingress切换了istio,通常只是使用了gatewayvs相关功能和一些网络鉴权功能,后期业务需求,需要http压缩功能,所以需要开启istiogzip功能,经官方文档istio默认时没有开启压缩的功能,但是可以通过EnvoyFilter来对代理进行插件扩展。

环境

  • kubernetes1.18版本
  • istio 1.10.1版本。

压缩方案

  1. gateway进行压缩,对此gateway下的http业务统一都进行压缩。
  2. sidecat压缩,对指定业务进行压缩。

单个压缩

apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
  name: gzip
spec:
  workloadSelector:
    labels:
      app: productpage #选择你要压缩的应用
  configPatches:
    - applyTo: HTTP_FILTER #指定应用envoy配置中的补丁位置
      match:
        context: SIDECAR_INBOUND #sidercar入站的路由监听集群
        listener:
          filterChain: #匹配监听器中特定的过滤链
            filter: #要应用补丁的特定过滤器的名称
              name: envoy.filters.network.http_connection_manager #匹配的过滤器名称
              subFilter: #匹配下级过滤器名称
                name: envoy.filters.http.router
      patch:
        operation: INSERT_BEFORE #进行的操作 进行插入操作
        value: ### 插入envoy配置
          name: envoy.filters.http.compressor 
          typed_config:
            '@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
            response_direction_config:
              common_config:
                content_type:
                  - text/html
                  - text/css
                  - application/javascript
              disable_on_etag_header: true
            request_direction_config:
              common_config:
                enabled:
                  default_value: false
                  runtime_key: request_compressor_enabled                
            compressor_library:
              name: text_optimized
              typed_config:     
                '@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
                compression_level: BEST_COMPRESSION
                compression_strategy: DEFAULT_STRATEGY 

网关压缩

 kind: EnvoyFilter
 metadata:
   name: gzip
   namespace: istio-system
 spec:
   workloadSelector:
     labels:
       app: istio-ingressgateway
   configPatches:
     - applyTo: HTTP_FILTER
       match:
-        context: SIDECAR_INBOUND
+        context: GATEWAY
         listener:
           filterChain:
             filter:
            name: envoy.filters.network.http_connection_manager #匹配的过滤器名称
              subFilter: #匹配下级过滤器名称
                name: envoy.filters.http.router
      patch:
        operation: INSERT_BEFORE #进行的操作 进行插入操作
        value: ### 插入envoy配置
          name: envoy.filters.http.compressor 
          typed_config:
            '@type': type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor
            response_direction_config:
              common_config:
                content_type:
                  - text/html
                  - text/css
                  - application/javascript
              disable_on_etag_header: true
            request_direction_config:
              common_config:
                enabled:
                  default_value: false
                  runtime_key: request_compressor_enabled                
            compressor_library:
              name: text_optimized
              typed_config:     
                '@type': type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip
                compression_level: BEST_COMPRESSION
                compression_strategy: DEFAULT_STRATEGY 

参考文档

  1. https://www.envoyproxy.io/doc...
  2. https://istio.io/latest/docs/...

你可能感兴趣的:(istio关于开启gzip压缩)