Webhookマニフェストの生成

AdmissionWebhookを利用するためには、MutatingWebhookConfigurationValidatingWebhookConfigurationなどのマニフェストを用意する必要があります。 controller-genでは// +kubebuilder:webhookマーカーの記述に基づいてマニフェストを生成することができます。

まずはデフォルト値を設定するWebhookのマーカーを見てみましょう。

tenant_webhook.go

// +kubebuilder:webhook:path=/mutate-multitenancy-example-com-v1-tenant,mutating=true,failurePolicy=fail,groups=multitenancy.example.com,resources=tenants,verbs=create,versions=v1,name=mtenant.kb.io

var _ webhook.Defaulter = &Tenant{}

groups,versions,resourceには、Webhookの対象となるリソースのGVKを指定します。 pathはWebhookのパスを指定しますが、これはcontroller-runtimeが自動的に生成するパスなので基本的には変更せずに利用します。 mutatingにはMutatingWebhookかどうかを指定します。 failurePolicyは、WebhookのAPIに接続できない場合など呼び出しに失敗したときの挙動を指定します。 verbsはリソースに対してどの操作をおこなったときにWebhookを呼び出すかを指定できます。

今回はテナントリソースが作成されたときだけデフォルト値を設定するように、verbsをcreateのみに変更しました。

次にバリデーションWebhookのマーカーを見てみましょう。

tenant_webhook.go

// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
// +kubebuilder:webhook:verbs=update,path=/validate-multitenancy-example-com-v1-tenant,mutating=false,failurePolicy=fail,groups=multitenancy.example.com,resources=tenants,versions=v1,name=vtenant.kb.io

var _ webhook.Validator = &Tenant{}

今回はテナントリソースが更新されたときだけバリデーションをおこなうように、verbsをupdateのみに変更しました。

make manifestsを実行するとconfig/webhook/manifests.yamlが更新されます。

results matching ""

    No results matching ""