はじめに
開発環境では、コスト削減のため業務時間外にクラスターを停止しています。ある日、これまで問題なく実行できていた停止処理が突然失敗するようになりました。
本記事では、発生した事象、調査内容、そして最終的な対処について紹介します。
TL;DR
- AKS の停止処理が、 Crossplane の
ValidatingWebhookConfigurationにより失敗した - 原因は
apiGroupsとresourcesの両方に*を含む Webhook が、AKS の停止時チェックに引っかかったため - ワークアラウンドとして Crossplane の Webhook を無効化した
- ただし Usage も使えなくなるため、影響確認が必要
環境
- AKS (Kubernetes version: 1.34.x)
- Crossplane (Version: 2.3.x)
発生した事象
2026年7月6日の業務終了後、AKS の停止処理が失敗するようになりました。Azure Portal には次のエラーが表示されていました。
The managed cluster has the following webhooks, that might prevent stop/start cluster operations, Please remove them before the operation.
1. Webhook configuration 'crossplane-no-usages':
'nousages.protection.crossplane.io'
Rule 1 has wildcard in both APIGroups and Resources.
原因
エラーメッセージに含まれるValidatingWebhookConfiguration/crossplane-no-usagesは、Crossplane の Usage 機能で利用される Webhook です。
問題となった Webhook は、以下のような設定でした。
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: crossplane-no-usages
webhooks:
- # Removed for brevity
rules:
- apiGroups:
- '*' # <----- Here!
apiVersions:
- '*'
operations:
- DELETE
resources:
- '*' # <----- Here!
scope: '*'
Usage はリソース間の依存関係を表現する機能で、削除順序の制御などに利用できます。
Usage についての詳しい説明はこちら:
https://docs.crossplane.io/latest/managed-resources/usages/
今回の環境では、ClusterProviderConfig が存在している間は UserAssignedIdentity が削除されないよう、Usage を利用していました。
調査したこと
Crossplane の実装確認
問題の Webhook は、Crossplane の実装上には以前から存在していたようです。対象ファイルの最終更新日は 2025年5月29日で、直近の変更ではありませんでした。
Crossplane 側の変更が最近でないならば、AKS 側の検査条件の変更が影響している可能性はありそうです。
Azureの仕様確認
Webhook仕様に関するMicrosoftの公式ドキュメントには、同様の説明が記載されています。
If your cluster has a ValidatingWebhookConfiguration or MutatingWebhookConfiguration whose configuration may apply to cluster-scoped resources AKS manages during stop/start (such as nodes, leases, or clusterroles), the stop operation may be rejected with a ValidationError. This includes webhooks with wildcard (*) rules on apiGroups or resources.
また、同様の問題に遭遇した事例として、Azure の Issue も確認できました。少なくとも 2025年6月時点では、この仕様が存在していたようです。最初は US リージョンへチェックが追加されて、徐々に他のリージョンへ展開されていった可能性がありそうです。
停止だけでなく AKS のアップグレードにも影響するとの情報を見かけましたが、Azure サポートに確認した限りでは、少なくとも今回の事象が直接アップグレード失敗につながるものではありませんでした。
ただ、Azure サポートにバリデーションチェックの変更有無を問い合わせたところ、発生日前後で変更は確認されなかったとのことでした。2026年7月5日までは発生せず、2026年7月6日に突然発生した根本的な原因までは特定できませんでした。
ワークアラウンド
AKS 停止が失敗する状況を解消するため、Crossplane の Webhook を無効化しました。Helm のvalues.yamlで以下を設定します。
webhook:
enabled: false
Webhook を無効化すると、Usage も利用できなくなります。削除制御に Usage を使っている場合は、影響範囲を事前に確認してください。
まとめ
Crossplane を導入した環境で、AKS の停止が突然失敗するようになりました。調査の結果、Crossplane の Webhook が原因であることが分かりました。今回の対応をまとめると、次の通りです。
- AKS 停止時に、Webhook の設定内容が問題になることがある
- 回避策として、Webhook の無効化で停止処理は復旧できた
- ただし、その代わりに Usage は利用できなくなる
同じエラーに遭遇した方の参考になれば幸いです。
本ブログに掲載している内容は、私個人の見解であり、
所属する組織の立場や戦略、意見を代表するものではありません。
あくまでエンジニアとしての経験や考えを発信していますので、ご了承ください。