Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

Kazunori Kiso

December 15, 2022
Tweet

Other Decks in Programming

Transcript

  1. © 2022 3-shake Inc. 2 自己紹介 - 所属 - 株式会社スリーシェイク

    Sreake事業部 SRE - 技術スタック - AWS, Terraform, Kubernetes, Istio, ArgoCD etc - 趣味 - MLB観戦、 お笑い、 アニメ - 資格 - TOEIC990点満点 木曽 和則 (@Kazumatcha)
  2. © 2022 3-shake Inc. 3 目次 1. Kyverno とは 2.

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

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

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

    ルール・・・各ルールは、 1つのmatch, exclude(任意)の宣言と、1つのmutate, verify images, validate, generate 宣言で成り立つ。 - ポリシーはクラスターレベル、もしくは namespaceレベルのリソースとして定義可能
  6. © 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/)
  7. © 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/)
  8. © 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 を設定している。
  9. © 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: 作成されたリソース間で状態を同期するかどうか。
  10. © 2022 3-shake Inc. 11 他ツールとの比較 Kyverno - KubernetesとYAMLの知識があれば使い始められるため、学習コストが低い -

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