odoo - Odoo 14 longpolling bus.Bus 在 GKE Ingress 后面运行不可用
问题描述
我有一个在 GKE 集群上运行的 Odoo 14 应用程序。多处理器模式已通过设置启用workers = 2
。我选择了默认的 GKE 入口将匹配的请求路由/longpolling/*
到长轮询端口,其余的请求路由到普通端口。
以下是我配置 GKE 入口的方式。
入口.tf
resource "kubernetes_ingress" "ingress_service" {
metadata {
name = "ingress-service"
annotations = {
"networking.gke.io/managed-certificates": "subdomain-company-com"
"networking.gke.io/v1beta1.FrontendConfig": "frontend-config" # for https redirection
}
}
spec {
rule {
host = "dev.company.com"
http {
path {
path = "/*"
backend {
service_name = kubernetes_service.core_service.metadata.0.name
service_port = kubernetes_service.core_service.spec.0.port.0.port
}
}
}
}
rule {
host = "dev.company.com"
http {
path {
path = "/longpolling/*"
backend {
service_name = kubernetes_service.core_service.metadata.0.name
service_port = kubernetes_service.core_service.spec.0.port.1.port
}
}
}
}
}
wait_for_load_balancer = true
}
Kubernetes 服务看起来像这样。
resource "kubernetes_service" "core_service" {
metadata {
name = "core-service"
annotations = {
"cloud.google.com/backend-config" = jsonencode({
"ports" = {
"longpolling" = "long-polling-be-config"
}
})
}
}
spec {
type = "NodePort"
selector = {
app = "core"
}
port {
name = "normal"
port = 8080
protocol = "TCP"
target_port = "8069"
}
port {
name = "longpolling"
port = 8081
protocol = "TCP"
target_port = "8072"
}
}
}
自定义后端配置long-polling-be-config
如下。
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
name: long-polling-be-config
spec:
healthCheck:
checkIntervalSec: 30
healthyThreshold: 5
type: HTTP
requestPath: /web/database/selector
port: 8081
端口的健康检查8069
在 Kubernetes 部署中定义如下。
readiness_probe {
http_get {
path = "/web/database/selector"
port = "8069"
}
initial_delay_seconds = 15
period_seconds = 30
}
后端是健康的,但我仍然每分钟左右看到一次这个错误。
2021-07-10 12:41:24,014 15 INFO odoo werkzeug: 10.2.0.1 - - [10/Jul/2021 12:41:24] "POST /longpolling/poll HTTP/1.1" 200 - 1 0.001 0.010
2021-07-10 12:41:24,739 15 INFO ? werkzeug: 10.2.0.1 - - [10/Jul/2021 12:41:24] "GET /web/database/selector HTTP/1.1" 200 - 6 0.008 0.102
2021-07-10 12:41:29,106 15 INFO ? werkzeug: 10.2.0.1 - - [10/Jul/2021 12:41:29] "GET /web/database/selector HTTP/1.1" 200 - 6 0.009 0.076
2021-07-10 12:41:54,054 14 ERROR odoo odoo.http: Exception during JSON request handling.
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/usr/lib/python3/dist-packages/odoo/http.py", line 683, in dispatch
result = self._call_function(**self.params)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 359, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 347, in checked_call
result = self.endpoint(*a, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 912, in __call__
return self.method(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 531, in response_wrap
response = f(*args, **kw)
File "/usr/lib/python3/dist-packages/odoo/addons/bus/controllers/main.py", line 35, in poll
raise Exception("bus.Bus unavailable")
Exception
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/odoo/http.py", line 639, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/usr/lib/python3/dist-packages/odoo/http.py", line 315, in _handle_exception
raise exception.with_traceback(None) from new_cause
Exception: bus.Bus unavailable
我遵循了这个问题的解决方案,它是通过 nginx 反向代理。如何使用 GKE 入口复制它?
解决方案
推荐阅读
- multithreading - 图片未在视图控制器启动 Swift 时加载
- html - 为什么 HTML 可拖动元素与父背景一起拖动?
- python - if python语句中的多个and
- angular - 如何在浏览器中有效地渲染数百个角高图而不会崩溃?
- reactjs - 使 Antd 的 TreeSelect 和 Tree 组件可访问(使用 tab 键时突出显示)
- c# - 为什么要计算通过聚合实现的 mongodb C# LINQ 驱动程序?
- ansible - LooseVersion 实例没有属性版本 - openshift 错误中的 awx 安装
- html - 如何将带有格式的文本区域数据发送到数据库并以相同的方式检索它
- javascript - 单击提交后如何将文本从输入设置到另一个元素?
- reactjs - socket.io 中的一个客户端的连接事件被无限次触发