Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Policy Engine on Kubernetes
ry
March 24, 2021
Technology
1
950
Policy Engine on Kubernetes
ry
March 24, 2021
Tweet
Share
More Decks by ry
See All by ry
KyvernoとRedhatACMを用いたマルチクラスターの一元的なポリシー制御
ry
0
46
明日から始められるKyvernoを用いたポリシー制御
ry
3
230
CNDT2022 k8snovice Community introduction
ry
0
13
ConfigMap and Secret
ry
0
210
Policy Manager試してみた!
ry
0
230
Kubernetes APIに Pod内からアクセスしてみた
ry
1
790
AKS 101 in Kubernetes Novice Tokyo #1
ry
0
480
meetup_topic__1.pdf
ry
0
600
Lecture__1.pdf
ry
1
220
Other Decks in Technology
See All in Technology
S3とCloudWatch Logsの見直しから始めるコスト削減 / Cost saving S3 and CloudWatch Logs
shonansurvivors
0
210
PHPのimmutable arrayとは
hnw
1
150
オンプレk8sとEKSの並行運用の実際
ch1aki
0
230
OCIコンテナサービス関連の技術詳細 /oke-ocir-details
oracle4engineer
PRO
0
760
金属加工屋の営業マンがSTマイクロで・・・
usashirou
0
150
GraphQLスキーマ設計の勘所
yukukotani
26
6.1k
創業1年目のスタートアップでAWSコストを抑えるために取り組んでいること / How to Keep AWS Costs Down at a Startup
yuj1osm
3
2k
Stripe / Okta Customer Identity Cloud(旧Auth0) の採用に至った理由 〜モリサワの SaaS 戦略〜
tomuro
0
120
Pentesting Password Reset Functionality
anugrahsr
0
390
Virtual Thread - 導入の背景と、効果的な使い方 -
skrb
3
260
スクラム導入して変わったチーム、組織のありかた
yumechi
0
160
マイクロサービス宣言から8年 振り返りとこれから / Eight Years After the Microservices Declaration A Look Back and A Look Ahead
eisuke
2
140
Featured
See All Featured
KATA
mclloyd
12
9.7k
Intergalactic Javascript Robots from Outer Space
tanoku
261
26k
The Power of CSS Pseudo Elements
geoffreycrofte
52
4.3k
Done Done
chrislema
178
14k
No one is an island. Learnings from fostering a developers community.
thoeni
12
1.5k
The Cult of Friendly URLs
andyhume
68
5.1k
It's Worth the Effort
3n
177
26k
How GitHub (no longer) Works
holman
298
140k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
657
120k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
Thoughts on Productivity
jonyablonski
49
2.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
24
4.5k
Transcript
Policy Engine on Kubernetes VMware DevOps Meetup #8 (2021/03/24)
自己紹介 Name: ry (@URyo_0213) Skillset: - Storage - Ansible (Ansible
Tower, AWX) - Python, django - Kubernetes Advertisement - Kubernetes Meetup Novice (月1回ペース) - Kubenews (毎週金曜日 22:00 ~ ) - Kubernetes Internal
まず初めに
PSP(Pod Security Policy) 適用されたPodの仕様を確認し、事前に適用された PSPに記載されているポリシーによって、 Podの作成を制御 するためのものです。 Deprecated in Kuberenets
version 1.21 Remove the API completely in Kuberentes version 1.25 Kubernetes上でPolicyによる制御を何でやっていけばいいのだろうか。。。
Kubernetes上で 『Policyによる制御』 といえば?
OPA (Open Policy Agent) Admission Webhook機能を用いて、 ・Validating ・Mutating 等を行うことができるツール。 独自のRegoという言語を用いることで、
柔軟なPolicyの作成が可能。
Admission Control Authentication Authorization Mutating Admission Object Schema Admission Validating
Admission Persisted to etcd webhook webhook webhook webhook
Validating / Mutating 1 Validating 作成するリソースが、 Policyと比較して許可していいものなのか、それとも拒否 すべきものなのかを判断する。 2 Mutating
作成するリソースに対して、 Parameterの追加や変更をかける。
Rego 前回のVMware DevOps Meetup #7 において、とても分かりやすい構文の解説などがありましたので参 照いただけると良いかと思います。 Open Policy Agent
(OPA) 入門
Rego The Rego Playground を使って練習できます。
ここまで来たところで..... Regoかぁ... なんで新しい言語作るの?
OPAを少しでも簡単に使うために Styra DAS というOPAのPolicyをGUIから適用していくことができるツールがあります。 簡単な使い方や、実際にPolicyをによる判断を行う際に参照される Admissoin Reviewというリソースについて下 のBlogでご紹介しています。 Styra DASを使ってOPAをより簡単に
今日の本題
Kyverno OPA同様にAdmission Webhookを用いて Validating / Mutating 等のPolicyを適用するこ とができるツール。 KubernetesのManifestの様にPolicyを適用で きるので、学習コストが低い。
Policy Structure https://kyverno.io/docs/writing-policies/structure/
Match Policyを適用する対象を記載するものです。 dict型はAND, list型はOR 今回のケースでは、 kindが「Deployment」もしくは「Statefulset」 かつ labelに「app: critical」 とあるもの
Exclude Matchに記載したものの中で、例外を作る場合に使用します。 今回のケースでは、 対象はPod ただし、kube-system内のPodは除く
Policy (Validating) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定 validate: 検証内容、及び違反した際の messageを記述
- Resource limit及びrequestが設定されてない場合、 作成が許可されない
Policy (Validating) Pod用 manifest (Resource unit なし) Policy Check Pod用
manifest (Resource unit あり) Pod作成
Policy (Validating)
Policy (Validating)
Policy (Validating) Policyを追加したことで、作成が承認されました。
Policy (Mutating) • RFC 6902 JSONPatch • Strategic Merge Patch
• Mutate Overlay • Mutate Rule Ordering (Cascading)
Policy (Mutating) • RFC 6902 JSONPatch • Strategic Merge Patch
• Mutate Overlay • Mutate Rule Ordering (Cascading)
Policy (Mutating - overlay -) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定
mutate: 変更する項目を記載 - 特定のlabelをトリガーに、 VaultからSecretを取得するための annotation、及びService Accountを 追加
Policy (Mutating - overlay -) Policy Check Pod用 manifest (指定labelあり)
Pod作成 (Secret Injected) Pod用 manifest Annotation Service Account 追加 Vault Pod用 manifest Vault InitContainer Vault Sidecar 追加 Annotation確認
Policy (Mutating - overlay -) Vault上に、情報を格納する # vault secrets enable
-path=vmware kv-v2 # vault kv put vmware/devops/8 username="vmware-devops" password="waiwai" 作成したリソースに対する Policyを設定する # vault policy write vmware - <<EOF path "vmware/data/devops/8" { capabilities = ["read"] } EOF
Policy (Mutating - overlay -) kubernetes上のリソースとの紐づけをする。 # vault write auth/kubernetes/role/vmware
\ bound_service_account_names=vmware \ bound_service_account_namespaces=default \ policies=vmware \ ttl=24h 上記のコマンドで指定した Service Accountを作成する。 # kubectl create sa vmware
Policy (Mutating - overlay -)
Policy (Mutating - overlay -)
Policy (Generating) match: Policyを適用するリソースを指定 - Namespaceを指定 - 4つのNamespaceを例外とする。 generate: 作成するリソースを指定
- NetworkPolicyを作成する。
Policy (Generating)
最後に
Summary Keyvernoでは、ManifestライクにPolicyの宣言を行うことのできる。 Kyvernoは、Regoのような特殊な言語がないため、学習コストが低区 始めやすい。 OPAにはないGeneratingという機能はとても有用。
OPA vs Kyverno 以下のBlogにて、さまざまな項目の比較を表形式で載せてくれているので参考にしていただければと思います。 Kubernetes Policy Comparison: OPA/Gatekeeper vs Kyverno
今回使用したPolicy Githubの方にあげていますので、ご参照ください。 kyverno-sample
Thank you