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

Policy Engine on Kubernetes

30d97c8383a531c459ac210540b4eace?s=47 ry
March 24, 2021

Policy Engine on Kubernetes

30d97c8383a531c459ac210540b4eace?s=128

ry

March 24, 2021
Tweet

Transcript

  1. Policy Engine on Kubernetes VMware DevOps Meetup #8 (2021/03/24)

  2. 自己紹介 Name: ry (@URyo_0213) Skillset: - Storage - Ansible (Ansible

    Tower, AWX) - Python, django - Kubernetes Advertisement - Kubernetes Meetup Novice (月1回ペース) - Kubenews (毎週金曜日 22:00 ~ ) - Kubernetes Internal
  3. まず初めに

  4. PSP(Pod Security Policy) 適用されたPodの仕様を確認し、事前に適用された PSPに記載されているポリシーによって、 Podの作成を制御 するためのものです。 Deprecated in Kuberenets

    version 1.21 Remove the API completely in Kuberentes version 1.25 Kubernetes上でPolicyによる制御を何でやっていけばいいのだろうか。。。
  5. Kubernetes上で 『Policyによる制御』 といえば?

  6. OPA (Open Policy Agent) Admission Webhook機能を用いて、 ・Validating ・Mutating 等を行うことができるツール。 独自のRegoという言語を用いることで、

    柔軟なPolicyの作成が可能。
  7. Admission Control Authentication Authorization Mutating Admission Object Schema Admission Validating

    Admission Persisted to etcd webhook webhook webhook webhook
  8. Validating / Mutating 1 Validating 作成するリソースが、 Policyと比較して許可していいものなのか、それとも拒否 すべきものなのかを判断する。 2 Mutating

    作成するリソースに対して、 Parameterの追加や変更をかける。
  9. Rego 前回のVMware DevOps Meetup #7 において、とても分かりやすい構文の解説などがありましたので参 照いただけると良いかと思います。 Open Policy Agent

    (OPA) 入門
  10. Rego The Rego Playground を使って練習できます。

  11. ここまで来たところで..... Regoかぁ... なんで新しい言語作るの?

  12. OPAを少しでも簡単に使うために Styra DAS というOPAのPolicyをGUIから適用していくことができるツールがあります。 簡単な使い方や、実際にPolicyをによる判断を行う際に参照される Admissoin Reviewというリソースについて下 のBlogでご紹介しています。 Styra DASを使ってOPAをより簡単に

  13. 今日の本題

  14. Kyverno OPA同様にAdmission Webhookを用いて Validating / Mutating 等のPolicyを適用するこ とができるツール。 KubernetesのManifestの様にPolicyを適用で きるので、学習コストが低い。

  15. Policy Structure https://kyverno.io/docs/writing-policies/structure/

  16. Match Policyを適用する対象を記載するものです。 dict型はAND, list型はOR 今回のケースでは、 kindが「Deployment」もしくは「Statefulset」 かつ labelに「app: critical」 とあるもの

  17. Exclude Matchに記載したものの中で、例外を作る場合に使用します。 今回のケースでは、 対象はPod ただし、kube-system内のPodは除く

  18. Policy (Validating) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定 validate: 検証内容、及び違反した際の messageを記述

    - Resource limit及びrequestが設定されてない場合、 作成が許可されない
  19. Policy (Validating) Pod用 manifest (Resource unit なし) Policy Check Pod用

    manifest (Resource unit あり) Pod作成
  20. Policy (Validating)

  21. Policy (Validating)

  22. Policy (Validating) Policyを追加したことで、作成が承認されました。

  23. Policy (Mutating) • RFC 6902 JSONPatch • Strategic Merge Patch

    • Mutate Overlay • Mutate Rule Ordering (Cascading)
  24. Policy (Mutating) • RFC 6902 JSONPatch • Strategic Merge Patch

    • Mutate Overlay • Mutate Rule Ordering (Cascading)
  25. Policy (Mutating - overlay -) spec.rulesの下で設定 match: Policyを適用するリソースを指定 - Podを指定

    mutate: 変更する項目を記載 - 特定のlabelをトリガーに、 VaultからSecretを取得するための annotation、及びService Accountを 追加
  26. Policy (Mutating - overlay -) Policy Check Pod用 manifest (指定labelあり)

    Pod作成 (Secret Injected) Pod用 manifest Annotation Service Account 追加 Vault Pod用 manifest Vault InitContainer Vault Sidecar 追加 Annotation確認
  27. 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
  28. 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
  29. Policy (Mutating - overlay -)

  30. Policy (Mutating - overlay -)

  31. Policy (Generating) match: Policyを適用するリソースを指定 - Namespaceを指定 - 4つのNamespaceを例外とする。 generate: 作成するリソースを指定

    - NetworkPolicyを作成する。
  32. Policy (Generating)

  33. 最後に

  34. Summary Keyvernoでは、ManifestライクにPolicyの宣言を行うことのできる。 Kyvernoは、Regoのような特殊な言語がないため、学習コストが低区 始めやすい。 OPAにはないGeneratingという機能はとても有用。

  35. OPA vs Kyverno 以下のBlogにて、さまざまな項目の比較を表形式で載せてくれているので参考にしていただければと思います。 Kubernetes Policy Comparison: OPA/Gatekeeper vs Kyverno

  36. 今回使用したPolicy Githubの方にあげていますので、ご参照ください。 kyverno-sample

  37. Thank you