集群通知


本页面介绍 Google Kubernetes Engine (GKE) 如何将包含集群配置相关事件(如可用升级和安全公告)信息的集群通知发布到 Pub/Sub

如需了解如何设置集群通知,请参阅接收集群通知

概览

当发生与 GKE 集群相关的特定事件时,例如重要的计划升级或可用安全公告,GKE 会使用消息的形式,将这些事件的通知发布到您配置的 Pub/Sub 主题。您可以在 Pub/Sub 订阅上接收这些通知,与第三方服务集成,并且可以过滤要接收的通知类型。

优势

使用 Pub/Sub 接收集群通知具有以下好处:

  • 您会收到有关为您的集群安排的更新的主动信息,便于您更好地规划测试和资格审核,并且有助于确保顺畅、可预测的升级过程。
  • 我们会在有针对您的集群的安全公告发放时通知您,为您提供准确的风险和影响信息。
  • 在有可以升级的新 GKE 版本时,您会收到通知。以前,您必须查看 GKE 版本说明GKE API 才能了解新 GKE 版本的发布时间。
  • 在 GKE 或用户启动集群升级时,您都会收到通知,从而更深入地了解集群的后台操作。
  • Pub/Sub 的可扩展性很强,让您可以灵活地处理传入通知。 例如,您可以集成 Slack 以将通知转发到 Slack 频道,或者启动 Cloud Functions 来运行自定义进程。
  • 如果需要自定义流程(例如,编排从预演环境到生产环境的工作流,以测试和认证升级),您可以使用通知自动触发这些工作流。

升级通知的类型

GKE 会发送如下类型的集群通知:

您可以过滤收到的通知,以便仅接收相关事件通知。如需过滤集群通知,您可以在启用集群通知时,在 --notification-config 标志中为 filter 指定一个值,也可以配置 Pub/Sub 订阅

SecurityBulletinEvent

当 GKE 发出与集群配置或版本直接相关的安全公告时,GKE 会发送 SecurityBulletinEvent 通知,为您提供漏洞相关信息、影响以及您可以采取的行动。

UpgradeAvailableEvent

在通过发布版本推出新版本时,GKE 会向使用该发布版本的集群发送 UpgradeAvailableEvent 通知,以告知集群已推出一个新版本。此通知针对补丁程序版本提供一周的提前通知,针对次要版本至少提前 2-4 周(具体取决于渠道)。如需了解详情,请参阅一个渠道提供哪些版本

对于未使用某个发布渠道的集群,GKE 会在发布集群可以升级到的所有新版本时(包括当前次要版本的补丁程序和下一个次要版本),发送 UpgradeAvailableEvent 通知。

如果您使用 Windows Server 节点池,则 Windows 版本信息将包含在所发布的 UpgradeAvailableEvent 通知内。

UpgradeEvent

当您或 GKE 启动升级时,GKE 会发送 UpgradeEvent 通知,告知您升级已经开始。理想情况下,您应该使用 UpgradeAvailableEvent 通知类型了解即将进行的升级,以便您可以提前升级或采取必要的行动,例如设置维护窗口

UpgradeEvent 通知会在升级操作开始时发送。操作 ID 会在消息中传递。

过滤通知

您可以过滤集群通知,以确保只接收所需通知。您可以通过以下某种方式应用过滤:

在 GKE 中过滤通知

通过在 --notification-config 标志中指定 filter 的值,您可以在启用集群通知时为一种或多种可用通知类型设置过滤。filter 接受以竖线 (|) 分隔的通知类型列表。

例如,指定 filter="UpgradeEvent|SecurityBulletinEvent" 可指示 GKE 仅发送 UpgradeEventSecurityBulletinEvent 通知类型的通知。

使用 filter 过滤通知具有以下好处:

  • 更方便易用,因为您过滤通知类型时不必使用特定语法。
  • 您过滤掉的通知绝不会发送到 Pub/Sub,因此您无需为未传送的消息付费。
  • 您可以随时修改过滤条件配置。

如需了解如何在 GKE 中过滤通知,请参阅接收集群通知

在 Pub/Sub 中过滤通知

Pub/Sub 支持使用过滤语法过滤您的订阅中的消息。使用这种方法时,GKE 会将所有通知类型传送到您的 Pub/Sub 主题。Pub/Sub 会根据您的订阅配置过滤消息,并传送您要接收的消息。

