如何解决1小时后,istio-proxy关闭长期运行的TCP连接
TL; DR:我们如何配置istio sidecar注入/ istio-proxy / envoy-proxy / istio出口网关,以允许较长的寿命(> 3小时),可能是空闲的TCP连接?
一些细节:
我们正在尝试将数据库迁移到PostgreSQL,这是由配置了Spring Boot + Flyway的一个应用程序触发的,该迁移预计将持续约3个小时。
我们的应用程序部署在我们的kubernetes集群中,该集群配置了istio sidecar注入。经过一小时的迁移,连接始终关闭。
当我们尝试从没有istio sidecar注入的pod迁移时,我们确定它是istio-proxy关闭连接,并且运行时间超过一小时,但是这不是一个可行的选择,因为这可能会导致某些停机时间在生产中我们无法考虑。
我们怀疑这应该可以在istio代理中配置参数idle_timeout-进行配置,该参数已实现here。但是,这不起作用,或者我们没有正确配置它,我们正在尝试在istio安装期间通过将--set gateways.istio-ingressgateway.env.ISTIO_META_IDLE_TIMEOUT=5s
添加到头盔模板中来配置它。
解决方法
对于入口网关,我们使用 env.ISTIO_META_IDLE_TIMEOUT 来设置 TCP 或 HTTP 协议的空闲超时。 对于sidecar,可以使用类似的envoyfilter(listener-timeout-tcp)来配置INBOUND方向或OUTBOUND方向。
,如果您使用的istio版本高于1.7,则可以尝试使用envoy filter使其起作用。 @ ryant1986提供的github上有答案和示例。
我们在1.7上遇到了同样的问题,但是我们注意到ISTIO_META_IDLE_TIMEOUT设置仅在输出端而不是输入端被拾取。通过添加一个附加的过滤器,该过滤器应用于请求的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
我们还创建了一个类似的过滤器以应用于直通群集(因此超时仍适用于我们没有服务条目的外部流量),因为配置也未在其中被拾取。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。