Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Kyvernoを利用したKubernetesのポリシー制御
Kazunori Kiso
December 15, 2022
Programming
0
180
Kyvernoを利用したKubernetesのポリシー制御
Kazunori Kiso
December 15, 2022
Tweet
Share
Other Decks in Programming
See All in Programming
Milestoner
bkuhlmann
1
240
Swift Observation
shiz
3
270
Remote SSHで行うVS Codeリモートホスト開発とトラブルシューティング
smt7174
1
460
はてなリモートインターンシップ2022 フロントエンドブートキャンプ 講義資料
hatena
0
120
[2023년 1월 세미나] 데이터 분석가 되면 어떤 일을 하나요?
datarian
0
580
Step Functions Distributed Map を使ってみた
codemountains
0
100
NGK2023S - OCaml最高! スマホ開発にも使えちゃう?!
haochenxie
0
120
Enumを自動で網羅的にテストしてみた
estie
0
1.3k
PHPアプリケーションにおけるアーキテクチャメトリクスについて / Architecture Metrics in PHP Applications
isanasan
1
230
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
42k
Rust、何もわからない...#6発表資料
ryu19
0
120
Cloudflare Workersと状態管理
chimame
3
480
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
Designing the Hi-DPI Web
ddemaree
273
32k
Faster Mobile Websites
deanohume
295
29k
Code Review Best Practice
trishagee
50
11k
GitHub's CSS Performance
jonrohan
1020
430k
Principles of Awesome APIs and How to Build Them.
keavy
117
15k
How GitHub (no longer) Works
holman
298
140k
Pencils Down: Stop Designing & Start Developing
hursman
114
10k
The World Runs on Bad Software
bkeepers
PRO
59
5.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
120
29k
The Illustrated Children's Guide to Kubernetes
chrisshort
22
42k
Statistics for Hackers
jakevdp
785
210k
Transcript
Kyvernoを利用したKubernetesのポリシー制御
© 2022 3-shake Inc. 2 自己紹介 - 所属 - 株式会社スリーシェイク
Sreake事業部 SRE - 技術スタック - AWS, Terraform, Kubernetes, Istio, ArgoCD etc - 趣味 - MLB観戦、 お笑い、 アニメ - 資格 - TOEIC990点満点 木曽 和則 (@Kazumatcha)
© 2022 3-shake Inc. 3 目次 1. Kyverno とは 2.
Kyverno でできること 3. ポリシーとルールについて 4. インストール 5. Validation 6. Mutation 7. Generation 8. 他ツールとの比較 9. まとめ
© 2022 3-shake Inc. 4 Kyverno とは - Kubernetes のポリシーエンジン
- Kubernesのリソースに関するルールを設定し、ルールに違反したときに事前定義したアクション を実行する - CNCF の Incubating project - 2020年11月 Sandbox project に採択 - 2022年7月 Incubating project に昇格 - GitHubリポジトリのスター数は 3,200(2022年12月時点)
© 2022 3-shake Inc. 5 Kyverno でできること - Validation -
リソース作成時にポリシーに則っているか検証する - Mutation - リソース作成時にフィールドを追加・削除・変更する - Generation - リソースの作成・更新をトリガーとして、追加のリソースを作成する - Image Verification (Beta版機能) - コンテナイメージの署名を検証する ※現在Beta版につき production-ready ではないので今回説明は割愛
© 2022 3-shake Inc. 6 ポリシーとルールについて (https://kyverno.io/docs/kyverno-policies/) - ポリシー・・・ルールの集合体 -
ルール・・・各ルールは、 1つのmatch, exclude(任意)の宣言と、1つのmutate, verify images, validate, generate 宣言で成り立つ。 - ポリシーはクラスターレベル、もしくは namespaceレベルのリソースとして定義可能
© 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/)
© 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/)
© 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 を設定している。
© 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: 作成されたリソース間で状態を同期するかどうか。
© 2022 3-shake Inc. 11 他ツールとの比較 Kyverno - KubernetesとYAMLの知識があれば使い始められるため、学習コストが低い -
複雑なポリシーを表現できない可能性がある - Generation に対応している OPA/Gatekeeper - ポリシーの記述にRegoという言語を習得する必要があるため、学習コスト・運用コストがかかる - 複雑なポリシーを記述したいケースでは、 Regoで柔軟に対応できる - RegoはKubernetesのマニフェストだけでなく、 Conftestと合わせることでTerraformなどのコードも検査す ることができるので、 Regoの知識を使い回すことができる - Generation には対応していない
© 2022 3-shake Inc. 12 まとめ 小さく始めたいならKyvernoは最適!!
© 2022 3-shake Inc. 13 おわり ご清聴ありがとうございました