问题描述
我在 GKE 上有一个集群,我的一个部署运行 Tornado Web 应用程序来接收 http 请求。 此部署由 LoadBalancer 公开。 我向 LoadBalancer ip 发送一个简单的 http 请求,它必须在服务器端运行约 10 分钟。 整整 5 分钟后,我得到:
requests.exceptions.ConnectionError: ('Connection aborted.',ConnectionResetError(104,'Connection reset by peer'))
我试过了:
- 在我的计算机(客户端和服务器)上使用本地通信并且没有重置。
- 我将 kubectl port-forward 直接发送到部署(本地客户端 -> kubectl port-forward -> 部署 -> 服务器)并且没有重置连接。 所以基本上我很确定它在负载平衡器方面。
- 我用这个配置做了一个后端配置:
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
Metadata:
name: my-bsc-backendconfig
spec:
timeoutSec: 3600
我的负载均衡器是这样配置的:
apiVersion: v1
kind: Service
Metadata:
annotations:
cloud.google.com/backend-config: '{"ports": {"5000":"my-bsc-backendconfig"}'
creationTimestamp: "2020-12-24T10:08:54Z"
finalizers:
- service.kubernetes.io/load-balancer-cleanup
labels:
name: wesnapp-flask
name: wesnapp-flask-service
namespace: default
resourceVersion: "14652233"
selfLink: /api/v1/namespaces/default/services/wesnapp-flask-service
uid: a922e9cb-4702-481f-b1a9-e09df1653ff7
spec:
clusterIP: 10.64.9.113
externalTrafficPolicy: Cluster
ports:
- nodePort: 31429
port: 5000
protocol: TCP
targetPort: 5000
selector:
name: wesnapp-flask
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- ip: x.x.x.x
任何想法如何解决这个问题? 谢谢
解决方法
你的假设是对的。 GCE LoadBalancer 终止连接。
如 this Google document 中所述,Stream idle timeout
配置为 300 秒(5 分钟)且无法更改。 HTTP 流在 5 分钟没有活动后变为空闲。