Kubernetes Ingress:NodeJS 应用程序显示空白页面

Dar*_*iyN 2 node.js kubernetes kubernetes-ingress

让我描述一下我今天遇到的情况:

  1. 我从开发人员处收到了 NodeJS 应用程序映像并将其发布到 AKS(Azure Kubernetes Services)

该应用程序的清单中没有任何具体内容,这是在 80 端口上提供服务的简单部署。

  1. 我已经使用 helm 包配置了 Ingress 并安装了 helm 存储库中的常用包: stable/nginx-ingress 。安装后 - 我已经开始配置 Ingress。

  2. 在我的 yaml 下面:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: app-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  rules:
  - http:
      paths:
      - backend:
          serviceName: ui-service
          servicePort: 80
        path: /(.*)
      - backend:
          serviceName: ui-service
          servicePort: 80
        path: /test-service/ui(/|$)(.*)
Run Code Online (Sandbox Code Playgroud)

好的,我正在尝试打开页面:http://1.2.3.4/ - 一切正常,我看到网页将我重定向到:

http://1.2.3.4/page1,如果我点击了某些内容 - http://1.2.3.4/page2 等。

但是,当我尝试使用以下命令打开同一个 Web 应用程序时:

http://1.2.3.4/test-service/ui,我在控制台中收到空白页面和错误:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://1.2.3.4/test-services/ui/static/css/test.css".
Run Code Online (Sandbox Code Playgroud)

我发现有什么不同:

在第二种情况下,所有 JS 和 CSS 文件都具有内容类型:text/html。

Dar*_*iyN 5

让我描述一下我是如何解决这个问题的:

在 YAML 设置中,如您所见nginx.ingress.kubernetes.io/rewrite-target: /$1

因此,对于根路径目录和应用程序 - 它应该是:

nginx.ingress.kubernetes.io/rewrite-target: /
Run Code Online (Sandbox Code Playgroud)

例如.com/example/

它应该是:

nginx.ingress.kubernetes.io/rewrite-target: /$1
Run Code Online (Sandbox Code Playgroud)

ETC。

现在,网页已正确显示。