我在LoadBalancer类型的GKE上有一个Service,它指向运行nginx的GKE部署。我的nginx将所有超时设置为10分钟,但是在接收响应之前必须等待处理的HTTP / HTTPS请求在30秒后得到500个错误的截止。我的设置:
http {
proxy_read_timeout 600s;
proxy_connect_timeout 600s;
keepalive_timeout 600s;
send_timeout 600s;
}
显然,LoadBalancer中的默认设置为30秒。
在完成文档后,我只在Google上找到了一个步骤,其中概述了设置带有超时后端服务Load Balancer的Ingress,但是在Type = LoadBalancer的服务上找不到如何做到这一点用于GKE。我还查看了1.7版本的所有Kubernetes文档(我们的版本是1.8.7-gke.1),而不是设置超时。我可以添加到我的yaml文件中进行设置吗?
如果有帮助我找到了AWS的以下内容,这似乎是我在GKE上需要的内容:
annotations:
service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"
答案 0 :(得分:2)
到目前为止,您无法从YAML文件中执行此操作。
目前有一项公开功能请求,我建议您订阅并关注:
他们已经在讨论2016年的这一变化:issue。
"特定用例:GCE后端配置的默认超时为30秒,这对于某些长请求是不够的。我希望能够控制每个后端的超时时间。"
但是我建议您查看Google Cloud Documentation的这部分内容,特别是configurable response timeou t。
<强>更新强> 检查问题,因为他们正在取得进展
我看到18天前有一个v1.0.0版本。这是你谈到@nicksardo的主要重构的完成吗? 是否有可能在LB关闭之前配置连接空闲的时间? 的更新强> 上面提到的问题现已关闭,有关设置超时(以及其他后端服务设置)的文档可在此处获得: https://cloud.google.com/kubernetes-engine/docs/how-to/configure-backend-service
答案 1 :(得分:0)
自 2021 年 4 月起,您可以通过 GKE/GCE 配置执行此操作。 Here 是指令。
本质上,您创建了一个与此类似的 BackendConfig
资源:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: my-backendconfig
spec:
timeoutSec: 40
connectionDraining:
drainingTimeoutSec: 60
(kubectl apply -f my-backendconfig.yaml
)
然后使用注释将其连接到您的 GKE 服务资源:
apiVersion: v1
kind: Service
metadata:
name: my-service
labels:
purpose: bsc-config-demo
annotations:
cloud.google.com/backend-config: '{"ports": {"80":"my-backendconfig"}}'
cloud.google.com/neg: '{"ingress": true}'
spec:
type: ClusterIP
selector:
purpose: bsc-config-demo
ports:
- port: 80
protocol: TCP
targetPort: 8080
(kubectl apply -f my-service.yaml
)
如果您愿意,可以将 BackendConfig 资源(和服务)放置在您的 yaml 中具有元数据命名空间指定的命名空间中。
metadata:
namespace: my-namespace