クラスタ通知


このページでは、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 Run 関数を起動して、カスタム プロセスを実行することもできます。
  • カスタム プロセスが必要な場合(たとえば、本番環境ワークフローにステージングをオーケストレーションしてアップグレードをテストおよび認定する場合)、通知を使用してそれらのワークフローを自動トリガーできます。

アップグレード通知のタイプ

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" を指定すると、UpgradeEventSecurityBulletinEvent の通知タイプに関する通知のみを送信するように GKE に指示できます。

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.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"}
      

次のステップ