Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Policy Engine on Kubernetes VMware DevOps Meetup #8 (2021/03/24)
Slide 2
Slide 2 text
自己紹介 Name: ry (@URyo_0213) Skillset: - Storage - Ansible (Ansible Tower, AWX) - Python, django - Kubernetes Advertisement - Kubernetes Meetup Novice (月1回ペース) - Kubenews (毎週金曜日 22:00 ~ ) - Kubernetes Internal
Slide 3
Slide 3 text
まず初めに
Slide 4
Slide 4 text
PSP(Pod Security Policy) 適用されたPodの仕様を確認し、事前に適用された PSPに記載されているポリシーによって、 Podの作成を制御 するためのものです。 Deprecated in Kuberenets version 1.21 Remove the API completely in Kuberentes version 1.25 Kubernetes上でPolicyによる制御を何でやっていけばいいのだろうか。。。
Slide 5
Slide 5 text
Kubernetes上で 『Policyによる制御』 といえば?
Slide 6
Slide 6 text
OPA (Open Policy Agent) Admission Webhook機能を用いて、 ・Validating ・Mutating 等を行うことができるツール。 独自のRegoという言語を用いることで、 柔軟なPolicyの作成が可能。
Slide 7
Slide 7 text
Admission Control Authentication Authorization Mutating Admission Object Schema Admission Validating Admission Persisted to etcd webhook webhook webhook webhook
Slide 8
Slide 8 text
Validating / Mutating 1 Validating 作成するリソースが、 Policyと比較して許可していいものなのか、それとも拒否 すべきものなのかを判断する。 2 Mutating 作成するリソースに対して、 Parameterの追加や変更をかける。
Slide 9
Slide 9 text
Rego 前回のVMware DevOps Meetup #7 において、とても分かりやすい構文の解説などがありましたので参 照いただけると良いかと思います。 Open Policy Agent (OPA) 入門
Slide 10
Slide 10 text
Rego The Rego Playground を使って練習できます。
Slide 11
Slide 11 text
ここまで来たところで..... Regoかぁ... なんで新しい言語作るの?
Slide 12
Slide 12 text
OPAを少しでも簡単に使うために Styra DAS というOPAのPolicyをGUIから適用していくことができるツールがあります。 簡単な使い方や、実際にPolicyをによる判断を行う際に参照される Admissoin Reviewというリソースについて下 のBlogでご紹介しています。 Styra DASを使ってOPAをより簡単に
Slide 13
Slide 13 text
今日の本題
Slide 14
Slide 14 text
Kyverno OPA同様にAdmission Webhookを用いて Validating / Mutating 等のPolicyを適用するこ とができるツール。 KubernetesのManifestの様にPolicyを適用で きるので、学習コストが低い。
Slide 15
Slide 15 text
Policy Structure https://kyverno.io/docs/writing-policies/structure/
Slide 16
Slide 16 text
Match Policyを適用する対象を記載するものです。 dict型はAND, list型はOR 今回のケースでは、 kindが「Deployment」もしくは「Statefulset」 かつ labelに「app: critical」 とあるもの
Slide 17
Slide 17 text
Exclude Matchに記載したものの中で、例外を作る場合に使用します。 今回のケースでは、 対象はPod ただし、kube-system内のPodは除く
Slide 18
Slide 18 text
Policy (Validating) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定 validate: 検証内容、及び違反した際の messageを記述 - Resource limit及びrequestが設定されてない場合、 作成が許可されない
Slide 19
Slide 19 text
Policy (Validating) Pod用 manifest (Resource unit なし) Policy Check Pod用 manifest (Resource unit あり) Pod作成
Slide 20
Slide 20 text
Policy (Validating)
Slide 21
Slide 21 text
Policy (Validating)
Slide 22
Slide 22 text
Policy (Validating) Policyを追加したことで、作成が承認されました。
Slide 23
Slide 23 text
Policy (Mutating) ● RFC 6902 JSONPatch ● Strategic Merge Patch ● Mutate Overlay ● Mutate Rule Ordering (Cascading)
Slide 24
Slide 24 text
Policy (Mutating) ● RFC 6902 JSONPatch ● Strategic Merge Patch ● Mutate Overlay ● Mutate Rule Ordering (Cascading)
Slide 25
Slide 25 text
Policy (Mutating - overlay -) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定 mutate: 変更する項目を記載 - 特定のlabelをトリガーに、 VaultからSecretを取得するための annotation、及びService Accountを 追加
Slide 26
Slide 26 text
Policy (Mutating - overlay -) Policy Check Pod用 manifest (指定labelあり) Pod作成 (Secret Injected) Pod用 manifest Annotation Service Account 追加 Vault Pod用 manifest Vault InitContainer Vault Sidecar 追加 Annotation確認
Slide 27
Slide 27 text
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 - <
Slide 28
Slide 28 text
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
Slide 29
Slide 29 text
Policy (Mutating - overlay -)
Slide 30
Slide 30 text
Policy (Mutating - overlay -)
Slide 31
Slide 31 text
Policy (Generating) match: Policyを適用するリソースを指定 - Namespaceを指定 - 4つのNamespaceを例外とする。 generate: 作成するリソースを指定 - NetworkPolicyを作成する。
Slide 32
Slide 32 text
Policy (Generating)
Slide 33
Slide 33 text
最後に
Slide 34
Slide 34 text
Summary Keyvernoでは、ManifestライクにPolicyの宣言を行うことのできる。 Kyvernoは、Regoのような特殊な言語がないため、学習コストが低区 始めやすい。 OPAにはないGeneratingという機能はとても有用。
Slide 35
Slide 35 text
OPA vs Kyverno 以下のBlogにて、さまざまな項目の比較を表形式で載せてくれているので参考にしていただければと思います。 Kubernetes Policy Comparison: OPA/Gatekeeper vs Kyverno
Slide 36
Slide 36 text
今回使用したPolicy Githubの方にあげていますので、ご参照ください。 kyverno-sample
Slide 37
Slide 37 text
Thank you