配置集群以通过电子邮件接收通知


本教程介绍如何配置应用集成以通过电子邮件接收 Google Kubernetes Engine (GKE) 集群通知

您可以创建与 Pub/Sub 触发器的集成,以监听接收来自 GKE 集群的通知的现有主题。然后,您可以使用数据映射和数据转换器任务来转换 Pub/Sub 消息并构建纯文本电子邮件正文。

目标

  • 创建应用集成应用以接收和转换来自 GKE 的外部通知。
  • 编写用于将 Pub/Sub 通知发送到电子邮件的“发送电子邮件”任务。

费用

在本文档中,您将使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用情况来估算费用。 Google Cloud 新用户可能有资格申请免费试用

完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the GKE, Application Integration and Pub/Sub APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the GKE, Application Integration and Pub/Sub APIs.

    Enable the APIs

  8. 启用 GKE 集群通知。
  9. 如果您是首次在项目中使用 Application Integration,请确保您已设置 Application Integration

所需的角色

如需确保 service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com 拥有为集群通知设置电子邮件通知所需的权限,请让管理员向 service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com 授予项目的以下 IAM 角色:

为 GKE 集群设置集群通知

如需使用 Pub/Sub 接收有关 GKE 集群的通知,请参阅接收集群通知

创建新的集成

如需创建新的集成,请执行以下步骤:

  1. 前往 Google Cloud 控制台中的 Application Integration 页面。

    转到 Application Integration

  2. 在导航菜单中,点击集成。系统会显示集成页面。

  3. 点击创建集成

  4. 集成名称中,输入您要创建的集成的名称。

  5. 如果您已启用多个区域,系统会显示一个下拉菜单选项,供您选择集成所需的区域。如果仅启用了一个区域,则系统会默认使用该区域,并且不会显示下拉菜单。

    注意区域下拉列表仅列出您的 Google Cloud 项目中预配的区域。如需预配新区域,请点击框底部的 Enable Region

  6. 点击创建以打开集成编辑器。

添加并配置 Pub/Sub 触发器

如需将 Pub/Sub 触发器添加到集成中,请按以下步骤操作:

  1. 在集成编辑器中,选择触发器以显示可用触发器列表。

  2. 点击 Pub/Sub 触发器元素,并将其放置在设计器中。

  3. 点击集成编辑器中的 Pub/Sub 触发器 (Cloud Pub/Sub Trigger) 元素以查看触发器配置窗格。

  4. 按照以下格式在 Pub/Sub 主题字段中指定触发器应监听的主题:

    projects/PROJECT_ID/topics/TOPIC_ID
    

    替换以下内容:

  • PROJECT_ID:创建主题的 Google Cloud 项目。

  • TOPIC_ID:您在设置环境中创建的 Pub/Sub 主题的 ID。

    例如,如果您的项目命名为 my-project 并将主题命名为 gke-notifications,请输入:

    projects/my-project/topics/gke-notifications
    

    如需查看 Google Cloud 项目中所有可用的主题,请查看主题中的主题名称列。 Pub/Sub 触发器配置面板将自动使用变量填充触发器输出字段以保存 Pub/Sub 消息。

添加并配置“数据映射”任务

数据映射任务有助于从 Pub/Sub 通知中提取相关变量。它将 Pub/Sub 消息 JSON 文件作为输入,并提取变量作为输出。

如需配置数据映射任务,请执行以下操作:

  1. 选择任务以显示可用任务的列表。

  2. 点击数据映射元素,并将其放置到集成编辑器中。

  3. 点击设计器上的数据映射任务以打开任务的配置窗格。

  4. 如需添加从 Pub/Sub 触发器到数据映射的边缘连接,请将指针悬停在 Pub/Sub 触发器上的控制点上,然后将线条拖动到数据映射任务上的控制点。边缘表示从 Pub/Sub 触发器到数据映射任务的控制流。

  5. 点击打开数据映射编辑器。 借助数据映射编辑器,您可以使用可用的转换函数将输入变量映射为所选的输出变量。然后,输出可用作任何其他集成任务或触发器的变量。如需详细了解 Application Integration 中的变量,请参阅变量

    在本教程中,请按照以下步骤使用 CloudPubSubMessage 作为输入来创建映射:

    1. 展开变量列表中的 CloudPubSubMessage JSON 变量,然后将 CloudPubSubMessage.data 变量拖动到第一个输入行。
    2. 如需创建一个新变量来存放转换后的数据的值,请点击输出列中的第一行。然后,执行以下操作:
      1. 名称字段中,输入 message_data
      2. Variable Type(变量类型)列表中,选择 Output from integration(集成输出)。
      3. 数据类型列表中选择字符串
      4. 点击创建message_data 变量会显示在输出中。
    3. CloudPubSubMessage.attributes 变量从 Variables 列表拖动到“输入”列中的第二行。
    4. 点击输出列中的第二行,以创建一个新的输出变量来存放包含集群属性的 JSON 载荷的值。填写以下字段:

      1. 名称字段中,输入 attributes
      2. 变量类型列表中,选择
      3. 数据类型列表中选择 JSON
      4. JSON 架构选项中选择输入 JSON 架构,然后粘贴以下载荷:

        {
          "$schema": "http://json-schema.org/draft-07/schema#",
          "type": "object",
          "properties": {
            "cluster_name": {
              "type": "string"
            },
            "payload": {
              "type": "string"
            },
            "project_id": {
              "type": "string"
            },
            "cluster_location": {
              "type": "string"
            },
            "type_url": {
              "type": "string"
            }
          }
        }
        
      5. 点击创建attributes 变量会显示在输出中。确保 attributes 变量如下所示:

        Application Integration Local Variables

    5. 点击输入列中的第三行,然后从变量窗格中选择 attributes.cluster_name。您可能需要开始输入属性,才能看到在前一步中输入的架构中定义的所有 5 个属性。

    6. 点击输出列中的相应行,以创建一个新的输出变量,用于存储集群名称属性的值。填写以下字段:

      1. 名称字段中,输入 cluster_name
      2. Variable Type(变量类型)列表中,选择 Output from integration(集成输出)。
      3. 数据类型列表中选择字符串
      4. 点击创建cluster_name 变量会显示在输出中。
    7. 针对 project_idcluster_locationtype_urlpayload 重复步骤 ef

    8. 映射完成后,关闭数据映射编辑器。所有更改都将自动保存。

