Admission Webhook を実装する
https://kubernetes.io/blog/2019/03/21/a-guide-to-kubernetes-admission-controllers/
https://blog.container-solutions.com/a-gentle-intro-to-validation-admission-webhooks-in-kubernetes
https://tech.jxpress.net/entry/2019/12/01/kubernetes-admission-webhook-getting-started
証明書の作成
api-server から webhook へのリクエストは HTTPS のため、TLS証明書を作る必要がある
実際の運用では、 cert-manager とかで管理するのが良さそう
cert-manager のデプロイは kubebuilder が生成するマニフェストを参考にするのが良さそう?
とりあえず cfssl とかで作る
https://gist.github.com/tirumaraiselvan/b7eb1831d25dd9d59a785c11bd46c84b
https://github.com/cybozu-go/topolvm/blob/master/example/Makefile
Mutating webhook のレスポンスとしては、JsonPatch を書く
変更前のオブジェクトと変更後のオブジェクトに対して、jsonpatch のライブラリ で差分をとるのが楽そう
kubewebhook
https://github.com/slok/kubewebhook
Mutation, Validation 部分の実装に集中できる
ただ、kubewebhook 自体の実装も大きくない。使わずに一から書いてもそれほど大変ではない
vault-k8s
これ自体は Vault からシークレットを取得するためのもの
Mutating Webhook であり、実装もシンプルなので参考するのに良さそう
kubebuilder
kubebuilder にも Admission Webhook を実装する機能がある
ただこれは、カスタムリソースに対する Admission Webhook を実装するのを前提にしている気がする