Google 云 运行 容器网络

Google Cloud Run Container Networking

我在 docker 容器中有一个 apps/services 系统,当我使用 docker-compose 启动它们时,使用桥接网络相互通信。

工人启动并向经理注册。经理分配工人的工作要做。为了做到这一点,工人需要知道经理在哪里,而经理需要知道工人在哪里。

我想将它们全部部署到 Google 云 运行。

目前,在 docker 中,通过 docker-compose,他们使用容器名称相互交谈。例如,工作人员可能会调用:http://manager:5000/register?name=worker1&port=5000 在启动时进行注册,然后管理器可以调用http://worker1:5000 来发送工作。这一切都归功于它们连接到同一个桥接网络。

这如何与 Google 云 运行 一起使用?据我所知,当你创建一个与容器链接的服务时,你会得到一个永久的 URL 来与你的应用程序启动后进行通信。容器中的应用不知道 URL 是什么。

我可以使用服务名称以与 docker 桥接网络相同的方式相互通信吗?

事实上,你不能像工人一样编排。实际上,云 运行 服务会回复 HTTP 请求。生成实例时,不会向管理器注册。

如果您想并行执行多个任务,请执行多个 HTTP 请求。

如果您想在同一服务的不同实例之间进行强隔离,请将并发参数设置为 1(该服务的实例同时仅处理 1 个 HTTP 请求)。

请注意,同一服务最多可以有 100 个实例。

因此,部署一个管理器服务和一个辅助服务。管理器服务使用正确的参数向工作人员执行 HTTP 请求以完成正确的工作。

注意作业持续时间。目前,超时最多可以设置为 900 秒(15 分钟)

关于命名,格式如下:https://<service-name>-<project-hash>.run.app/

Cloud 运行 当前不支持对您项目中的其他服务进行基于主机名的服务发现。

目前,最好的办法是使用环境变量或类似的东西配置您的应用所依赖的服务 URL。