Vuejs 前端使用 nginx.ingress.kubernetes.io/rewrite-target 注释在 kubernetes 中给出 404

时间:2021-07-31 07:21:21

标签: vue.js nginx kubernetes

我正在使用以下入口在 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:
    - {}

哪个工作正常:

enter image description here

$ 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) 进行检查时:

enter image description here

我在浏览器所需的不同资源上看到了很多 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

有什么建议吗?

0 个答案:

没有答案
相关问题