Google Cloud Run容器网络化

4
我有一套Docker容器的应用/服务系统,使用docker-compose启动时,它们通过桥接网络相互通信。
工作者启动并向管理器注册。管理器为工作者分配工作。要做到这一点,工作者需要知道管理器在哪里,而管理器需要知道工作者在哪里。
我想将它们全部部署到Google Cloud Run。
目前,在Docker中,它们通过容器名称相互通信。例如,工作者可能会调用:http://manager:5000/register?name=worker1&port=5000来注册启动,然后管理器可以调用http://worker1:5000发送工作。所有这些都归功于它们连接到同一个桥接网络。
使用Google Cloud Run如何运作?据我所见,当您创建与容器链接的服务时,一旦它启动,您就会得到一个永久的URL来与您的应用程序通信。容器中的应用程序不知道URL是什么。
我能否像Docker桥接网络那样使用服务名称进行相互通信?
2个回答

2
实际上,您不能像处理工人一样进行编排。事实上,Cloud Run服务会响应HTTP请求。当一个实例被创建时,没有向管理器注册。
如果您想并行执行多个任务,请执行多个HTTP请求。
如果您想在同一个服务的不同实例之间实现强隔离,请将并发参数设置为1(同一时间只有一个HTTP请求由服务实例处理)。
对于信息,您可以拥有同一个服务的最多100个实例。
因此,请部署一个管理器服务和一个工作人员服务。管理器服务使用正确的参数向工作人员执行HTTP请求以完成正确的工作。
注意作业持续时间。目前,超时时间最长可设置为900秒(15分钟)
关于命名,模式如下:https://<service-name>-<project-hash>.run.app/

了解命名约定是很有用的。谢谢! - ndtreviv
你知道在应用程序内部是否可以获取服务URL吗? - ndtreviv
你的意思是从一个 Cloud Run 服务中发现另一个 Cloud Run 服务的 URL 吗? - guillaume blaquiere
我的意思是从容器内运行的应用程序中获取容器的主机名。 - ndtreviv

2

Cloud Run目前不支持基于主机名的服务发现,以便在项目中使用其他服务。

目前,最好的方法是使用环境变量或类似方式配置应用程序所依赖的服务URL。

原始答案:最初的回答


这是我现在正在做的事情。一旦我意识到服务URL除非完全删除,否则将保持不变,这样做就最有意义了。 - ndtreviv
你知道一个应用程序是否可以检索服务URL吗? - ndtreviv
1
你的意思是“它自己”的服务URL吗?我认为我们目前没有公开这个。但是,默认情况下,Cloud Run应用程序会使用具有“编辑器”权限的服务帐户进行部署。因此,您可以使用Cloud Run REST API /客户端列出您在项目中拥有的所有服务并查找它们的URL。 - ahmet alp balkan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接