在 kubernetes minikube 中将前端、node js 后端、mongodb 部署为微服务进行反应

react front-end, node js back-end, monogo db deployment as microservices at kuberenetes minikube

我的应用是

      React Front-end <------> Nodes js back-end <------> mongodb

源代码可以从here

下载

您可以在 minikube kubernetes

上部署上述 ./setup.sh 命令

1) mongoDB 使用 clusterIP 类型服务资源部署

2) clusterIP类型服务资源的后端节点js服务器

3) 使用 nginx 和 LoadBalancer 类型的服务资源构建前端 React

使用 mongodb 服务 FQDN 从节点 js pod 访问 monogdb pod 工作正常,因为 mongodb 服务是集群 IP 类型并且从 nodejs pod 访问工作顺利。

我在使用后端服务资源的 FQDN 从反应(构建)中使用 axios 进行通信时遇到问题。它在说:

**POST http://todo-backend-service:5000/init net::ERR_NAME_NOT_RESOLVED**

我什至尝试过使用 5000 端口而不是 FQDN 的集群 IP,但无法正常工作。

这似乎是在进行构建或其他操作后出现的问题?

解决方案将不胜感激。

所以这里的问题是前端应用程序从您的浏览器发出请求(它是客户端,而不是服务器端),这意味着您基本上需要做的是公开您的 node.js 后端

示例: 如果你使用的是 Minikube,你可以做一些简单的事情: 将您的服务类型 node.js 更改为类型 Loadbalancer:

apiVersion: v1
kind: Service
metadata:
  name: todo-backend-service
spec:
  ports:
  - port: 5000
    targetPort: 5000
  selector:
    app: todo-server-app
  type: LoadBalancer

然后您需要 运行:

minikube service todo-backend-service --url
# OUTPUT
http://192.168.99.113:30048

这个 IP 地址和端口是您的前端应该用来连接到 node.js 后端的:

curl -X POST http://192.168.99.113:30048/todo/list
# OUTPUT
{"error":"Please login first."}

Just a note here, when listing items generally you should use a GET request

示例背后的原因:

客户端应用程序加载到您的浏览器中,因此对您的后端服务发出的任何请求都需要通过外部端点,因为您的浏览器不会与您的 Kubernetes 在同一网络上 Pods