首页 文章

如何正确配置k8s nginx入口基URL替换来处理Angular客户端路由(LocationStrategy)?

提问于
浏览
6

我们在Kubernetes集群上托管了基于Angular的Web应用程序 . 此应用程序的Ingress配置为添加基本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时,ingress会将整个URL添加为在我们的场景中不正确的基础 .

例如https://server/at/test-app/some-page请求基本URL应为https://server/at/test-app/但我们收到https://server/at/test-app/some-page/

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

预先感谢您的帮助 .

最好的祝福

1 回答

  • 0

    对不起我的英文,

    我有办法解决这个问题,但也许不是最好的方法

    这是一些概念:

    • /at/test-app/some-page/ 必须路由到 /at/test-app ,这将有一个Angular App,然后Angular会处理 /some-page/

    • 非角度路径(例如:.js,.css等等)不会重写它

    • 我不知道为什么 "nginx.ingress.kubernetes.io/rewrite-target": "/at/test-app" 在我的环境中看起来不起作用(gke 1.11.6-gke.2,ingress: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"
        }
        ....
    }
    

相关问题