【问题标题】:How to set Service Load Balancer request timeouts on GKE如何在 GKE 上设置服务负载均衡器请求超时
【发布时间】:2018-03-28 18:11:24
【问题描述】:

我在 GKE 上有一个 LoadBalancer 类型的服务,它指向运行 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 上找到了一个步骤,其中概述了设置带有超时的后端服务负载均衡器的入口,但找不到如何在 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"

【问题讨论】:

  • 您好,查看答案更新

标签: kubernetes google-cloud-platform google-kubernetes-engine


【解决方案1】:

到目前为止,您无法从 YAML 文件中执行此操作。

目前有一个开放的功能请求,我建议您订阅并关注:

他们已经在 2016 年就这一变化进行了讨论:issue

“特定用例:GCE 后端配置了 30 秒的默认超时,这对于一些长请求来说是不够的。我希望能够控制每个后端的超时。”

但是我建议您查看 Google Cloud 文档的这一部分,专门讨论 configurable response timeout。

更新 检查问题,因为他们正在取得进展

我看到 18 天前发布了 v1.0.0。这是您谈到@nicksardo 的主要重构的完成吗? 是否可以配置连接在 LB 关闭之前可以空闲多长时间? 更新 上述问题现已关闭,可在此处获得设置超时(和其他后端服务设置)的文档: https://cloud.google.com/kubernetes-engine/docs/how-to/configure-backend-service

【讨论】:

    【解决方案2】:

    从 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-21
      • 2013-11-23
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 2013-08-26
      相关资源
      最近更新 更多