我有一个在 nodejs 上使用 React 和后端构建的前端应用程序。两者都有单独的 Docker 映像,因此在 k8s (gce) 上单独部署。
每个部署都有一个对应的 k8s 服务,比如说fe-serice
and be-service
。
我正在尝试设置一个入口,以便通过以下方式在单个域上公开这两个服务:
/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 应用程序(如预期)
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 应用程序
curl [ip]/api/foo --header "Host: my-host"
-> nodejs 应用程序
据我所见,一部分api/
工作正常,但我无法弄清楚其他所有内容,我尝试了带/不带通配符的不同组合,但它仍然无法按照我希望的方式工作。
我错过了什么?这甚至可能吗?提前致谢!