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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:09:55