Vuejs进入kubernetes集群,刷新后nginx入口返回404

问题描述 投票:1回答:1

我正在尝试将Vue.js前端服务运行到启用了Nginx-ingress的kubernetes集群中。该应用程序有4条路由,/,/ foo /,/ bar和/ about。如果我访问该应用程序并以/以外的任何方式刷新页面,则会从nginx入口收到404错误。

我正在使用kubernetes v1.18.2版(客户端和服务器)。集群是按种类创建的(docker程序中的kubernetes),我根据https://kind.sigs.k8s.io/docs/user/ingress/#ingress-nginx中的文档设置了入口。我正在使用的示例应用程序就是这个:https://github.com/ovitor/foo

这里是使用的部署,服务和入口。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: foo
  name: foo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: foo
  template:
    metadata:
      labels:
        app: foo
    spec:
      containers:
      - image: vcml10/foo:latest
        name: foo
        ports:
          - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: foo
  name: foo
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
  selector:
    app: foo
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foo-ingress
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: foo
              servicePort: 80

我做错了什么?

vue.js nginx kubernetes kubernetes-ingress nginx-ingress
1个回答
0
投票

我认为这是因为您只有/的路径。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foo-ingress
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: foo
              servicePort: 80

如果要使其适用于/ /foo/ /bar and /about,则必须添加其他路径。

apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: foo-ingress
    spec:
      rules:
        - http:
            paths:
              - path: /
                backend:
                  serviceName: foo
                  servicePort: 80
              - path: /foo
                backend:
                  serviceName: foo
                  servicePort: 80
              - path: /bar
                backend:
                  serviceName: foo
                  servicePort: 80
              - path: /about
                backend:
                  serviceName: foo
                  servicePort: 80

OR


使用nginx入口文档中提到的regex

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: test.com
    http:
      paths:
      - path: /foo/.*
        backend:
          serviceName: test
          servicePort: 80

另外您可以看一下rewrite annotation


希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.