对于本地开发,我有一个工作的迷你管.我们部署了不同的服务.现在我想将前端与后端连接起来.
前端是一个有棱有角的应用程序,并以自己的服务为生.后端是一个node.js应用程序,它也使用单独的服务,并使用DNS连接到其他内部服务,如mongodb.
现在我想从前端与后端进行通信.DNS无法正常工作,因为前端不知道如何解析命名路由.问题是告诉前端它应该使用哪个后端URL和端口发送请求?
当我第一次使用NodePort类型启动Backend服务并将url和端口复制到Frontends目标URL时,接近了唯一的工作状态.我觉得这对我来说非常不洁净.是否有另一种方法可以将后端请求的URL添加到前端?
我知道当我们在具有type ="LoadBalancer"的生产系统上部署服务时,该服务是由外部IP公开的,然后我可以从那里访问该服务.并且外部IP将在pod更新等方面永久保留.我还看到的问题是后端IP需要通过额外的提交注入到docker容器中.
编辑(1):后端服务
apiVersion: v1
kind: Service
metadata:
name: backend
labels:
app: some-app
tier: backend
spec:
type: NodePort
ports:
- port: 3000
selector:
app: some-app
tier: backend
Run Code Online (Sandbox Code Playgroud)
编辑(2):当我从客户端请求fqn时,我也得到了这个响应:
OPTIONS http://backend.default.svc.cluster.local:3000/signup/ net::ERR_NAME_NOT_RESOLVED
Run Code Online (Sandbox Code Playgroud)
首先,我将尝试解决您的特定问题
当我首次使用NodePort类型启动Backend服务并将URL和端口复制到Frontends目标URL时,进入了唯一的工作状态。我觉得这对我来说很不干净。是否有另一种方法可以将后端请求的网址发送到前端?
您在这里有两个选择1)如您所说,请使用type =“ LoadBalancer”。或2)通过您的前端服务器代理所有后端调用
我知道当我们在类型为“ LoadBalancer”的生产系统上部署服务时,该服务由外部IP公开,然后可以从那里访问该服务。并且外部IP将在Pod更新时永久存在,依此类推。我还看到的问题是,后端IP需要通过其他提交注入到Docker容器中。
如果要通过前端服务器端路由(或愿意路由)所有微服务/后端调用,并且要将前端和后端都部署在相同名称空间的同一k8s集群中,则可以使用KubeDNS add -on(如果k8s群集中尚不可用,则可以与k8s管理员联系)将后端服务名称解析为其IP。在您的前端服务器上,您的后端服务将始终可以通过其名称进行解析。
由于您的k8s群集中有kubeDNS,并且前端和后端服务都位于相同的k8s群集和相同的名称空间中,因此我们可以利用k8s的内置服务发现机制。后端服务和前端服务可以通过名称相互发现。这意味着,您可以简单地使用DNS名称“后端”从前端pod到达后端服务。因此,只需将所有后端请求通过您的前端nginx代理到您的上游后端服务即可。在前端nginx pod中,可以将域名“ backend”解析为后端服务的IP。这也将使您避免CORS头痛。此设置是可移植的,这意味着无论您是在开发阶段还是阶段还是产品中进行部署,都将其命名为“后端”
这种方法的潜在陷阱是,您的后端可能无法独立于前端进行扩展。在我拙见中,这没什么大不了的。在k8s环境中,如果需要,只需旋转更多的Pod。
只是好奇-前端服务是什么(哪种服务器技术正在将index.html传递到用户的浏览器)?是像nginx或apache httpd这样的静态服务器,还是在这里使用nodejs?
| 归档时间: |
|
| 查看次数: |
4937 次 |
| 最近记录: |