2019の1日目の記事です。こんにちは、SREのたっち(TatchNicolas)です。Webhooksについて書きます。WebhooksとはKubernetesリソースを操作(CREATE/UPDATE)する時に、作成や変更の内容をチェックしたり、書き換えたりすることができる機能です。考えることが色々サンプルコードは以下に置いてあります。Webhooksを作ってみます。v1.16を使います。v1.4.0を利用しました。*1Webhookを書いてServiceとして動かすでは早速、Webhookを実装しましょう。要は、kube-apiserverからJSONを受け取ってJSONを返すことができれば良いので言語やフレームワークは何でも良いです。前述の通り今回は手軽さ最優先でFlaskを使います。最低限のValidationは非常にシンプルで、以下のようなレスポンスを返すだけです。}}実際に書いたコードはこちら。フィールドにメッセージを入れてみました。kubectlによるPod作成時にValidationに失敗した場合、このメッセージが返ってきます。これをDeploymentとしてデプロイし、Serviceとして叩けるようにします。*2今回は同じクラスタ内から利用するのでClusterIPだけで十分です。真面目にやるなら、目的の異なるWebhookは別にデプロイしたほうが良いと思いますが、今回はお試しということで一つのアプリケーションとして書いてしまいました。WebhooksはHTTPS必須なので、Podを作る前にまずcfsslを使ってオレオレ証明書を作成します。続いて、Webhookに持たせるための証明書を作ります。approvedbase64エンコードしてダウンロードし、そこからSecretリソースを作ります。created最後に、このSecretを使ってDeploymentを作成し、それに紐づくServiceも作成します。Webhooksの設定を登録します。必要なManifestは至ってシンプルです。フィールドにてクライアント(=kube-apiserver)がWebhookへリクエストを送る際に信用する証明書を指定することができます。ValidatingWebhookのほうから登録してみましょう。2019-11-28T05:39:28Z動きを確認するでは、実際に動作確認してみましょう。nginxこんなManifestからPodを作ってみましょう。6m6sPythonで書いた処理の通り、名前が書き換わっています。いずれにも一致しないPodを作ってみましょう。nginx設定した通りのエラーメッセージが返ってきており、Podも作られていないことが確認できます。使って対象を絞っています感想オレオレ証明書の準備等の手間はかかりましたが、Webhook自体は非常にシンプルに作ることができました。controllerを作るのは非常にハードルが高いですが、こうして疎結合に機能を拡張できるのはとても魅力的ですね。Webhook自体の可用性が低いと条件に合致するリソースの操作全体に影響してしまったり、MutatingWebhookConfigurationのほうは「変更を加える」という性質上、複数回呼ばれてしまった場合に備えて処理を冪等にする必要があったり、本番運用の際は慎重になる必要があります。Webhooksは非常に強力な機能だと思います。上手に使って、リリースや運用の負荷を下げていきましょう。Eventsを使ってECSタスクを監視するツールをSAMで作るこんにちは、SREエンジニアのたっち(@TatchNicolas)です。Corp.引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。