Webhookマニフェストの生成

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

まずはMutating Webhookのマーカーを見てみましょう。

markdownview_webhook.go

// +kubebuilder:webhook:path=/mutate-view-zoetrope-github-io-v1-markdownview,mutating=true,failurePolicy=fail,sideEffects=None,groups=view.zoetrope.github.io,resources=markdownviews,verbs=create;update,versions=v1,name=mmarkdownview.kb.io,admissionReviewVersions=v1

var _ webhook.Defaulter = &MarkdownView{}

同様にValidating Webhookのマーカーを確認します。

markdownview_webhook.go

// TODO(user): change verbs to "verbs=create;update;delete" if you want to enable deletion validation.
// NOTE: The 'path' attribute must follow a specific pattern and should not be modified directly here.
// Modifying the path for an invalid path can cause API server errors; failing to locate the webhook.
// +kubebuilder:webhook:path=/validate-view-zoetrope-github-io-v1-markdownview,mutating=false,failurePolicy=fail,sideEffects=None,groups=view.zoetrope.github.io,resources=markdownviews,verbs=create;update,versions=v1,name=vmarkdownview.kb.io,admissionReviewVersions=v1

var _ webhook.Validator = &MarkdownView{}
  • path: Webhookのパスを指定します。これはcontroller-runtimeが自動的に生成するパスなので基本的には変更せずに利用します。
  • mutating: Webhookで値を書き換えるかどうかを指定します。Defaulterではtrue, Validatorではfalseを指定します。
  • failurePolicy: Webhook APIの呼び出しに失敗したときの挙動を指定します。failを指定するとWebhookが呼び出せない場合はリソースの作成もできません。ignoreを指定するとWebhookが呼び出せなくてもリソースが作成できてしまいます。
  • sideEffects: Webhook APIの呼び出しに副作用があるかどうかを指定します。これはAPIサーバーをdry-runモードで呼び出したときの挙動に影響します。副作用がない場合はNone, ある場合はSomeを指定します。
  • groups,versions,resource: Webhookの対象となるリソースのGVKを指定します。
  • verbs: Webhookの対象となるリソースの操作を指定できます。create, update, deleteなどを指定できます。
  • name: Webhookの名前を指定します。ドットで区切られた3つ以上のセグメントを持つドメイン名でなければなりません。
  • admissionReviewVersions: WebhookがサポートするAdmissionReviewのバージョンを指定します。Kubernetes 1.16以降の環境でしか動作させないのであればv1のみで問題ありません。1.15以前の環境で動作させたい場合はv1beta1も指定しましょう。

make manifestsを実行すると、マーカーの内容に基づいて以下のようなマニフェストファイルが生成されます。

manifests.yaml

---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
  name: mutating-webhook-configuration
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: webhook-service
      namespace: system
      path: /mutate-view-zoetrope-github-io-v1-markdownview
  failurePolicy: Fail
  name: mmarkdownview.kb.io
  rules:
  - apiGroups:
    - view.zoetrope.github.io
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - markdownviews
  sideEffects: None
---
apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
  name: validating-webhook-configuration
webhooks:
- admissionReviewVersions:
  - v1
  clientConfig:
    service:
      name: webhook-service
      namespace: system
      path: /validate-view-zoetrope-github-io-v1-markdownview
  failurePolicy: Fail
  name: vmarkdownview.kb.io
  rules:
  - apiGroups:
    - view.zoetrope.github.io
    apiVersions:
    - v1
    operations:
    - CREATE
    - UPDATE
    resources:
    - markdownviews
  sideEffects: None

results matching ""

    No results matching ""