【正解】B
【0からの解説】
①前提知識:
・GKE のノードの自動アップグレード:ノードプールの設定 management.autoUpgrade を有効にすると、GKE がコントロール プレーンのバージョンやリリース チャンネルに合わせてノードを自動的にアップグレードし、セキュリティ パッチが適用されたバージョンを維持します。Google はセキュリティ パッチを迅速に反映するため、自動アップグレードの利用を推奨しています。
・カスタムの組織のポリシー(カスタム制約):組織のポリシー サービスで、リソースのフィールドに対する条件を CEL 式で記述し、リソースの作成時(CREATE)や更新時(UPDATE)に強制できる機能です。GKE では container.googleapis.com/Cluster や container.googleapis.com/NodePool のフィールドを条件にできます。actionType が ALLOW の場合は「条件を満たすリソースだけを許可(それ以外はブロック)」、DENY の場合は「条件を満たすリソースを拒否」となります。組織やフォルダに適用したポリシーは、配下のすべてのプロジェクトに継承されます。
②要件の整理:多数のクラスタがさまざまなフォルダ・プロジェクトに作られる予定で、(1) すべてのノードが常に最新のリリースを実行して脆弱性リスクを下げる、(2) 管理作業を最小限にする、という 2 つの要件があります。「デプロイ前に」「大規模に」「漏れなく」強制できる仕組みが必要です。
③正解の理由:resourceTypes に container.googleapis.com/NodePool、condition に resource.management.autoUpgrade == true、actionType に ALLOW を指定したカスタム制約を作成し、組織レベルで適用すると、ノードの自動アップグレードが無効なノードプールは作成できなくなります(GKE の公式ドキュメントにも「すべてのノードプールでノードの自動アップグレードを有効にする」例としてこの制約が掲載されています)。これにより、どのチームがどのフォルダ・プロジェクトでクラスタを作っても必ず自動アップグレードが有効になり、以降のアップグレードは GKE が自動で行うため手作業も不要です。
【誤りの選択肢】
A:describe コマンドはノードプールの設定やアップグレードの情報を「確認」するだけで、最新リリースの実行を強制も自動化もしません。多数のクラスタを個別に確認する作業も発生し、管理作業の最小化にも反します。
C:新しいノードプールを作ってワークロードを移行し、古いノードプールを削除する方法(手動の Blue/Green 移行)は、アップグレードの手段としては有効です。しかしクラスタごと・リリースごとに繰り返す必要があり管理作業が非常に大きく、「常に最新」を継続的に保証する仕組みにもなりません。
D:upgrade コマンドを定期的に手動で実行する方法は作業負荷が大きく、実行漏れや遅れがあるとその間は脆弱なバージョンのまま残ります。多数のクラスタを対象とし、管理作業を最小限にするという要件に適しません。
【参考】
カスタム制約を作成する | Organization Policyセキュリティ パッチ | GKE security