首页 文章

如何在单个域上为React app Express设置k8s入口?

提问于
浏览
0

我有一个使用React和后端在nodejs上构建的前端应用程序 . 两者都有一个单独的Docker镜像,因此在k8s(gce)上有一个单独的部署 .

每个部署都有相应的k8s服务,比方说 fe-sericebe-service .

我正在尝试设置Ingress,以便以下列方式在单个域上公开这两个服务:

  • /api/* - 被路由到 be-service

  • 其他一切都被路由到 fe-service

这是我的yaml文件:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: my-host
    http:
      paths:
      - path: /*
        backend:
          serviceName: fe-service
          servicePort: 80
      - path: /api/*
        backend:
          serviceName: be-service
          servicePort: 5000

这是我用curl得到的:

curl [ip] --header "Host: my-host" - > React app(按预期方式)

curl [ip]/foo --header "Host: my-host" - > nginx 404(为什么?)

curl [ip]/api --header "Host: my-host" - > nginx 404(为什么?)

curl [ip]/api/ --header "Host: my-host" - > nodejs app

curl [ip]/api/foo --header "Host: my-host" - > nodejs app

至于我可以看到 api/ 的一部分工作正常,但我无法弄清楚其他一切,我尝试使用/不使用通配符的不同组合,但它仍然无法按照希望它工作的方式工作 .

我错过了什么?这有可能吗?提前致谢!

2 回答

  • 0

    我不认为这里的问题是你的入口,而是你的nginx设置(没有看到它!) . 由于React应用程序是单页面应用程序,您需要告诉nginx服务器始终查找 index.html 而不是去寻找例如 /usr/share/nginx/html/foo 哪里可能找不到任何东西 .

    我想你会找到相关信息,例如here . 祝好运!

  • 0

    我无法解释为什么/ foo不起作用

    / api / *在/ api /之后只覆盖/ api

相关问题