You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE Ingress负载均衡下Odoo 15.0长轮询异常求助

问题描述

在GKE(Google Kubernetes Engine)中部署Odoo 15.0,通过GKE Ingress负载均衡暴露服务,遇到以下异常:

  • 无实时聊天活动时,/longpolling/poll接口在50秒后返回502错误
  • 模拟实时消息收发时,该接口返回200正常响应

本地Docker部署时,无活动状态下/longpolling/poll也能正常返回200,希望继续使用GKE Ingress以集成Google托管证书,寻求解决方案。

Odoo配置(odoo.conf)

[options] 
    addons_path = /mnt/extra-addons
    admin_passwd = 
    csv_internal_sep = ,
    data_dir = /var/lib/odoo
    db_host = 172.20.x.x
    db_maxconn = 64
    db_name = odoo
    db_password = odoo
    db_port = 5432
    db_sslmode = prefer
    db_template = template0
    db_user = odoo
    ;dbfilter = 
    demo = {}
    email_from = False
    geoip_database = /usr/share/GeoIP/GeoLite2-City.mmdb
    http_enable = True
    # http_interface = 127.0.0.1
    http_port = 8069
    import_partial =
    limit_memory_hard = 2684354560
    limit_memory_soft = 2147483648
    limit_request = 8192
    limit_time_cpu = 60
    limit_time_real = 120
    limit_time_real_cron = -1
    list_db = False
    log_db = False
    log_db_level = warning
    log_handler = :INFO
    log_level = debug
    logfile = 
    longpolling_port = 8072
    # xmlrpc_port = 8069
    # xmlrpc_interface = 127.0.0.1
    # netrpc_interface = 127.0.0.1
    max_cron_threads = 2
    osv_memory_age_limit = False
    osv_memory_count_limit = False
    pidfile = None
    proxy_mode = True
    reportgz = False
    screencasts = None
    screenshots = /tmp/odoo_tests
    ;server_wide_modules = openupgrade_framework
    smtp_password = False
    smtp_port = 25
    smtp_server = localhost
    smtp_ssl = False
    smtp_user = False
    ;syslog = False
    test_enable = False
    test_file = False
    test_tags = None
    translate_modules = ['all'] 
    unaccent = False
    ;upgrades_paths = 
    without_demo = True
    workers = 0

GKE Ingress配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.gcp.kubernetes.io/pre-shared-cert: ssl-odoo
    kubernetes.io/ingress.class: gce
    kubernetes.io/ingress.global-static-ip-name: gcp-lb-static-odoo
    
  labels:
    app: odoo-ingress
    app.kubernetes.io/component: odoo-ingress
    app.kubernetes.io/instance: odoo-ingress
  name: odoo-ingress
  namespace: odoo 
spec:
  defaultBackend:
    service:
      name: odoo-cls-service
      port:
        number: 8069
  rules:
  - host: odoo.dummyodoo.com
    http:
      paths:
      - path: /longpolling 
        pathType: Prefix
        backend:
          service:
            name: odoolp-cls-service # tried with dedicated or same as / 
            port:
              number: 8072
      - path: / 
        pathType: Prefix
        backend:
          service:
            name: odoo-cls-service
            port:
              number: 8069
解决方案建议

1. 调整GKE后端服务超时时间

GKE Ingress默认后端服务超时为30秒,而Odoo longpolling无活动时会保持连接约60秒,导致负载均衡提前断开返回502。需为longpolling对应的后端服务设置更长超时:

  • 使用gcloud命令更新(替换为你的服务名):
gcloud compute backend-services update odoolp-cls-service --global --timeout=70s
  • 或通过BackendConfig资源配置:
    先创建BackendConfig:
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
  name: longpolling-backend-config
spec:
  timeoutSec: 70

再为longpolling服务添加注解:

metadata:
  annotations:
    cloud.google.com/backend-config: '{"default": "longpolling-backend-config"}'

2. 同步Odoo的超时参数

在odoo.conf中调整超时设置,确保小于GKE后端服务超时:

# 全局请求超时,建议比GKE超时少5-10秒
limit_time_real = 60
# 单独设置longpolling超时(Odoo 15支持)
longpolling_timeout = 60

3. 启用会话保持(可选)

为longpolling接口启用会话保持,确保同一客户端请求路由到同一Odoo实例,避免连接异常:
在Ingress注解中添加:

metadata:
  annotations:
    ingress.gcp.kubernetes.io/affinity: "cookie"
    ingress.gcp.kubernetes.io/session-cookie-name: "GKE-AFFINITY"
    ingress.gcp.kubernetes.io/session-cookie-max-age: "86400"

4. 优化Odoo进程配置

当前workers=0为单进程模式,高并发下可能导致longpolling处理不及时,建议调整:

workers = 4
longpolling_workers = 2

分离HTTP请求与longpolling请求的处理进程,提升稳定性。

5. 修正健康检查配置

确保longpolling服务的健康检查路径正确,避免实例被误剔除:

  • 使用gcloud更新健康检查:
gcloud compute health-checks update http longpolling-health-check --request-path=/longpolling/health --port=8072 --global

内容的提问来源于stack exchange,提问作者Erlangga Er

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:03:19