简介
开始阶段我们在kubernetes
中使用ingress-nginx
来提供http
对外暴漏服务,由于服务网格的流行,开始将ingress
切换了istio
,通常只是使用了gateway
和vs
相关功能,后期业务需求,需要http
压缩功能,所以需要开启istio
的gzip
功能,经官方文档istio
默认时没有开启压缩的功能,但是可以通过EnvoyFilter
来对代理进行插件扩展。
环境
- kubernetes1.18版本
- istio 1.10.1版本。
压缩方案
gateway
进行压缩,对此gateway
下的http
业务统一都进行压缩。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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。