$30 off During Our Annual Pro Sale. View Details »

Policy Engine on Kubernetes

ry
March 24, 2021

Policy Engine on Kubernetes

ry

March 24, 2021
Tweet

More Decks by ry

Other Decks in Technology

Transcript

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

    View Slide

  2. 自己紹介
    Name: ry (@URyo_0213)
    Skillset:
    - Storage
    - Ansible (Ansible Tower, AWX)
    - Python, django
    - Kubernetes
    Advertisement
    - Kubernetes Meetup Novice (月1回ペース)
    - Kubenews (毎週金曜日 22:00 ~ )
    - Kubernetes Internal

    View Slide

  3. まず初めに

    View Slide

  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による制御を何でやっていけばいいのだろうか。。。

    View Slide

  5. Kubernetes上で
    『Policyによる制御』
    といえば?

    View Slide

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

    View Slide

  7. Admission Control
    Authentication
    Authorization
    Mutating
    Admission
    Object
    Schema
    Admission
    Validating
    Admission
    Persisted to
    etcd
    webhook
    webhook webhook
    webhook

    View Slide

  8. Validating / Mutating
    1
    Validating
    作成するリソースが、 Policyと比較して許可していいものなのか、それとも拒否
    すべきものなのかを判断する。
    2
    Mutating
    作成するリソースに対して、 Parameterの追加や変更をかける。

    View Slide

  9. Rego
    前回のVMware DevOps Meetup #7 において、とても分かりやすい構文の解説などがありましたので参
    照いただけると良いかと思います。
    Open Policy Agent (OPA) 入門

    View Slide

  10. Rego
    The Rego Playground を使って練習できます。

    View Slide

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

    View Slide

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

    View Slide

  13. 今日の本題

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. Policy (Validating)
    spec.rulesの下で設定
    match: Policyを適用するリソースを指定
    - Podを指定
    validate: 検証内容、及び違反した際の
    messageを記述
    - Resource limit及びrequestが設定されてない場合、
    作成が許可されない

    View Slide

  19. Policy (Validating)
    Pod用 manifest
    (Resource unit なし)
    Policy Check
    Pod用 manifest
    (Resource unit あり)
    Pod作成

    View Slide

  20. Policy (Validating)

    View Slide

  21. Policy (Validating)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  25. Policy (Mutating - overlay -)
    spec.rulesの下で設定
    match: Policyを適用するリソースを指定
    - Podを指定
    mutate: 変更する項目を記載
    - 特定のlabelをトリガーに、
    VaultからSecretを取得するための
    annotation、及びService Accountを
    追加

    View Slide

  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確認

    View Slide

  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 - <path "vmware/data/devops/8" {
    capabilities = ["read"]
    }
    EOF

    View Slide

  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

    View Slide

  29. Policy (Mutating - overlay -)

    View Slide

  30. Policy (Mutating - overlay -)

    View Slide

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

    View Slide

  32. Policy (Generating)

    View Slide

  33. 最後に

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  37. Thank you

    View Slide