このページでは、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 週間前に事前に通知されます。詳細については、チャネルで利用可能なバージョンをご覧ください。
UpgradeAvailableEvent
通知を送信します(現在のマイナー バージョンと次のマイナー バージョンへのパッチを含む)。
Windows Server ノードプールを使用している場合は、Windows のバージョン情報が UpgradeAvailableEvent
通知の一部として送信されます。
UpgradeEvent
ユーザーまたは GKE がアップグレードを開始すると、GKE から UpgradeEvent
通知が送信されます。これにより、アップグレードが開始されたことを知ることができます。理想的には、UpgradeAvailableEvent
通知タイプを使用することで、今後のアップグレードを認識し、事前にアップグレードすることや、メンテナンスの時間枠の設定などの準備に必要な対策を講じることができます。
アップグレード オペレーションの開始時に UpgradeEvent
通知が送信されます。このオペレーション ID がメッセージに渡されます。
通知のフィルタリング
クラスタ通知をフィルタリングして、必要な通知のみを受信するようにできます。フィルタは次のいずれかの方法で適用できます。
GKE での通知のフィルタリング
クラスタ通知を有効にするときに、使用可能な 1 つ以上の通知タイプのフィルタを設定するには、--notification-config
フラグに filter
の値を指定します。filter
は、受信する通知タイプのパイプ(|)区切りリストを使用します。
たとえば、filter="UpgradeEvent|SecurityBulletinEvent"
を指定すると、UpgradeEvent
と SecurityBulletinEvent
の通知タイプに関する通知のみを送信するように 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"} |
次のステップ
- クラスタ通知を受信する方法を確認する。
- サードパーティ サービス用のクラスタ通知を構成する方法を確認する。