我正在使用以下入口在 Kubernetes 中运行 Hello World vuejs 应用程序:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-frontend
namespace: samples
spec:
rules:
- host: myhost.internal
http:
paths:
- backend:
serviceName: my-frontend
servicePort: 8080
path: /
tls:
- hosts:
- myhost.internal
secretName: tls-secret
status:
loadBalancer:
ingress:
- {}
哪个工作正常:
$ curl -i https://myhost.internal
HTTP/2 200
...
我需要使用 相同 主机名 (myhost.internal) 添加后端。因此,我需要更改我的前端或我的后端的路径,因为它们不能在 /
从外部访问。
我已决定要访问位于 myhost.internal/frontend
的前端,即使它在内部仍提供 /
下的内容。
基于:
https://kubernetes.github.io/ingress-nginx/examples/rewrite/
我第一次尝试:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
name: my-frontend
namespace: samples
spec:
rules:
- host: myhost.internal
http:
paths:
- backend:
serviceName: my-frontend
servicePort: 8080
path: /frontend
tls:
- hosts:
- myhost.internal
secretName: tls-secret
status:
loadBalancer:
ingress:
- {}
这似乎也能正常工作:
$ curl -i https://myhost.internal/frontend
HTTP/2 200
但是在我的浏览器中访问新网址几次(chrome 和 firefox)后,浏览器页面只是空白,没有任何错误,但是在使用 chrome 开发者模式 (F12) 进行检查时:
我在浏览器所需的不同资源上看到了很多 404。但奇怪的是它在前几次工作......
然后我尝试将我的 Ingress 更新为 (https://kubernetes.github.io/ingress-nginx/examples/rewrite/):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/enable-rewrite-log: "true"
name: my-frontend
namespace: samples
spec:
rules:
- host: myhost.internal
http:
paths:
- backend:
serviceName: my-frontend
servicePort: 8080
path: /frontend(/|$)(.*)
tls:
- hosts:
- myhost.internal
secretName: tls-secret
status:
loadBalancer:
ingress:
- {}
但在浏览器中出现与之前相同的错误(我也尝试清除浏览器缓存,隐私隐身模式)。
基于:
https://github.com/vuejs/vue-cli/issues/1955#issuecomment-565826822
我尝试在 repo 的根目录中创建 vue.config.js 文件:
module.exports = {
publicPath: ''
};
但还是一样的错误。
不确定我是否需要更新 vuejs 应用程序中的某些内容,如果它是 k8s/Ingress 未命中配置。
可能与:
https://discourse.drone.io/t/404-when-using-ingress-on-non-root-path/9358
有什么建议吗?