TL;DR:我们如何配置 istio sidecar 注入/istio-proxy/envoy-proxy/istio egressgateway 以允许长期存在(>3 小时)、可能空闲的 TCP 连接?
一些细节:
我们正在尝试执行到 PostgreSQL 的数据库迁移,该迁移由配置了 Spring Boot + Flyway 的一个应用程序触发,此迁移预计将持续约 3 小时。
我们的应用程序部署在 kubernetes 集群内,该集群已配置 istio sidecar 注入。运行迁移整整一小时后,连接总是会关闭。
我们确信 istio-proxy 关闭了连接,因为我们尝试从没有 istio sidecar 注入的 pod 进行迁移,并且它运行了超过一小时,但这不是一个继续进行的选项,因为这可能意味着生产中会出现一些停机时间我们无法考虑。
我们怀疑这应该可以在 istio 代理中配置参数idle_timeout - 已实现here https://github.com/istio/istio/pull/13515。然而这不起作用,或者我们没有正确配置它,我们尝试在 istio 安装期间通过添加来配置它--set gateways.istio-ingressgateway.env.ISTIO_META_IDLE_TIMEOUT=5s
到我们的掌舵模板。
如果您使用高于 1.7 的 istio 版本,您可以尝试使用特使过滤器 https://istio.io/latest/docs/reference/config/networking/envoy-filter/使其发挥作用。有答案和例子github https://github.com/istio/istio/issues/24387#issuecomment-713600319由@ryant1986 提供。
我们在 1.7 上遇到了同样的问题,但我们注意到 ISTIO_META_IDLE_TIMEOUT 设置仅在 OUTBOUND 端被拾取,而不是在 INBOUND 端。通过添加应用于请求 INBOUND 端的附加过滤器,我们能够成功增加超时(我们使用了 24 小时)
apiVersion: networking.istio.io/v1alpha3
kind: EnvoyFilter
metadata:
name: listener-timeout-tcp
namespace: istio-system
spec:
configPatches:
- applyTo: NETWORK_FILTER
match:
context: SIDECAR_INBOUND
listener:
filterChain:
filter:
name: envoy.filters.network.tcp_proxy
patch:
operation: MERGE
value:
name: envoy.filters.network.tcp_proxy
typed_config:
'@type': type.googleapis.com/envoy.config.filter.network.tcp_proxy.v2.TcpProxy
idle_timeout: 24h
我们还创建了一个类似的过滤器来应用于直通集群(以便超时仍然适用于我们没有服务条目的外部流量),因为配置也没有在那里被获取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)