k8s、Istio:删除 transfer-encoding header
k8s, Istio: remove transfer-encoding header
在应用程序的响应中,我们看到加倍的 transfer-encoding headers。
假设,因此我们在 UI 中得到 503,但同时在 pod 的日志中应用 returns 201。
除了 http code: 201
之外,日志中还有 transfer-encoding=chunked
和 Transfer-Encoding=chunked
headers,所以这可能是 503 的原因。
我们尝试通过 Istio 虚拟服务或 envoy 过滤器删除 transfer-encoding
,但没有成功..
以下是我们尝试过的示例:
VS 定义:
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: test
namespace: my-ns
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
headers:
response:
remove:
- transfer-encoding
---
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: test
namespace: istio-system
spec:
gateways:
- wildcard-api-gateway
hosts:
- my-ns_domain
http:
- match:
- uri:
prefix: /operator/api/my-service
rewrite:
uri: /my-service
route:
- destination:
host: >-
my-service.my-ns.svc.cluster.local
port:
number: 8080
headers:
response:
remove:
- transfer-encoding
Envoy过滤器定义:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: test
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_OUTBOUND
patch:
operation: ADD
value:
name: envoy.filters.http.lua
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
inlineCode: |
function envoy_on_response(response_handle)
response_handle:headers():remove("transfer-encoding")
end
在旧的 envoy 版本中,我看到 envoy.reloadable_features.reject_unsupported_transfer_encodings=false
是一种解决方法。不幸的是,它已被弃用。
请告知 VS/filter 有什么问题,或者是否有替代 reject_unsupported_transfer_encodings
选项的方法?
Istio v1.8.2
Envoy v1.16.1
目前的决定:要求开发团队删除重复的分块编码
在应用程序的响应中,我们看到加倍的 transfer-encoding headers。
假设,因此我们在 UI 中得到 503,但同时在 pod 的日志中应用 returns 201。
除了 http code: 201
之外,日志中还有 transfer-encoding=chunked
和 Transfer-Encoding=chunked
headers,所以这可能是 503 的原因。
我们尝试通过 Istio 虚拟服务或 envoy 过滤器删除 transfer-encoding
,但没有成功..
以下是我们尝试过的示例:
VS 定义:
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: test
namespace: my-ns
spec:
hosts:
- my-service
http:
- route:
- destination:
host: my-service
headers:
response:
remove:
- transfer-encoding
---
kind: VirtualService
apiVersion: networking.istio.io/v1alpha3
metadata:
name: test
namespace: istio-system
spec:
gateways:
- wildcard-api-gateway
hosts:
- my-ns_domain
http:
- match:
- uri:
prefix: /operator/api/my-service
rewrite:
uri: /my-service
route:
- destination:
host: >-
my-service.my-ns.svc.cluster.local
port:
number: 8080
headers:
response:
remove:
- transfer-encoding
Envoy过滤器定义:
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: test
namespace: istio-system
spec:
configPatches:
- applyTo: HTTP_FILTER
match:
context: SIDECAR_OUTBOUND
patch:
operation: ADD
value:
name: envoy.filters.http.lua
typed_config:
"@type": "type.googleapis.com/envoy.extensions.filters.http.lua.v3.Lua"
inlineCode: |
function envoy_on_response(response_handle)
response_handle:headers():remove("transfer-encoding")
end
在旧的 envoy 版本中,我看到 envoy.reloadable_features.reject_unsupported_transfer_encodings=false
是一种解决方法。不幸的是,它已被弃用。
请告知 VS/filter 有什么问题,或者是否有替代 reject_unsupported_transfer_encodings
选项的方法?
Istio v1.8.2
Envoy v1.16.1
目前的决定:要求开发团队删除重复的分块编码