使用 Gcloud 入口时服务端点出现 404

使用 Gcloud 入口时服务端点出现 404

我正在使用 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

其他一些需要补充的内容:

  1. 我让部署运行了大约 10 分钟,以确保初始启动 404 已完成
  2. 所有服务都有一个有效的健康检查端点,因此 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

相关内容