kubernetes 如何解决Minikube中前端和后端Pod之间的连接问题?

nhaq1z21  于 2023-01-16  发布在  Kubernetes
关注(0)|答案(2)|浏览(238)

我正在尝试将应用程序部署到Minikube。但是,将前端Pod连接到后端Pod时遇到问题。每个部署都有一个ClusterIP服务和一个NodePort服务。
我通过浏览器访问前端,执行命令:minikube service frontend-entrypoint。当前端尝试查询后端时,它请求URL:* http://fastapi-cluster-ip-service:8000/api/v1/基线/建筑类型?建筑类型=商业 ,但状态响应为: (失败)网络::错误空响应
如果我通过cmd访问前端,请执行以下命令:kubectl exec -it react-deployment-xxxxxxxxxx-xxxxx -- sh,并在其中执行命令:
curl-X获取"http://fastapi-cluster-ip-service:8000/api/v1/基线/建筑类型?建筑类型=商业"* 我得到了我所期望的。
所以,我理解NodePorts是通过在集群中的每个节点上打开一个特定的端口,并将流量从该端口转发到服务,从而将外部流量路由到集群内部的服务,而ClusterIP则是用于只在集群内部公开服务,而无法从集群外部直接访问。同样的是不能内部连接到后端?一旦玩前端,我认为我在集群内部...
我尝试使用其他服务(如Ingress或LoadBalancer)公开集群,但是连接到前端没有成功,所以我回滚到NodePort解决方案。
参考文献:

shyt4zoc

shyt4zoc1#

我想你还不明白网站的前端部分是如何工作的。要在浏览器中显示网站,你实际上是从你托管前端的服务器/Pod下载所有所需的内容。
一旦前端下载并显示在您的浏览器上,现在您可以尝试使用IP地址或URL直接从您的浏览器/计算机访问后端。
使用URL时,浏览器将尝试使用DNS服务器解析主机名
因此,当您从浏览器读取网站时,您不在服务器/pod中,无法解析URL,因为该URL未Map到任何IP地址(或未Map到您的服务器)。这也是为什么当您使用kubectl exec进入pod时,它可以工作,因为您在网络内部,并且使用内部DNS。
正如大卫所说,要做到这一点,你需要使用某种入口从前端调用后端。而且你还需要在你的域上创建一个DNS条目(如果使用URL)。如果没有,你可以直接使用pod/服务的IP。

c9qzyr3d

c9qzyr3d2#

你得好好想想如果您通过浏览器或主机上的Postman调用API,它们对pod中的url一无所知。对于生产,需要配置入口,因此您可以像这样调用api:

https://api.mydomain.com/api/myroute

部署前端时,代码中的路径应该动态创建。
在代码中使用env变量定义路径,并在代码中使用它们。
在Kubernetes上定义一个带有路径的configMap,并将其绑定到容器。因此,当您调用前端时,它将具有正确的路径。
您可以使用主节点的IP地址和nodePort访问本地的前端。
要不使用ip地址,您可以在本地hosts文件中创建一个条目。

nodesipaddress  mydomain.local
nodesipaddress  api.mydomain.local

所以从你的浏览器你可以用mydomain到达前端。local:nodeportOfFrontend
您的前端代码应该使用API调用后端:nodeportOfApi
如果您在集群内启用了入口并在部署中创建了入口资源和LoadBalancer类型的服务,那么您可以调用Frontend和API而无需nodePort。
如果你遇到了问题,请发布你所有的kubernetes yamls.部署,服务,配置Map和入口,如果你决定使用它.

相关问题