添加并配置“数据转换器(脚本)”任务

数据转换器任务会将从数据映射任务中提取的变量作为输入,并将其转换为消息正文供最终用户使用。

如需配置数据转换器任务,请执行以下操作:

  1. 选择任务以显示可用任务的列表。
  2. 点击数据转换器(脚本)元素,并将其放置到集成编辑器中。
  3. 点击设计器上的数据转换器任务,以打开该任务的配置窗格。
  4. 如需添加从数据映射任务到数据转换器任务的边缘连接,请将指针悬停在数据映射上的控制点上,然后将线条拖动到数据转换器任务上的控制点。边缘表示从数据映射任务到数据转换器任务的控制流。
  5. 点击打开数据转换器编辑器。借助数据转换器编辑器任务,您可以编写、修改和评估自定义 Jsonnet 模板,以便在集成中执行数据映射。然后,输出可用作任何其他集成任务或触发器的变量。如需详细了解此转换器任务,请参阅数据转换器任务。在本快速入门中,请按照以下步骤创建脚本:

    1. 点击变量左侧面板中的 Create。此时,右侧会打开一个创建变量面板。填写以下字段:

      • 名称:输入 full_message
      • 变量类型下拉框中选择 Output from integration
      • 数据类型下拉框中选择 String
      • 点击创建以创建变量并关闭窗格。 新的 full_message 变量将显示在变量列表中。
    2. 选择脚本

    3. 从集群发送通知时,请将以下示例脚本用作消息正文的模板:

      local message_data = std.extVar("message_data");
      local cluster_name = std.extVar("cluster_name");
      local project_id = std.extVar("project_id");
      local cluster_location = std.extVar("cluster_location");
      local type_url = std.extVar("type_url");
      local payload = std.extVar("payload");
      
      {full_message: "Project ID: " + project_id + "\n" +
                    "Cluster Name: " + cluster_name + "\n" +
                    "Location: " + cluster_location + "\n" +
                    "Event Type: " + type_url + "\n" +
                    "Message: " + message_data + "\n" +
                    "Payload: " + std.manifestJson(std.parseJson(payload))}
      
    4. 映射完成后,关闭数据映射编辑器。所有更改都将自动保存。

添加并配置“发送电子邮件”任务

如需配置“发送电子邮件”任务,请执行以下操作:

  1. 在集成编辑器中选择任务以显示可用任务列表。
  2. 点击发送电子邮件元素,并将其放入集成编辑器中。
  3. 如需添加从数据转换器任务到“发送电子邮件”任务的边缘连接,请将光标悬停在数据转换器任务上的控制点上,然后将线条拖到“发送电子邮件”任务上的控制点。边缘表示从“数据转换器”任务到“发送电子邮件”任务的控制流。
  4. 点击设计器上的发送电子邮件元素以打开任务的配置窗格。设置以下属性:
    1. 收件人:输入电子邮件地址。您将使用此电子邮件来确认集成已成功完成。
    2. 主题:输入 GKE Notifications
    3. 纯文本正文:选择之前在数据转换器任务中创建的 full_message 变量。
    4. 其余选项可以保留默认配置。

系统会自动保存您对属性的更改,并且您的画布应如下所示:

Application Integration 画布

测试集成

如需测试新的集成,请转到集成图表顶部的导航栏,然后点击测试。系统会在右侧打开一个面板。您可以在添加 JSON 值部分中使用以下 Pub/Sub 消息示例:

{
  "data": "Node pool projects/my-project/locations/us-central1-c/clusters/cluster-1/nodePools/default-pool is upgrading to version 1.29.1-gke.1589017.",
  "attributes": {
    "cluster_location": "us-central1-c",
    "cluster_name": "cluster-1",
    "payload": "{\"resourceType\":\"NODE_POOL\",\"operation\":\"operation-upgrade\",\"operationStartTime\":\"2024-05-07T20:09:35.528855756Z\",\"currentVersion\":\"1.28.7-gke.1026000\",\"targetVersion\":\"1.29.1-gke.1589017\",\"resource\":\"projects/my-project/locations/us-central1-c/clusters/cluster-1/nodePools/default-pool\"}",
    "project_id": "my-project",
    "type_url": "type.googleapis.com/google.container.v1beta1.UpgradeEvent"
  }
}

点击 Test Integration 按钮后,系统会向您在“发送电子邮件”任务中配置的电子邮件地址发送电子邮件。

发布集成

成功测试此集成后,点击集成的发布以开始处理消息。

您只能修改 DRAFT 版本的集成,并且只能执行 ACTIVE 版本的集成。如果您想修改集成,请点击集成设计器页面上的启用修改,然后创建草稿版本。如需了解详情,请参阅集成修改锁定

清理

为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。

删除项目

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

删除各个资源

  1. 删除应用集成

  2. 删除 Pub/Sub 主题

后续步骤