我正在尝试将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 

我做错了什么?

请您参考如下方法:

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

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 



如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

希望这可以帮助。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!