集群通知


本页面介绍了 Google Kubernetes Engine (GKE) 如何将包含集群配置相关事件(例如可用或正在进行的升级、安全公告和支持终止日期)信息的集群通知发布到 Pub/Sub 和 Cloud Logging。

如需了解如何使用 Pub/Sub 设置集群通知,请参阅接收集群通知

概览

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

GKE 还会将这些通知路由到 Cloud Logging。如需在 Cloud Logging 中查找这些日志,请参阅在 Cloud Logging 中查看集群通知(预览版)

优势

集群通知具有以下优势:

  • 我们会在有针对您的集群的安全公告发放时通知您,为您提供准确的风险和影响信息。
  • 当有适用于集群的新 GKE 版本时,您会收到通知,可让您更好地规划测试和资格审核,并且有助于确保顺畅、可预测的升级过程。以前,您必须查看 GKE 版本说明GKE API 才能了解新 GKE 版本的发布时间。
  • 在 GKE 或用户启动集群升级时,以及在升级操作完成时,您都会收到通知,从而更深入地了解集群的后台操作。
  • 当您的集群运行的 GKE 次要版本已过或即将达到支持终止期限时,您会收到通知。
  • 您可以选择是使用 Pub/Sub 还是 Cloud Logging:

    • 默认情况下,集群通知会发送到 Cloud Logging。您可以使用 Cloud Logging 的所有功能,包括查询和查看日志以及配置基于日志的提醒政策
    • Pub/Sub 的可扩展性很强,让您可以灵活地处理传入通知。 例如,您可以集成 Slack 以将通知转发到 Slack 频道,或者启动 Cloud Run functions 来运行自定义流程。 如果需要自定义流程(例如,编排从预演到生产的工作流以测试和认证升级),您可以使用通知自动触发这些工作流。

升级通知的类型

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

如果您使用 Pub/Sub,则可以过滤收到的通知,以便仅接收相关事件通知。如果您在 Cloud Logging 中查看集群通知(预览版),则可以使用 Cloud Logging 的功能来过滤日志。

SecurityBulletinEvent

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

UpgradeAvailableEvent

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

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

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

UpgradeEvent

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

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

UpgradeInfoEvent

GKE 会针对不同类型的事件发送 UpgradeInfoEvent 通知,以下部分中对此进行了概述。

升级操作已完成

当 GKE 完成自动或手动升级集群的控制平面或节点的操作后,会发送通知,告知您操作已完成。操作完成后,会显示以下状态之一:

  • SUCCEEDED:GKE 成功升级了控制平面或节点。
  • FAILED:GKE 无法升级控制平面或节点。
  • CANCELED:GKE 因技术或业务原因而取消了升级操作,或者您取消了升级操作

使用通知确认升级操作是否成功。

次要版本已过或即将达到支持终止期限

如果集群运行的 GKE 次要版本即将达到标准支持终止期限或扩展支持终止期限,或者已达到上述任一里程碑,则 GKE 会发送通知,告知您必须将集群控制平面或节点升级到下一个受支持的次要版本。运行受支持的次要版本可确保您继续接收安全补丁、bug 修复和享受支持服务。GKE 会在支持终止前 30 天发送一条通知,如果集群仍在运行该次要版本,则会在支持终止时发送一条通知。

GKE 会发送集群级通知,尽管集群的多个组件可能会受到影响,并且集群可以同时运行不同的次要版本。如果次要版本即将达到标准支持终止期限,而您需要时间准备升级到受支持的版本,则可以切换到扩展发布渠道以获取长期支持。否则,GKE 会在支持终止时安排自动升级。这些通知有助于确保您为实施这些支持终止政策做好准备。

通知包含以下详细信息:

  • 受影响的集群。
  • 当前版本已过或即将达到支持终止期限。
  • 支持终止日期。

如需详细了解 GKE 次要版本的支持时间表,请参阅 GKE 次要版本生命周期

延长支持期内,新的补丁版本会更改为新的 Container-Optimized OS 里程碑

如果您的集群在延长支持期内注册了“扩展”渠道,并且 GKE 次要版本使用的 Container-Optimized OS 里程碑在次要版本之前达到支持终止期限,GKE 会发送集群通知。当在扩展渠道中提供第一个使用新里程碑的补丁版本时,GKE 会发送此通知。

此通知包含以下详细信息:

  • 受影响的集群。
  • 使用新里程碑的补丁版本。
  • 现有里程碑和新里程碑。
  • GKE 如何暂停为节点执行自动补丁升级。

使用新里程碑的补丁版本最终会成为集群的补丁自动升级目标,并且节点自动升级会暂停。集群管理员必须决定采取以下哪些后续步骤:

  • 手动将集群节点升级到使用下一个 Container-Optimized OS 里程碑的下一个补丁版本。
  • 手动将集群升级到下一个次要版本。
  • 在 GKE 将集群升级到下一个次要版本(在扩展支持即将结束时)之前,放弃补丁升级。

如需了解详情,请参阅 Container-Optimized OS 里程碑在次要版本的延长支持期结束之前达到支持终止期限

过滤发送到 Pub/Sub 的通知

您可以过滤集群通知,以确保仅在 Pub/Sub 中接收所需的通知。您可以通过以下某种方式对发送到 Pub/Sub 的通知应用过滤:

如需在 Cloud Logging 中查看和过滤通知,请参阅在 Cloud Logging 中查看集群通知(预览版)

在 GKE 中过滤发送到 Pub/Sub 的通知

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

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

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

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

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

在 GKE 中过滤通知不会影响哪些日志会显示在 Cloud Logging 中。

在 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 订阅,请参阅过滤消息

在 Cloud Logging 中查看集群通知(预览版)

如需查看 GKE 集群的日志,请参阅访问日志

在 Cloud Logging 中使用以下过滤条件查看日志,以查看所有类型的集群通知:

logName=projects/PROJECT_ID/logs/container.googleapis.com%2Fnotifications

如需查看特定集群通知类型(例如 UpgradeEvent)的日志,请使用如以下示例所示的过滤条件:

jsonPayload.@type=type.googleapis.com/google.container.v1beta1.NOTIFICATION_TYPE

NOTIFICATION_TYPE 替换为您要查看的任何日志的通知类型。

如需选择不存储这些日志,您可以配置排除项过滤条件

使用 Pub/Sub 消息

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

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

通知始终包含以下特性:

属性 说明 示例
project_id 拥有集群的项目编号。 123456789
cluster_location 集群的位置。 us-central1-c
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"}
      

UpgradeInfoEvent

对于升级操作完成时的 UpgradeInfoEvent 消息��例如针对���点池升级的示例),输出类似于以下内容:

属性
type_url type.googleapis.com/google.container.v1beta1.UpgradeInfoEvent
payload
{ "currentVersion":"1.31.1-gke.1846000",
  "endTime":"2024-11-06T17:12:54.111640650Z",
  "operation":"operation-1730912205658-de2f88a8-6290-4718-b2c1-fb19611060b8",
  "resource":"projects/PROJECT_ID/locations/CLUSTER_LOCATION/clusters/CLUSTER_NAME/nodePools/NODE_POOL_NAME",
  "resourceType":"NODE_POOL"
  "startTime":"2024-11-06T16:56:45.658321844Z",
  "state":"SUCCEEDED",
  "targetVersion":"1.31.1-gke.2105000"}
      

此输出与针对次要版本已达或接近标准支持终止期限的消息的输出不同。

后续步骤