Kubernetes Ingress 路径找不到资源
Kubernetes Ingress path not finding resources
我在使用指向不同路径的路径时遇到了一些问题
Kubernetes 服务。
我正在使用路径 /secondary-app 指向辅助服务,我可以通过我的日志看到我正在正确访问该服务。
我的问题是网站上包含的任何资源,例如 /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/ break; }
它仍然需要针对我的特定应用程序进行一些调整,但这正是我需要的。
我猜你的 Ingress
配置中的 nginx.ingress.kubernetes.io/rewrite-target: /
注释不会为多路径重写目标路径带来任何成功,阅读更多 here. However, you can consider to use Nginx Plus Ingress controller, shipped with nginx.org/rewrites:
annotation and can be used for pointing URI paths to multiple services as described in this example。
你也可以考虑对现有的Ingress
使用nginx.ingress.kubernetes.io/configuration-snippet
annotation,这样可以调整重写规则到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/(.*) break;
rewrite /secondary-app/(.*) / 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
我在使用指向不同路径的路径时遇到了一些问题 Kubernetes 服务。
我正在使用路径 /secondary-app 指向辅助服务,我可以通过我的日志看到我正在正确访问该服务。
我的问题是网站上包含的任何资源,例如 /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/ break; }
它仍然需要针对我的特定应用程序进行一些调整,但这正是我需要的。
我猜你的 Ingress
配置中的 nginx.ingress.kubernetes.io/rewrite-target: /
注释不会为多路径重写目标路径带来任何成功,阅读更多 here. However, you can consider to use Nginx Plus Ingress controller, shipped with nginx.org/rewrites:
annotation and can be used for pointing URI paths to multiple services as described in this example。
你也可以考虑对现有的Ingress
使用nginx.ingress.kubernetes.io/configuration-snippet
annotation,这样可以调整重写规则到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/(.*) break;
rewrite /secondary-app/(.*) / 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