更新时间:2024-09-29 GMT+08:00

为ELB Ingress配置超时时间

ELB Ingress支持设置以下超时时间:

  • 客户端连接空闲超时时间:没有收到客户端请求的情况下保持连接的最长时间。如果在这个时间内没有新的请求, 负载均衡会暂时中断当前连接,直到下一次请求时重新建立新的连接。
  • 等待客户端请求超时时间:如果在规定的时间内客户端没有发送完请求头,或body体数据发送间隔超过一定时间,负载均衡会自动关闭连接。
  • 等待后端服务器响应超时时间:向后端服务器发送请求后,如果在一定时间内没有收到响应,负载均衡将返回504错误码。

更新Ingress时,如果删除超时时间配置,已有监听器的超时时间配置会被重置为默认值。

约束与限制

支持设置超时时间的场景如下:

超时时间类型

支持的ELB类型

支持的集群版本

空闲超时时间

独享型

  • v1.19集群:v1.19.16-r30及以上版本
  • v1.21集群:v1.21.10-r10及以上版本
  • v1.23集群:v1.23.8-r10及以上版本
  • v1.25集群:v1.25.3-r10及以上版本
  • 其他更高版本集群

请求超时时间

独享型

响应超时时间

独享型

空闲超时时间

共享型

  • v1.23集群:v1.23.13-r0及以上版本
  • v1.25集群:v1.25.8-r0及以上版本
  • v1.27集群:v1.27.5-r0及以上版本
  • v1.28集群:v1.28.3-r0及以上版本
  • 其他更高版本的集群

请求超时时间

共享型

响应超时时间

共享型

配置超时时间

您可以使用以下方式为Ingress配置超时时间。

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“服务”,切换至“路由”页签,在右上角单击“创建路由”
  3. 设置Ingress参数。

    本示例中展示配超时时间的关键参数,其余参数可按需配置,详情请参见通过控制台创建ELB Ingress

    表1 关键参数说明

    参数

    配置说明

    示例

    名称

    自定义Ingress名称。

    ingress-test

    负载均衡器

    选择对接的ELB实例或自动创建ELB实例。可选择“共享型”“独享型”

    独享型ELB

    监听器配置

    • 前端协议:支持“HTTP”“HTTPS”
    • 对外端口:ELB监听器的端口。
    • 高级配置:
      • 空闲超时时间:客户端连接空闲超时时间。在超过空闲超时时间一直没有请求, 负载均衡会暂时中断当前连接,直到下一次请求时重新建立新的连接。
      • 请求超时时间:等待客户端请求超时时间。

        包含以下两种情况:

        1.读取整个客户端请求头的超时时长,如果客户端未在超时时长内发送完整个请求头,则请求将被中断。

        2.两个连续body体的数据包到达LB的时间间隔,超出请求超时时间将会断开连接。

      • 响应超时时间:等待后端服务器响应超时时间。请求转发后端服务器后,在等待超过响应超时时间没有响应,负载均衡将终止等待,并返回 HTTP504错误码。
    • 前端协议:“HTTP”
    • 对外端口:80
    • 高级配置:
      • 空闲超时时间:60
      • 请求超时时间:60
      • 响应超时时间:60

    转发策略配置

    • 域名:实际访问的域名地址,不配置时可通过IP地址访问Ingress。请确保所填写的域名已注册并备案,一旦配置了域名规则后,必须使用域名访问。
    • 路径匹配规则:支持前缀匹配精确匹配正则匹配,请按需选择。
    • 路径:后端应用对外提供访问的路径,此处添加的访问路径要求后端应用内存在相同的路径,否则转发无法生效。
    • 目标服务名称:请选择已有Service或新建Service。页面列表中的查询结果已自动过滤不符合要求的Service。
    • 目标服务访问端口:可选择目标Service的访问端口。
    • 域名:无需填写
    • 路径匹配规则:前缀匹配
    • 路径:/
    • 目标服务名称:nginx
    • 目标服务访问端口:80
    图1 配置超时时间

  4. 单击“确定”,创建Ingress。
  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 创建名为“ingress-test.yaml”的YAML文件,此处文件名可自定义。

    vi ingress-test.yaml

    以关联已有ELB为例,YAML文件配置如下:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: test
      namespace: default
      annotations:
        kubernetes.io/elb.port: '80'
        kubernetes.io/elb.id: <your_elb_id>    #本示例中使用已有的独享型ELB,请替换为您的独享型ELB ID
        kubernetes.io/elb.class: performance
        kubernetes.io/elb.keepalive_timeout: '300'  # 客户端连接空闲超时时间
        kubernetes.io/elb.client_timeout: '60'      # 等待客户端请求超时时间
        kubernetes.io/elb.member_timeout: '60'      # 等待后端服务器响应超时时间
    spec:
      rules:
        - host: ''
          http:
            paths:
              - path: /
                backend:
                  service:
                    name: test
                    port:
                      number: 80
                property:
                  ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH
                pathType: ImplementationSpecific
      ingressClassName: cce
    表2 annotation关键参数说明

    参数

    是否必填

    参数类型

    描述

    kubernetes.io/elb.keepalive_timeout

    String

    客户端连接空闲超时时间,在超过keepalive_timeout时长一直没有请求, 负载均衡会暂时中断当前连接,直到下一次请求时重新建立新的连接。

    取值范围为0-4000s,默认值为60s。

    kubernetes.io/elb.client_timeout

    String

    等待客户端请求超时时间,包括两种情况:

    • 读取整个客户端请求头的超时时长:如果客户端未在超时时长内发送完整个请求头,则请求将被中断。
    • 两个连续body体的数据包到达LB的时间间隔,超出client_timeout将会断开连接。

    取值范围为1-300s,默认值为60s。

    kubernetes.io/elb.member_timeout

    String

    等待后端服务器响应超时时间。请求转发后端服务器后,等待超过member_timeout时长没有响应,负载均衡将终止等待,并返回 HTTP504错误码。

    取值范围为1-300s,默认值为60s。

  3. 创建Ingress。

    kubectl create -f ingress-test.yaml

    回显如下,表示Ingress服务已创建。

    ingress/ingress-test created

  4. 查看已创建的Ingress。

    kubectl get ingress

    回显如下,表示Ingress服务创建成功。

    NAME          CLASS    HOSTS     ADDRESS          PORTS   AGE
    ingress-test  cce      *         121.**.**.**     80      10s