我们有基于Angular的Web应用程序托管在Kubernetes集群上。此应用程序的入口配置为添加基本 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/some-page/
我们已经切换到 Angular 哈希路由位置策略,现在它可以正常工作,但我们想知道是否有某种方法可以使位置路由策略与 nginx 入口一起使用?
提前感谢您的帮助。
此致敬意
这里有一些概念:
-
/at/test-app/some-page/
必须路由到/at/test-app
,这将有一个 Angular 应用程序,然后 Angular 将处理/some-page/
- 非角度路径(例如:.js、.css等(不要重写它
- 我不知道为什么
"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"
}
....
}