如何正确更改节点代理的TCP保持连接时间?
我在 Google Container Engine 中运行 Kubernetes,并设置了一个由 HTTP(S) Google Load Balancer 支持的入口。当我不断向入口发出 POST 请求时,我每 80 秒左右就会收到一次 502 错误。backend_connection_closed_before_data_sent_to_client
云日志记录中的错误,这是因为 GLB 的 tcp 保持连接(600 秒)大于节点代理的保持连接(不知道它是什么)。
https://cloud.google.com/compute/docs/load-balancing/http/中详细介绍了记录的错误。
谢谢!
您可以使用每个 GKE 集群上存在的自定义资源BackendConfig
来配置超时和其他参数,如 CDN 以下是文档
此处的示例显示了如何在入口上进行配置
这是BackendConfig
定义:
apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
name: my-bsc-backendconfig
spec:
timeoutSec: 40
connectionDraining:
drainingTimeoutSec: 60
这就是如何通过注释在入口定义上使用
apiVersion: v1
kind: Service
metadata:
name: my-bsc-service
labels:
purpose: bsc-config-demo
annotations:
beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
spec:
type: NodePort
selector:
purpose: bsc-config-demo
ports:
- port: 80
protocol: TCP
targetPort: 8080
只是为了理解,当你使用 Google 解决方案来平衡和管理你的 Kubernetes 入口时,你会有GLBC
pod 在kube-system
命名空间中运行。
你可以用 :
kubectl -n kube-system get po
这些容器旨在路由来自实际 Google 负载均衡器的传入流量。
我认为超时应该在那里配置,在GLBC
.您应该检查可以配置哪些注释或配置映射GLBC
(如果有)。
您可以在那里找到详细信息:
- https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/cluster-loadbalancing/glbc
- https://github.com/kubernetes/ingress/blob/master/controllers/gce/README.md
- https://github.com/kubernetes/ingress/blob/master/controllers/gce/rc.yaml#L64
就我个人而言,我现在更喜欢使用Nginx Ingress Controller,它具有必要的annotations
和ConfigMap
支持。
看:
- https://github.com/kubernetes/ingress/blob/master/controllers/nginx/README.md