Slide 1

Slide 1 text

Kyvernoを利用したKubernetesのポリシー制御

Slide 2

Slide 2 text

© 2022 3-shake Inc. 2 自己紹介 - 所属 - 株式会社スリーシェイク Sreake事業部 SRE - 技術スタック - AWS, Terraform, Kubernetes, Istio, ArgoCD etc - 趣味 - MLB観戦、 お笑い、 アニメ - 資格 - TOEIC990点満点 木曽 和則 (@Kazumatcha)

Slide 3

Slide 3 text

© 2022 3-shake Inc. 3 目次 1. Kyverno とは 2. Kyverno でできること 3. ポリシーとルールについて 4. インストール 5. Validation 6. Mutation 7. Generation 8. 他ツールとの比較 9. まとめ

Slide 4

Slide 4 text

© 2022 3-shake Inc. 4 Kyverno とは - Kubernetes のポリシーエンジン - Kubernesのリソースに関するルールを設定し、ルールに違反したときに事前定義したアクション を実行する - CNCF の Incubating project - 2020年11月 Sandbox project に採択 - 2022年7月 Incubating project に昇格 - GitHubリポジトリのスター数は 3,200(2022年12月時点)

Slide 5

Slide 5 text

© 2022 3-shake Inc. 5 Kyverno でできること - Validation - リソース作成時にポリシーに則っているか検証する - Mutation - リソース作成時にフィールドを追加・削除・変更する - Generation - リソースの作成・更新をトリガーとして、追加のリソースを作成する - Image Verification (Beta版機能) - コンテナイメージの署名を検証する ※現在Beta版につき production-ready ではないので今回説明は割愛

Slide 6

Slide 6 text

© 2022 3-shake Inc. 6 ポリシーとルールについて (https://kyverno.io/docs/kyverno-policies/) - ポリシー・・・ルールの集合体 - ルール・・・各ルールは、 1つのmatch, exclude(任意)の宣言と、1つのmutate, verify images, validate, generate 宣言で成り立つ。 - ポリシーはクラスターレベル、もしくは namespaceレベルのリソースとして定義可能

Slide 7

Slide 7 text

© 2022 3-shake Inc. 7 インストール Manifest の場合 kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/config/install.yaml Helm の場合 helm repo add kyverno https://kyverno.github.io/kyverno/ helm repo update helm install kyverno kyverno/kyverno -n kyverno --create-namespace (https://kyverno.io/docs/introduction/)

Slide 8

Slide 8 text

© 2022 3-shake Inc. 8 Validation kind: ClusterPolicy or Policy ClusterPolicy はクラスターレベルのポリシー Policy はnamespaceレベルのポリシー validationFailureAction: enforce or audit enforce は、設定したルールに違反した場合、リク エストをブロックし、message で指定したメッセージ を表示する。 audit は、設定したルールに違反した場合、リクエ ストを許可した上で、 PolicyReport オブジェクトを 生成する。 match: 指定した条件に合致したものを対象にす る。 左の例では、すべての Namespace オブジェクト を 対象にしている。 validate: patternで指定した内容に合致している かを検証する。 左の例では、metadata.labelsに purpose=prd が あることを検証する。 (https://kyverno.io/docs/writing-policies/validate/)

Slide 9

Slide 9 text

© 2022 3-shake Inc. 9 Mutation Mutation・・・条件にマッチしたリソースに変更を加える。 - validationの前にリソースの変更を行うので、変更後の状態が validationのルールに違反しないよう注 意する。 - enforceモードでvalidationを実行してvaloidationのルールに反するリクエストをブロックしなくても、 ルールに準拠するように mutateで変更を加えてあげるという手段もある。 kind: ClusterPolicy or Policy ClusterPolicy はクラスターレベルのポリシー Policy はnamespaceレベルのポリシー background: 既存のリソースにもポリシーを適用するためにバックグランドでスキャンを行うか。 デフォルトはtrue。 match: 指定した条件に合致したものを対象にする。 左の例では、すべての Namespace オブジェクト を対象にしている。 mutate: 指定した箇所に変更を加える。 左の例では、metadata.labelsに purpose=prd を設定している。

Slide 10

Slide 10 text

© 2022 3-shake Inc. 10 Generation (https://kyverno.io/docs/writing-policies/generate/) Generation・・・リソース作成時や更新時に、追加のリソースを作成する。 Namespace作成時に、Network policy, Role binding, ConfigMap等、何かしらの補助 的なリソースを追加で作成するときに便利。 match: 指定した条件に合致したものを対象にする。 左の例では、すべての Namespace オブジェクト を対象にしている。 exclude: 指定した条件に合致したものを除外する。 左の例では、kube-system, default, kube-public, kyverno のNamespace オブジェクト を除外する。 → つまり、kube-system, default, kube-public, kyverno 以外のすべてのNamespace オブジェクト を対象にしている。 generate: 左の例では、新しい namespaceにzk-kafka-addressという名前でConfigMapを作成す る。 synchronize: 作成されたリソース間で状態を同期するかどうか。

Slide 11

Slide 11 text

© 2022 3-shake Inc. 11 他ツールとの比較 Kyverno - KubernetesとYAMLの知識があれば使い始められるため、学習コストが低い - 複雑なポリシーを表現できない可能性がある - Generation に対応している OPA/Gatekeeper - ポリシーの記述にRegoという言語を習得する必要があるため、学習コスト・運用コストがかかる - 複雑なポリシーを記述したいケースでは、 Regoで柔軟に対応できる - RegoはKubernetesのマニフェストだけでなく、 Conftestと合わせることでTerraformなどのコードも検査す ることができるので、 Regoの知識を使い回すことができる - Generation には対応していない

Slide 12

Slide 12 text

© 2022 3-shake Inc. 12 まとめ 小さく始めたいならKyvernoは最適!!

Slide 13

Slide 13 text

© 2022 3-shake Inc. 13 おわり ご清聴ありがとうございました