Docker 如何为React应用程序&x2B;设置k8s入口;单域上的Express?

Docker 如何为React应用程序&x2B;设置k8s入口;单域上的Express?,docker,kubernetes,google-cloud-platform,kubernetes-ingress,Docker,Kubernetes,Google Cloud Platform,Kubernetes Ingress,我有一个前端应用程序,它是在nodejs上用React和后端构建的。 两者都有单独的Docker映像,因此在k8s(gce)上有单独的部署 每个部署都有相应的k8s服务,比如说fe服务和be服务 我正在尝试设置入口,以便以以下方式在单个域上公开两个服务: /api/*-路由到be服务 其他所有内容都被路由到fe服务 这是我的yaml文件: apiVersion: extensions/v1beta1 kind: Ingress metadata: name: my-ingress a

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

每个部署都有相应的k8s服务,比如说
fe服务
be服务

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

  • /api/*
    -路由到
    be服务
  • 其他所有内容都被路由到
    fe服务
这是我的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]——标题“主机:我的主机”
->React应用程序(如预期)

curl[ip]/foo——标题“主机:我的主机”
->nginx404(为什么?)

curl[ip]/api——标题“主机:我的主机”
->nginx404(为什么?)

curl[ip]/api/--标题“主机:我的主机”
->nodejs应用程序

curl[ip]/api/foo——标题“主机:我的主机”
->nodejs应用程序

据我所知,使用
api/
的部件工作正常,但我无法理解其他所有内容,我尝试了使用/不使用通配符的不同组合,但它仍然不能以我希望的方式工作

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

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

但是


/api/*不包括/api,它只包括/api/

之后的任何内容。我不认为这里的问题是您的入口,而是您的nginx设置(没有看到它!)。由于React应用程序是单页应用程序,因此您需要告诉nginx服务器始终查找
index.html
,而不是去
/usr/share/nginx/html/foo
等可能找不到的地方


我想你会找到相关的信息,例如。祝你好运@Andrey,如果这有什么帮助,请告诉我

我希望我的回复不会太晚。请使用注释以确保它映射到您的服务端点。请确保在重置结束时完成react app服务映射。使用以下yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
  - host: my-host
    http:
      paths:
      - path: /api/?(.*)
        backend:
          serviceName: be-service
          servicePort: 5000
       - path: /?(.*)
        backend:
          serviceName: fe-service
          servicePort: 80


正如@doe1331所说,路径/api/*包含对/api/的调用,但不包括对/api的调用,仔细检查/foo是否存在于fe服务下,这可能是404的原因。@Andrey你找到解决方案了吗?@Andrey:我现在对GKE Ingres也有类似的问题,你解决了吗?@Santhosha当时没有。但这已经是很久以前的事了:)现在我在一个私有集群上使用Traefik来做类似的事情,而且效果很好fine@Andrey:感谢您的更新,我正在使用ingress nginx/ingress gce研究类似的主题。。以防万一,如果您在google kubernetes集群上使用过nginx ingress controller吗?如果是,我想知道您是否必须安装它/如何在集群上启用它