我正在使用 k8s 和 gcloud 部署一个多服务应用程序,其中 Ingress 负责将请求路由到特定服务。K8s 和一般的基础设施对我来说是一个新的学习领域,所以到目前为止,我一直在反复试验,但现在我遇到了瓶颈。
我一直在尝试使用 minikube 构建部署,并且创建了一个 yaml 文件,该文件将成功地在 minikube 上本地部署所有内容而不会出现错误。您可以在此处查看完整的部署 yaml 文件:https://github.com/mwinteringham/restful-booker-platform/blob/kubes/kubes/deploy.yml
我遇到的问题是,当我在 gcloud 上运行部署时,到处都出现 404 错误。使用当前配置,我可以通过更新 /etc/hosts 以指向 rbp.info 来访问 rbp-ui,但尝试访问任何其他服务端点时,都会出现 404 错误,这意味着我无法通过登录屏幕。
Ingress 配置如下,我相信我遗漏了一些东西,但我不知道是什么。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rbp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: rbp.info
http:
paths:
- path: /booking
backend:
serviceName: rbp-booking
servicePort: 3000
- path: /room
backend:
serviceName: rbp-room
servicePort: 3001
- path: /search
backend:
serviceName: rbp-search
servicePort: 3002
- path: /
backend:
serviceName: rbp-ui
servicePort: 3003
- path: /auth
backend:
serviceName: rbp-auth
servicePort: 3004
- path: /report
backend:
serviceName: rbp-report
servicePort: 3005
- path: /*
backend:
serviceName: rbp-ui
servicePort: 3003
其他一些需要补充的内容:
- 我让部署运行了大约 10 分钟,以确保初始启动 404 已完成
- 所有服务都有一个有效的健康检查端点,因此 gcloud 会通知所有后端服务都是健康的
答案1
谢谢梅赫迪·沙里菲我设法解决了这个问题。我删除了 re-write-target 选项,然后使用通配符使路由正常工作。
最终,对于具有 /booking 和 /booking/1 等路径的 API,我必须确保已创建两个如下条目:
paths:
- path: /booking
backend:
serviceName: rbp-booking
servicePort: 3000
- path: /booking/*
backend:
serviceName: rbp-booking
servicePort: 3000