使用路径指向不同的Kubernetes服务。
我使用路径/辅助应用指向一个辅助服务,通过日志我可以看到我正确地访问了该服务。
我的问题是,网站上任何包含的资源,比如说/css/main.css,最终都找不到,导致404。
这是我的入口的精简版本:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/rewrite-target: /
name: my-app
spec:
rules:
- host: my-app.example.com
http:
paths:
- backend:
path: /
serviceName: my-app
servicePort: http
- backend:
path: /secondary-app
serviceName: secondary-app
servicePort: http
我尝试了一些方法,但都没能成功。我可能需要重写一些apache吗?
如有任何帮助,我们将不胜感激。
编辑-解决方案
由于@mk_sta的一些帮助,我能够通过使用nginx.ingress.kubernetes.io/configuration-snippet
注释使我的辅助服务应用程序正常工作,如下所示:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($request_uri = '/?%secondary-app') { rewrite /(.*) secondary-app/$1 break; }
它仍然需要对我的特定应用程序进行一些调整,但这正是我所需要的
我想Ingress
配置中的nginx.ingress.kubernetes.io/rewrite-target: /
注释不会为多路径重写目标路径带来任何成功,请在此处阅读更多信息。但是,您可以考虑使用nginx.org/rewrites:
注释附带的Nginx Plus Ingress控制器,该控制器可用于将URI路径指向本例中所述的多个服务。
您还可以考虑对现有的Ingress
使用nginx.ingress.kubernetes.io/configuration-snippet
注释,它可以将重写规则调整到Nginx位置,类似于:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 50m
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite /first-app/(.*) $1 break;
rewrite /secondary-app/(.*) /$1 break;
name: my-app
spec:
rules:
- host: my-app.example.com
http:
paths:
- backend:
path: /first-app
serviceName: my-app
servicePort: http
- backend:
path: /secondary-app
serviceName: secondary-app
servicePort: http