使用Kong作为负载均衡部署Tiledesk后JS和CSS无法加载
问题描述
在Kubernetes中部署Tiledesk时,将默认的Nginx Ingress替换为Kong Ingress后,虽然可以通过[地址]/dashboard/访问页面,但页面的JavaScript和CSS静态资源无法加载。
原Nginx Ingress核心配置(关键部分):
ingress: annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1 nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/firebase-messaging-sw.js /chat/firebase-messaging-sw.js last; hosts: hostconsole: name: console.tiledesk.local enabled: true paths: - path: /dashboard/(.*) service: dashboard # 其他路由规则...
自行编写的Kong Ingress配置:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tiledesk-proxy-kong annotations: kubernetes.io/ingress.class: kong konghq.com/strip-path: "true" konghq.com/preserve-host: "true" # 其他注解... spec: rules: - http: paths: - backend: service: name: tiledesk-dashboard port: number: 80 path: /dashboard pathType: Prefix # 其他路由规则...
解决方案
问题出在静态资源的路径解析和Kong与Nginx的路由转发逻辑差异上,需从以下几个方面调整:
1. 调整Kong路由注解与路径规则
修改后的Kong Ingress配置如下,适配原Nginx的路由逻辑同时解决静态资源加载问题:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: tiledesk-proxy-kong annotations: kubernetes.io/tls-acme: "true" cert-manager.io/cluster-issuer: letsencrypt kubernetes.io/ingress.class: kong konghq.com/override: tiledesk-proxy-kong spec: rules: - http: paths: # API/WS服务:保留strip-path=true,匹配原Nginx的rewrite逻辑 - backend: service: name: tiledesk-server port: number: 80 path: /api/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" - backend: service: name: tiledesk-server port: number: 80 path: /ws/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" # Dashboard服务:关闭strip-path,适配静态资源相对路径 - backend: service: name: tiledesk-dashboard port: number: 80 path: /dashboard pathType: Prefix annotations: konghq.com/strip-path: "false" # CDS服务:保留strip-path=true - backend: service: name: tiledesk-cds port: number: 80 path: /cds/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" # Chat服务:保留strip-path=true,单独配置firebase-messaging-sw.js路由 - backend: service: name: tiledesk-ionic port: number: 80 path: /chat/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" - backend: service: name: tiledesk-ionic port: number: 80 path: /firebase-messaging-sw.js pathType: Exact annotations: konghq.com/strip-path: "false" # WebWidget服务:保留strip-path=true - backend: service: name: tiledesk-webwidget port: number: 80 path: /widget/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" - backend: service: name: tiledesk-webwidget port: number: 80 path: /widget-config.json pathType: Exact annotations: konghq.com/strip-path: "false" # RabbitMQ服务:保留strip-path=true - backend: service: name: tiledesk-rabbitmq port: number: 15675 path: /mqws/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true" # C21HTTPSrv服务:保留strip-path=true - backend: service: name: tiledesk-c21httpsrv port: number: 80 path: /chatapi/(.*) pathType: Prefix annotations: konghq.com/strip-path: "true"
2. 关键调整说明
- Dashboard服务关闭
strip-path:Tiledesk dashboard的静态资源(如css/app.xxx.css)使用相对路径,开启strip-path会导致/dashboard/css/app.css被转发为/css/app.css,而服务实际资源路径是/dashboard/css/app.css,关闭后请求会完整转发,避免404。 - 路径规则改为
/(.*)格式:和原Nginx路径规则对齐,结合strip-path: true实现与rewrite-target: /$1相同的前缀剥离效果。 - 单独处理
firebase-messaging-sw.js:对应原Nginx的rewrite规则,将根路径下的该请求转发到chat服务的对应路径。
3. 额外检查项
- 确认Tiledesk dashboard服务的
BASE_PATH环境变量配置正确,若服务内部期望根路径为/dashboard/,需在Deployment中添加:env: - name: BASE_PATH value: "/dashboard" - 应用新配置后,删除并重新创建Ingress,或重启Kong Pod,确保路由规则生效。
内容的提问来源于stack exchange,提问作者Andy Schmitt
相关产品推荐
相关产品推荐

