【发布时间】:2018-08-14 21:39:49
【问题描述】:
我有一个使用 React 构建的前端应用程序和基于 nodejs 的后端。 两者都有单独的 Docker 映像,因此在 k8s (gce) 上单独部署。
每个部署都有一个对应的 k8s 服务,比如说fe-serice 和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/ 的部分工作正常,但我无法弄清楚其他所有内容,我尝试了带/不带通配符的不同组合,但它仍然无法按我想要的方式工作工作。
我错过了什么?这甚至可能吗? 提前致谢!
【问题讨论】:
-
正如@doe1331 所说,路径 /api/* 涵盖对 /api/ 的调用,但不包括对 /api 的调用 仔细检查 /foo 是否存在于 fe-service 下,这可能是 404 的原因。
-
@Andrey 你找到解决方案了吗?
-
@Andrey :我现在遇到了与 GKE 入口类似的问题,你解决了这个问题吗?
-
@Santhosha 在那一刻不,我没有。但那已经是前一阵子了 :) 现在我在私有集群上使用 Traefik 来做类似的事情,它工作正常
-
@Andrey:感谢您的更新,我正在使用 ingress-nginx / ingress-gce 研究类似的主题。以防万一,您是否曾在谷歌上使用过 nginx-ingress 控制器Kubernetes集群?如果是,我想知道您是否必须安装它/如何在集群上启用它
标签: docker kubernetes google-cloud-platform kubernetes-ingress