例如,您可以在订阅中使用以下语法以过滤 UpgradeEventUpgradeAvailableEvent 通知:

attributes.type_url = "type.googleapis.com/google.container.v1beta1.UpgradeEvent" OR "type.googleapis.com/google.container.v1beta1.UpgradeAvailableEvent"

您仍然需要为您的订阅过滤掉的未传送的消息付费。此外,您还无法在配置订阅后修改过滤条件。但是,过滤语法比 GKE 中的过滤更具可扩展性。

如需详细了解如何过滤 Pub/Sub 订阅,请参阅过滤消息

使用 Pub/Sub 消息

Pub/Sub 消息包含两个字段:data(字符串)和 attributes(字符串到字符串映射)。

对于 GKE 通知,data 字段包含直观易懂的信息。attributes 字段包含常规通知信息,例如通知类型、项目 ID、集群名称和集群位置。attributes.payload 字段是可由 JSON 解析的字符串,包含具体通知信息,例如安全公告的详细信息。

通知始终包含以下特性:

属性 说明 示例
project_id 拥有集群的项目编号。 123456789
cluster_location 集群的位置。 us-central1-c example-location
cluster_name 集群的名称。 example-cluster
type_url 通知的类型。 type.googleapis.com/google.container.v1beta1.UpgradeEvent
payload 包含通知特定信息的 JSON 可解析字符串。

{ "resourceType":"MASTER",
  "operation":"operation-1595889094437-87b7254a",
  "operationStartTime":"2020-07-27T22:31:34.437652293Z",
  "currentVersion":"1.15.12-gke.2",
  "targetVersion":"1.15.12-gke.9"}

GKE 将始终发送 beta 通知类型。不过,您可以解析载荷,以显示相应的 GA 通知类型(如果可用)。

示例集群通知消息

除了 data 字段中的文本之外,GKE 发送到 Pub/Sub 的每条消息在 attributes.type_urlattributes.payload 字段中都有特定的值。下表展示了对于每种通知类型,您可能会收到的信息示例:

SecurityBulletinEvent

以下是 SecurityBulletinEvent 消息的一些输出示例:

特性
type_url type.googleapis.com/google.container.v1beta1.SecurityBulletinEvent
payload

{    "resourceTypeAffected":"RESOURCE_TYPE_CONTROLPLANE",
         "bulletinId":"GCP-2021-001",
         "cveIds":[
            "CVE-2021-3156"
         ],
         "severity":"Medium",
         "briefDescription":"A vulnerability was recently discovered in the Linux utility sudo, described in CVE-2021-3156, that may allow an attacker with unprivileged local shell access on a system with sudo installed to escalate their privileges to root on the system.",
         "affectedSupportedMinors":["1.18", "1.19"],
         "patchedVersions":["1.18.9-gke.1900", "1.19.9-gke.1900"],
         "suggestedUpgradeTarget":"1.19.9-gke.1900",
         "bulletinUri":"https://cloud.google.com/anthos/clusters/docs/security-bulletins#gcp-2021-001"
      }
      

UpgradeAvailableEvent

以下是 UpgradeAvailableEvent 消息的一些输出示例:

特性
type_url type.googleapis.com/google.container.v1beta1.UpgradeAvailableEvent
payload

{ "version":"1.17.15-gke.800",
  "resourceType":"MASTER",
  "releaseChannel":{"channel":"RAPID"},
  "windowsVersions": [
    {
      "imageType": "WINDOWS_SAC",
      "osVersion": "10.0.18363.1198",
      "supportEndDate": {
        "day": 10,
        "month": 5,
        "year": 2022
      }
    },
    {
      "imageType": "WINDOWS_LTSC",
      "osVersion": "10.0.17763.1577",
      "supportEndDate": {
        "day": 9,
        "month": 1,
        "year": 2024
      }
    }
  ]
}

      

UpgradeEvent

以下是 UpgradeEvent 消息的一些输出示例:

特性
type_url type.googleapis.com/google.container.v1beta1.UpgradeEvent
payload

{ "resourceType":"MASTER",
  "operation":"operation-1595889094437-87b7254a",
  "operationStartTime":"2020-07-27T22:31:34.437652293Z",
  "currentVersion":"1.15.12-gke.2",
  "targetVersion":"1.15.12-gke.9"}
      

后续步骤