配置 Cloud Pub/Sub 通知

当 Container Registry 代码库发生推送、标记或删除映像等更改时,您可以使用 Cloud Pub/Sub 接收通知。

Cloud Pub/Sub 会将与代码库相关的消息发布到名为“主题”的指定资源。订阅了 Cloud Pub/Sub 主题的应用会收到这些消息。当代码库的状态发生更改时,订阅者应用就会发送通知。

此外,您还可以配置 Cloud Pub/Sub 主题的角色和权限,以控制用户与代码库的互动方式。

创建 Cloud Pub/Sub 主题

对于想要收到通知的每个 Container Registry 项目,您需要使用 Cloud Pub/Sub 发布者应用创建一个 Cloud Pub/Sub 主题。

当代码库的状态发生更改时,发布者应用会向代码库的主题发送消息。您可以使用 GCP Console 或 gcloud 命令行工具创建主题。

创建主题时,您需要使用代码库的限定 URI。限定 URI 的格式如下:

projects/[PROJECT-ID]/topics/gcr

其中 [PROJECT-ID] 是您的 Google Cloud Platform 项目 ID。

要创建主题,请执行以下操作:

Console

  1. 转到 GCP Console 中的 Cloud Pub/Sub 主题页面。

    转到 Cloud Pub/Sub 主题页面

  2. 点击创建主题

  3. 在主题名称中输入 URI:

    projects/[PROJECT-ID]/topics/gcr
    

    其中,[PROJECT-ID] 是您的 GCP 项目 ID。

  4. 点击创建

gcloud

在推送或标记 Docker 映像的系统中,使用 shell 或终端窗口运行以下命令:

gcloud pubsub topics create projects/[PROJECT-ID]/topics/gcr

如需详细了解 gcloud pubsub topics 命令,请参阅 topics 文档

创建 Cloud Pub/Sub 订阅

每个 Cloud Pub/Sub 主题都应具有一个 Cloud Pub/Sub 订阅

订阅者应用会接收来自代码库主题的消息。订阅者需要完成事件通知、系统日志记录和应用间通信等任务。

订阅可配置为使用推送模型拉取模型

要创建订阅,请执行以下操作:

Console

  1. 转到 GCP Console 中的 Cloud Pub/Sub 主题页面。

    转到 Cloud Pub/Sub 主题页面

  2. 点击项目的主题。

  3. 点击创建订阅

  4. 输入订阅名称:

    projects/[PROJECT-ID]/subscriptions/[SUBSCRIPTION-NAME]
    

    将“传送类型”的设置保留为“拉取”。

  5. 点击创建

gcloud

在推送或标记 Docker 映像的系统中,运行以下命令:

gcloud pubsub subscriptions create [SUBSCRIPTION-NAME] --topic=gcr

如需详细了解 gcloud pubsub subscriptions 命令,请参阅 subscriptions 文档

配置 Cloud Pub/Sub 权限

您可以使用 Cloud Pub/Sub 访问控制为项目和资源配置权限。访问控制可保护您代码库的安全,并可让您使用基于角色的访问权限来管理用户权限。

您可以在 GCP Console 的 IAM 页面中或通过 IAM API 来配置 Cloud Pub/Sub 访问控制。

  • 要配置发布权限,可使用以下任何角色:所有者、编辑者、PubSub.Admin、PubSub.Editor、PubSub.Publisher

  • 要配置订阅权限,可使用以下任何角色:所有者、编辑者、PubSub.Admin、PubSub.Editor、PubSub.Subscriber

通知示例

通知以 JSON 格式的字符串形式发送。以下是从 Cloud Pub/Sub 接收的 Container Registry 通知的预期内容示例。

将映像推送到 Container Registry 时,通知负载可能如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5..."
}

将新标记推送到 Container Registry 时,通知负载可能如下所示:

{
  "action":"INSERT",
  "digest":"gcr.io/my-project/hello-world@sha256:6ec128e26cd5...",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

该消息使用 digesttag 键标识相关映像。

从 Container Registry 中删除标记时,通知负载可能如下所示:

{
  "action":"DELETE",
  "tag":"gcr.io/my-project/hello-world:1.1"
}

该消息可能包含 DELETEINSERT 作为 action 键值。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Container Registry