当前位置: 首页 > 知识库问答 >
问题:

如何在GKE上设置服务负载平衡器请求超时

孙洋
2023-03-14

我在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上只找到了一个步骤,其中概述了如何在GKE使用的类型为LoadBalancer的服务上设置具有超时的后端服务负载平衡器入口,但找不到如何在该服务上实现这一点。我还查看了1.7版的所有Kubernetes文档(我们使用的是1.8.7-gke.1),没有任何关于设置超时的内容。是否有可以添加到yaml文件的设置来html" target="_blank">执行此操作?

如果有帮助的话,我为AWS找到了以下内容,这似乎是我在GKE上需要的:

  annotations:
    service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "60"

共有2个答案

盛超
2023-03-14

截至2021 4月,您可以通过GKE/GCE配置实现这一点。以下是说明。实际上,您创建了一个类似于以下内容的后端配置资源:

apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: my-backendconfig
spec:
  timeoutSec: 40
  connectionDraining:
    drainingTimeoutSec: 60

kubectl应用-fmy-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应用-fmy-service.yaml

如果您愿意,可以将BackendConfig资源(和服务)放置在yaml中具有元数据命名空间指定的命名空间中。

metadata:
  namespace: my-namespace
权韬
2023-03-14

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

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

  • https://github.com/kubernetes/ingress-gce/issues/28

他们已经在2016年讨论了这一变化:问题。

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

然而,我建议您查看Google云文档的这一部分,该部分专门讨论可配置的响应超时。

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

我知道18天前有一个v1.0.0版本。这就是你所说的“nicksardo”的主要重构的完成吗?在LB关闭连接之前,是否可以配置连接的空闲时间?更新上述问题现已解决,此处提供了设置超时(和其他后端服务设置)的文档:https://cloud.google.com/kubernetes-engine/docs/how-to/configure-backend-service

 类似资料:
  • 试图自学如何使用库伯内特斯,但有一些问题。 我的下一步是尝试使用LoadBalancer类型的服务来访问nginx。 我建立了一个新的集群并部署了nginx映像。 然后,我为LoadBalancer设置服务 设置完成后,我尝试使用LoadBalancer入口(我在描述LoadBalancer服务时发现)访问nginx。我收到一个此页面无法工作的错误。 不太确定我哪里出错了。 kubectl获得sv

  • 我是微服务的新手。(学习阶段)。我有一个问题。我们在云中部署微服务。(例如 AWS)。云已经提供了负载平衡和日志。我们还在Spring Boot中实现了负载平衡(功能区)和日志(Rabbit MQ和Zipkin)。这两种实现有什么区别?我们两者都需要吗?有些人可以回答这些问题吗? 提前感谢。

  • 目标:将弹性/静态IP分配给负载平衡器(LB),以服务于处理DNS(端口53)、HTTPS(端口443)、HTTP(端口80)的EC2实例。 需要静态IP来正确配置DNS记录(即A记录)。需要在后端/服务器上终止TLS,以提供无限制的 经典的负载平衡器允许自定义安全规则,并允许在EC2实例上终止SSL。问题是静态IP不能分配给经典LB,只能分配给其中的单个实例,这无法平衡负载。 要分配静态IP,我

  • 如何在L7上的GKE上为GRPC服务进行负载平衡(通过HTTP/2 TLS进行入口)? 我知道我可以选择使用L4(TCP层)来配置具有“LoadBalancer”类型的服务。但是我想知道我是否可以通过HTTP/2 TLS使用入口L7负载平衡。 我还看到“GKE不支持HTTP/2到后端”(打开https://cloud.google.com/load-balancing/docs/backend-s

  • 我正在DigitalOcean上使用CoreOs和库伯内特斯构建一个容器集群,我已经看到,为了向世界公开Pod,您必须使用Type: LoadBalancer创建一个服务。我认为这是最佳解决方案,因此您不需要在nginx或haagent等kubernetes之外添加外部负载均衡器。我想知道是否可以使用DO的浮动IP创建它。

  • 我在GKE上有两个kubernetes集群:一个是处理与外部世界交互的公共集群,另一个是仅供内部使用的私有集群。 公共集群需要访问私有集群上的一些服务,我已经通过内部负载平衡器向公共集群的pod公开了这些服务。目前,我正在为负载平衡器指定要使用的内部IP地址,并将这些IP传递给公共POD,但我更希望负载平衡器可以选择任何可用的内部IP地址,并且我可以将其DNS名称传递给公共POD。 内部负载均衡器