无法使用 GKE Ingress 访问 React App 中的后端服务

Cannot access backend sevices in React App using GKE Ingress

我有一个 React 应用程序,几周来我一直在尝试 运行 在 GKE 上,但我无法弄清楚 GKE Ingress。总共有 7 个微服务 运行ning,包括 React App。

我的 React 应用程序总共进行了 4 API 次调用

"/posts/create"      //creates a new post
'/posts/comments/*'  //adds a comment to a post
'/posts'             // gets posts+comments, returns empty object since no posts are created
'/posts/save'        // saves post to cloudSQL

该应用程序使用处理不同微服务之间通信的事件总线,因此我为每个应用程序创建了一个 ClusterIP 服务,并创建了额外的 NodePort 服务以在 Ingress 上使用。创建 Ingress 后,我可以访问 React 应用程序,但它说所有后端服务都不健康,我无法访问它们。我尝试通过 React 客户端以多种方式调用 API,包括(在 Chrome 控制台

中调用 // 错误
"http://query-np-srv:4002/posts" //Failed to load resource: net::ERR_NAME_NOT_RESOLVED
"http://10.96.11.196:4002/posts"(this is the endpoint for the service) //xhr.js:210 GET http://10.96.11.196:4002/posts net::ERR_CONNECTION_TIMED_OUT
"http://posts.com/posts // GET http://posts.com/posts 502 (Bad Gateway)

如果我 运行 来自客户端 pod 的任何以下命令,我都会按预期返回一个对象

curl query-srv:4002/posts
curl 10.96.12.242:4002/posts
curl query-np-srv:4002/posts

我能够让这个应用程序在 GKE 上实际工作的唯一方法是在 LoadBalancers 上公开客户端、帖子、评论和查询 pods 并将 LB IP 硬编码到 API 电话,这不是最佳做法。至少这样我知道该项目是正常运行的并且让我相信这是一个入口问题

这是我的 Github repo for project

所有 yaml 文件都位于 infra/k8s 文件夹中,我使用 test.yaml 部署入口,而不是入口-srv.yaml。此外,我没有使用 skaffold 进行部署,因此可以忽略它,因为它不会导致问题。如果有人能解决这个问题,我将不胜感激。

如果在创建入口对象后后端服务不健康,您需要检查您的健康检查。您是否检查过 GKE 是否为每个后端服务创建了健康检查?

Health checks connect to backends on a configurable, periodic basis. Each connection attempt is called a probe. Google Cloud records the success or failure of each probe. Google Cloud considers backends to be unhealthy when the unhealthy threshold has been met. Unhealthy backends are not eligible to receive new connections; however, existing connections are not immediately terminated. Instead, the connection remains open until a timeout occurs or until traffic is dropped.