9

我们在 Kubernetes 集群上托管了基于 Angular 的 Web 应用程序。此应用程序的入口配置为添加基本 URL:

{
  "kind": "Ingress",
  "apiVersion": "extensions/v1beta1",
  "metadata": {
    "name": "test-app",
    "namespace": "acceptance-testing",
    ...
    "annotations": {    
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/add-base-url": "true",
      "nginx.ingress.kubernetes.io/rewrite-target": "/",
      "nginx.ingress.kubernetes.io/ssl-redirect": "true"
    }
  },
  "spec": {
    "rules": [
      {
        "http": {
          "paths": [
            {
              "path": "/at/test-app",
              "backend": {
                "serviceName": "test-app",
                "servicePort": 80
              }
            }
          ]
        }
      }
    ]
  },
  ...
}

当我们在浏览器中输入包含客户端路由部分的 URL 时,入口会将整个 URL 添加为基础,这在我们的场景中是不正确的。

例如对于https://server/at/test-app/some-page请求基本 URL 应该是https://server/at/test-app/但我们收到https://server/at/test-app/一些页面/

我们已经切换到 Angular 哈希路由位置策略,现在它可以正常工作,但我们想知道是否有某种方法可以使位置路由策略与 nginx 入口一起工作?

预先感谢您的帮助。

此致

4

1 回答 1

2

这里有一些概念:

  1. /at/test-app/some-page/必须路由到/at/test-app,这将有一个 Angular 应用程序,然后 Angular 将处理/some-page/
  2. 非 Angular 路径(例如:.js、.css 等)不要重写它
  3. 我不知道为什么"nginx.ingress.kubernetes.io/rewrite-target": "/at/test-app"看起来在我的环境中不起作用(gke 1.11.6-gke.2,入口:quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.22.0)
{
    ...
    "annotations": {    
      "kubernetes.io/ingress.class": "nginx",
      "nginx.ingress.kubernetes.io/add-base-url": "true",
      "nginx.ingress.kubernetes.io/configuration-snippet": |   <-- change to this
        rewrite /at/test-app/([^.]+)$ /at/test-app break;      <--   rewrite path if no .
      "nginx.ingress.kubernetes.io/ssl-redirect": "true"
    }
    ....
}
于 2019-02-23T13:41:47.347 回答