クラスタ通知

このページでは、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 通知を送信し、新しいバージョンが利用可能になったことをクラスタに知らせます。この通知は、パッチ バージョンの場合は 1 週間前に、マイナー バージョン(チャンネルによって異なります)の少なくとも 2~4 週間前に事前に通知されます。詳細については、チャンネルで利用可能なバージョンをご覧ください。

リリース チャネルに存在しないクラスタの場合、GKE は、クラスタがアップグレードできる新しいすべてのバージョンに関する UpgradeAvailableEvent 通知を送信します(現在のマイナー バージョンと次のマイナー バージョンへのパッチを含む)。

Windows Server ノードプールを使用する場合、Windows のバージョン情報は UpgradeAvailableEvent 通知の一部として送信されます。

UpgradeEvent

ユーザーまたは GKE がアップグレードを開始すると、GKE から UpgradeEvent 通知が送信されます。これにより、アップグレードが開始されたことを知ることができます。理想的には、UpgradeAvailableEvent 通知タイプを使用して、今後のアップグレードを認識し、事前にアップグレードすることや、メンテナンスの時間枠の設定などの準備に必要な対策を講じることができます。

アップグレード オペレーションの開始時に UpgradeEvent 通知が送信されます。 このオペレーション ID がメッセージで渡されます。

通知のフィルタリング

クラスタ通知をフィルタリングして、必要な通知のみを受信するようにできます。次のいずれかの方法でフィルタを適用できます。

GKE での通知のフィルタリング

クラスタ通知を有効にするときに、1 つまたは複数の使用可能な通知タイプのフィルタリングを設定するには、--notification-config フラグで filter の値を指定します。filter は、受信する通知タイプのパイプ(|)区切りリストを受け取ります。

たとえば、filter="UpgradeEvent|SecurityBulletinEvent" を指定すると、GKE は UpgradeEventSecurityBulletinEvent の通知タイプのみの通知を送信します。

filter を使用して通知をフィルタリングすると、次のようなメリットがあります。

  • 特定の構文を使用せずに通知タイプでフィルタリングするため、より簡単です。
  • フィルタした通知は Pub/Sub に送信されないので、配信されなかったメッセージに対して料金は発生しません。
  • フィルタの構成は、いつでも編集できます。

GKE で通知をフィルタリングする手順については、クラスタ通知を受信するをご覧ください。

Pub/Sub での通知のフィルタリング

Pub/Sub は、フィルタリング構文を使用したサブスクリプション内のメッセージのフィルタリングをサポートしています。この方法を使用すると、GKE はすべての通知タイプを Pub/Sub トピックに配信します。Pub/Sub は、サブスクリプションの構成に基づいてメッセージをフィルタし、受信するメッセージを配信します。

たとえば、サブスクリプションで次の構文を使用して、UpgradeEvent 通知と UpgradeAvailableEvent 通知をフィルタリングできます。

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(文字列から文字列へのマッピング)の 2 つのフィールドがあります。

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 通知タイプを送信します。ただし、ペイロードを解析して、対応する一般提供の通知タイプ(使用可能な場合)を表示できます。

クラスタ通知メッセージの例

data フィールドのテキストに加えて、GKE が Pub/Sub に送信する各メッセージには、attributes.type_url フィールドと attributes.payload フィールドに特定の値があります。次の表に、通知タイプごとに表示される情報の例を示します。

SecurityBulletinEvent

SecurityBulletinEvent メッセージの出力例を次に示します。

属性
type_url type.googleapis.com/google.container.v1.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",
         "bulletinUrl":"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":"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"}
      

次のステップ