我的应用是
React Front-end <------> Nodes js back-end <------> mongodb
可以从here
下载源代码您可以在minikube kubernetes的 ./ setup.sh 命令上方部署
1)使用clusterIP Type服务资源进行mongoDB部署
2)具有clusterIP类型服务资源的后端节点js服务器
3)使用nginx和LoadBalancer类型服务资源的前端React构建
使用mongodb服务从node js pod访问monogdb pod FQDN可以正常工作,因为mongodb服务是群集IP类型,并且从nodejs pod进行访问很顺利。
在使用axios从后端服务资源的FQDN进行react(build)进行通信时遇到麻烦。就是说:
**POST http://todo-backend-service:5000/init net::ERR_NAME_NOT_RESOLVED**
我什至尝试使用具有5000端口而不是FQDN的群集IP,无法正常工作。
在进行构建或其他操作之后,这似乎是一个问题吗?
解决方案将不胜感激。
答案 0 :(得分:1)
所以这里的问题是前端应用程序从您的浏览器发出请求(它是客户端,而不是服务器端),这实际上意味着您需要做的是暴露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."}
在此处仅需注意,通常在列出商品时,您应该使用GET请求
示例背后的原因:
浏览器中加载了客户端应用程序,因此,对后端服务的任何请求都必须通过外部端点进行,因为您的浏览器将与Kubernetes Pods不在同一网络上