【发布时间】:2020-08-15 21:40:49
【问题描述】:
我有一个问题,我正在 [hostname]/product/console 上部署一个应用程序,但是正在从 [hostname]/product/static 请求 .css .js 文件,因此它们没有被加载,我得到了404.
我已经尝试nginx.ingress.kubernetes.io/rewrite-target: 无济于事。
我也尝试过使用:nginx.ingress.kubernetes.io/location-snippet: |
location = /product/console/ {
proxy_pass http://[hostname]/product/static/;
}
但后者似乎根本没有被 nginx 控制器拾取。这是我的 ingress.yaml
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-resource
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
# nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/location-snippet: |
location = /product/console/ {
proxy_pass http://[hostname]/product/static/;
}
spec:
rules:
- host: {{.Values.HOSTNAME}}
http:
paths:
- path: /product/console
backend:
serviceName: product-svc
servicePort: prod ##25022
- path: /product/
backend:
serviceName: product-svc
servicePort: prod #25022
-- 可以请教一些指点吗?我一直在尝试用谷歌搜索并尝试了一些不同的变体,但我似乎做错了什么。谢谢!
【问题讨论】:
-
您是否尝试过在 Kubernetes 之外运行您的应用程序?它在那里工作吗?您是否尝试过使用像
kubernetes.io/ingress.class: "nginx"这样没有其他注释的基本解决方案和像:"path: /*"这样的基本路径? -
嘿@DawidKruk 谢谢!我试过了,但还是一样。问题似乎是,当我使用公共 dns
dns/product/console/时,资产位于dns/product/static。请求的 URL 似乎是IP Address:80。我想添加代理通行证,但似乎对我不起作用。不知道是不是和具体版本有关,我也在GKE上。 -
我从您的配置中看到,
/product/console和/product/static/your_files在同一个服务中(因此是 pod)。当rewrite-target不存在时,这不会产生任何问题,nginx-ingress上没有进行额外的配置,并且路径在/*上设置,假设它在 Kubernetes 之外工作。我没有听说你在 Kubernetes 之外尝试过它。你能澄清一下吗?我用index.html和一些css做了一个简单的例子。我可以发布它以供参考,但我不确定这是否有助于解决您遇到的这个确切问题。 -
@DawidKruk 嘿,是的,我确实尝试在本地运行它,它工作得很好。例外是当我在 localhost 上运行它时,我使用的是 localhost:port 而不是公共 dns。我认为重写应用程序以使静态资产可配置可能是一种方式。但是,如果您有一个可能有帮助的示例,我仍然会很感激。干杯
-
在这种情况下使用
HOSTNAME/和localhost:port如果您没有类似nginx之类的东西在localhost 上重写您的请求,则不会有什么不同。根据您对Ingress的配置,您能否确认您要实现的目标是:1)向/product 请求/product 传递请求时 2)向/product/static 请求/product/console 传递请求时。我将发布我的示例以及一些故障排除步骤。
标签: nginx kubernetes kubernetes-ingress nginx-config nginx-ingress