I have an Odoo 14 app running on GKE cluster. The multiprocessor mode has been enabled by setting `workers = 2`. I chose the default GKE ingress to route the requests that match `/longpolling/*` to the longpolling port and the rest to the normal port.
Here's how I configure my GKE ingress.
```
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 }
```
The Kubernetes Service looks like this.
```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" } } }
```
The custom backend config `long-polling-be-config` is as follows.
```
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
```
The health check for port 8069 is defined in the Kubernetes Deployment as follows.
```readiness_probe { http_get { path = "/web/database/selector" port = "8069" } initial_delay_seconds = 15 period_seconds = 30 }
```
The backend is healthy but I am still seeing this error once every minute or so.
```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
```
I basically tried to follow the documentation here - https://www.odoo.com/documentation/14.0/administration/install/deploy.html#https - by implementing a GKE ingress rather than an nginx ingress.
Can somebody point what I have missed or did wrong?