我的AKS群集中有两个SPA dotnetcore / Angular站点正在运行,并且正在尝试配置入口服务以将流量路由到每个站点。当前,这两个应用程序都位于单独的群集IP服务之后,并且肯定正在运行。我还测试了它们在Docker容器中运行的情况,并且知道在配置的端口上均可访问它们。如果我将其中一个应用程序配置为可通过根子路径/?(.*)
进行路由,则站点将正确加载。
但是,通过任何其他子路径/another/?(.*)
路由的另一个应用程序无法加载任何静态(JS,CSS等)文件-请求似乎返回index.html。
来自ingress-controller.yaml
...
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: cluster-ip-app-1
servicePort: 5001
- path: /app2/?(.*)
backend:
serviceName: cluster-ip-app-2
servicePort: 5003
Cluster-ip-app-1被配置为像基础应用程序一样侦听端口5001。对于app-2(在端口5003上)也可以这么说。
我也尝试过添加各种服务器代码片段/配置代码片段(例如不必同时),但无济于事。
nginx.ingress.kubernetes.io/server-snippet (or configuration-snippet): |
root /path/to/dist;
index index.html index.htm;
location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.html break;
}
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
try_files $uri $uri/ /index.html?$args =404;
try_files $uri /index.html =404;
include /etc/nginx/mime.types;
rewrite /path/to/dist/([^.]+)$ /app/ClientApp/dist break;
rewrite /app2/?(.*) / break;
在上述配置中,通过https访问PIP时,app-1会正确加载。但是,当尝试访问https:/// app2 /时,某些静态文件请求失败,而其他静态文件请求似乎正在返回索引页,而不是文件本身。
如果这是解决此问题的唯一方法,应该有可能为PIP设置一些别名记录。
最近,有没有针对新手的良好Nginx配置教程(如果它更适合于nginx入口,则是额外的奖励)? ?
感谢您对高级的帮助!
答案 0 :(得分:1)
您应该做的是,首先在注释中添加一行:
nginx.ingress.kubernetes.io/use-regex: "true"
尝试将位置规则更改为:- path: /app2(/|$)(.*)
,并将重写注释更改为:nginx.ingress.kubernetes.io/rewrite-target: /$2
。它将类似于以下内容:
...
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- http:
paths:
- path: /?(.*)
backend:
serviceName: cluster-ip-app-1
servicePort: 5001
- path: /app2(/|$)(.*)
backend:
serviceName: cluster-ip-app-2
servicePort: 5003
您要根据请求URL进入app1或app2。另外,请查找有关映射each path to different services的文档。
如果您仍在寻找有趣的Nginx Ingress配置教程,我将为您推荐这两个:
希望对您有帮助。