Slide 1

Slide 1 text

1 Open Policy AgentとSpinnakerで実現する マイクロサービスの安全な継続的デリバリー Merpay SRE ・Microservices Platform CI/CD Team Keisuke Yamashita(@_k_e_k_e) KubeFest Tokyo 2020 Track1 15:35~16:10 2020/06/13

Slide 2

Slide 2 text

2 Keisuke Yamashita(@_k_e_k_e) Merpay SRE ・Microservices Platform CI/CD Team Like Kubernetes, Hashicorp Products(Terraform, Vault) Spinnaker , Open Policy Agent, CircleCI, GitHub Actions, Istio, Envoy, etc...

Slide 3

Slide 3 text

3 後ほど資料は公開します!

Slide 4

Slide 4 text

4 Agenda

Slide 5

Slide 5 text

5 Agenda 01 ● Mercari’s Microservices Architecture 02 03 ● Mercari’s CI/CD ● Problems with Microservices Architecture CI/CD 04 ● Open Policy AgentとSpinnaker 05 ● Wrap up

Slide 6

Slide 6 text

6 Goal

Slide 7

Slide 7 text

7 マイクロサービスの継続的デリバリーの 横断的な向上が出来るようになること

Slide 8

Slide 8 text

8 01 Mercari’s Microservice Architecture

Slide 9

Slide 9 text

9 Mercari’s Microservice Architecture それぞれのマイクロサービスは... ● Kubernetes Namespace ● GCP Project ● Spinnaker Application を持ちます

Slide 10

Slide 10 text

10 1つのGKEクラスタの中にすべてのマイクロサービスがある Mercari’s Microservice Architecture

Slide 11

Slide 11 text

11 Nodes Mercari’s Microservice Architecture Microservice B Namespace B Microservice B Microservice B Microservice B Microservice C Namespace C Microservice C Microservice C Microservice A Namespace A Service A Team Service B Team Service C Team RBAC RBAC RBAC

Slide 12

Slide 12 text

12 Mercari’s Microservice Architecture Project C Project A Service A Team Service B Team Service C Team IAM IAM IAM Project B

Slide 13

Slide 13 text

13 02 Mercari’s CI/CD

Slide 14

Slide 14 text

14 Mercari’s CI/CD MercariのCIの対象は、以下の2つに分けられる。 Application サービスのそれぞれのGitHubリポジトリで管理されているアプリケーションサー バーなどのコード。 Kubernetes Manifests KubernetesのDeploymentやJobなどのManifest file。 中央的なリポジトリで管理されている。

Slide 15

Slide 15 text

15 Application CI Service A Team Service B Team Service C Team Service A Repository Service B Repository Service C Repository PR & Review PR & Review PR & Review Circle CI Cloud Build Container Registry Project A Cloud Build Container Registry Project B Cloud Build Container Registry Project C

Slide 16

Slide 16 text

16 Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Kubernetes Manifest CI

Slide 17

Slide 17 text

17 Kubernetes Manifest CI

Slide 18

Slide 18 text

18 Mercari’s CD Container Registry GKE Cluster Pull Deploy CDプラットフォームであるSpinnakerを使って、Google Container RegistryにあるDocker ImageとGitHubにあ るKubernetes Manifestを参照し、GKEクラスタにデプロイをしている 
 
 
 Kubernetes Resource Repository Pull

Slide 19

Slide 19 text

19 Mercari’s CD Service A Team Service B Team Service C Team Service C Application Service A Application Service B Application Trigger Trigger Trigger Microservice A Namespace A Microservice B Namespace B Microservice C Namespace C Deploy Deploy Deploy

Slide 20

Slide 20 text

20 Spinnaker

Slide 21

Slide 21 text

21 03 Problems with Microservices Architecture CI/CD

Slide 22

Slide 22 text

22 Problems with Microservices Architecture CI/CD Microservice A DB Team A マイクロサービスアーキテクチャは各マイクロサービスが 自律的に開発サイクルを回していく という理念に根 ざしている。
 
 
 +


Slide 23

Slide 23 text

23 Problems with Microservices Architecture CI/CD すべてのマイクロサービスが同じレベルで、全てのことを 同じようにできるわけではなく サービス全体の質の担保が難しくなる 。 例1: Kubernetes Manifestの設定 ・Labelはマイクロサービスの名前と一致しているか ・Memory Limitが10GB以下に設定されているのか などのルールが守られていることを保証することは難しい。 
 
 


Slide 24

Slide 24 text

24 Platform Team Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Problems with Microservices Architecture CI/CD Pull Review ✅ ✅

Slide 25

Slide 25 text

25 Problems with Microservices Architecture CI/CD CPU limitsが 高い latestタグを 使っている 記述的に間違っているわけではないので、このままでもApplyはできる 
 Namespaceが サービスの名前に 合っていない

Slide 26

Slide 26 text

26 Problems with Microservices Architecture CI/CD すべてのマイクロサービスが同じレベルで、全てのことを同じようにできるわけではなく サービス全体の質の担保が難しくなる 。 例1: Kubernetes Manifestの設定 ・Labelはマイクロサービスの名前と一致しているか ・Memory Limitが10GB以下に設定されているのか などのルールが守られていることを保証することは難しい。 例2: デプロイ ・手法(カナリア、Blue-Green、ハイランダーなど)差異 ・デプロイ先の設定(Namespace、クラスタなど)
 
 


Slide 27

Slide 27 text

27 Problems with Microservices Architecture CI/CD Item Item Listing DB Team C User DB Team E Item DB Team B Shipping DB Team D Timeline DB Team A ✅ カナリアデプロイ ✅ Blue-Greenデプロイ ✅ Blue-Greenデプロイ ❌ リリースフローに 沿わないデプロイ ❌ 雑なデプロイ

Slide 28

Slide 28 text

28 Problems with Microservices Architecture CI/CD Item Item Listing DB Team C User DB Team E Item DB Team B Shipping DB Team D Timeline DB Team A ✅ カナリアデプロイ ✅ Blue-Greenデプロイ ✅ Blue-Greenデプロイ ❌ 雑なデプロイ それぞれのマイクロサービスにデプロイ手法が委ねられていると ”デプロイの質” にも差が生じ、サービス全体の質へ影響する ❌ リリースフローに 沿わないデプロイ

Slide 29

Slide 29 text

29 マイクロサービスアーキテクチャと サービス全体の質の保守・向上するを目指すことは そもそも相性が悪い

Slide 30

Slide 30 text

30 2019 2020 2018 2017 マイクロサービスの数は増えていく... マイクロサービスの数

Slide 31

Slide 31 text

31 2019 2020 2018 2017 サービス全体の質は落ちていく...? サービス全体の質

Slide 32

Slide 32 text

32 No ! We are Microservice Platform Team

Slide 33

Slide 33 text

33 Problem & Solution マイクロサービスが、ルール違反するリソースをApplyする可能性があり、サービス 全体の質が落ちてしまっている 解決策 ● Developerが行うCI/CDの中で検証し、Applyを防ぐ仕組み ● CircleCIやSpinnakerがApplyするリソースに限らず、クラスタの上の全ての リソースがルール違反していないことを保証する仕組み ● ルールを定義して、運用をしている仕組み

Slide 34

Slide 34 text

34 Problem & Solution マイクロサービスが、ルール違反するリソースをApplyする可能性があり、サービス 全体の質が落ちてしまっている 解決策 ● Developerが行うCI/CDの中で検証し、Applyを防ぐ仕組み ● CircleCIやSpinnakerがApplyするリソースに限らず、クラスタの上の全ての リソースがルール違反していないことを保証する仕組み ● ルールを定義して、運用をしている仕組み Open Policy Agent(OPA)の導入

Slide 35

Slide 35 text

35 Open Policy Agent

Slide 36

Slide 36 text

36 Open Policy Agent(OPA) OSSの汎用なポリシーエンジン。Regoというポリシー記述言語によって ポリシーを定義して入力データの検証 (ジャッジ)を行う。 よくあるユースケース ・Deploymentに特定のLabelがあることを強制する ・DeploymentやJobのDocker Image Tagがlatestを使わないことを強制する など 
 
 
 https://www.openpolicyagent.org/docs/latest/


Slide 37

Slide 37 text

37 Policy as Codeとは、組織のルール(Policy)をコードで管理をすること。 Policyをもとに、Kubernetes Manifestなどの入力データを検証する。 メリット ● Policyを明文化できる ● Policyをコードベースで運用・開発ができる ● 誰が見ても理解できる・検証できる など Policy as Code OPA YAML 検証 Policy

Slide 38

Slide 38 text

38 Policies in CI/CD Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Deploy(kubectl)

Slide 39

Slide 39 text

39 Policies in CI/CD Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Deploy(kubectl) Conftest Gatekeeper

Slide 40

Slide 40 text

40 Conftest 入力データをRegoで書いたポリシーで検証する CLIツール。CI上で使われることを想定している。 Apply前にManifestを検証することによって素早い Feedbackを得ることができる。 conftest Policy(.Rego) YAML JSON XML 検証 Violation Warning Success

Slide 41

Slide 41 text

41 Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Conftest in CI Trigger Circle CI Policies(.Rego) Platform Team Maintain ✅ ✅ Conftest validation

Slide 42

Slide 42 text

42 Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Conftest in CI Trigger Circle CI Policies(.Rego) Platform Team Maintain ✗ Conftest validation

Slide 43

Slide 43 text

43 Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Conftest in CI Trigger Circle CI Policies(.Rego) Platform Team Maintain ✗ Conftest Warning ✅ Best Pracitise is … Please ...

Slide 44

Slide 44 text

44 Kubernetes Resource Repository PR & Review Service B Team Service A Team Service C Team PR & Review PR & Review Conftest in CI Trigger Circle CI Policies(.Rego) Platform Team Maintain ✅ ✅ Conftest validation ローカル環境でも検証できるので素早く フィードバックを得ることが出来る

Slide 45

Slide 45 text

45 Gatekeeper OPAをKubernetesのAdmission Controllerとして使えるようにしたもの。現在はv3である。 
 
 
 Developers kubectl apply Kubernetes API HTTP ハンドラ Authn / Authz Mutating admission スキーマ バリデー ション Validating admission etcdへ 格納 Gatekeeper 主な機能 ・kubectl apply入力と既存リソースを同時に参照しながら の検証(Sync機能) ・定期的な既存リソースの検証 (Audit機能)

Slide 46

Slide 46 text

46 Gatekeeper PolicyはConstraintTemplateとConstraintという2つのCRDによって定義される。 ConstraintTemplate ・Constraintを生成するための雛形になるもの ・Regoを用いてPolicyを記述して定義する Constraint ・ConstraintTemplateから作られるCRD ・Policyの適用対象リソース(Deployment, Ingress, etc)やパラメータを指定する 
 


Slide 47

Slide 47 text

47 ConstraintTemplate LabelのValidationをするConstraintTemplate

Slide 48

Slide 48 text

48 Constraint ConstraintTemplateを指定してConstraintを生成

Slide 49

Slide 49 text

49 Gatekeeper SpinnakerやCircleCIに限らず、すべてのApplyを検証できる 
 
 
 必要なラベルがある Manifest Kubernetes Client 必要なラベルがない Manifest Gatekeeper Deploymentを生成 ✅ Cluster内部からの Policy違反するApply 必要なラベルがある Manifest ✅

Slide 50

Slide 50 text

50 Policies for Kubernetes Deployment Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Deploy(kubectl) Conftest Gatekeeper

Slide 51

Slide 51 text

51 Policies for Kubernetes Deployment Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Feedbacks (Area) Bad(CD) Deploy(kubectl) Gatekeeper

Slide 52

Slide 52 text

52 Policies for Kubernetes Deployment Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Feedbacks (Area) Good (CI) Deploy(kubectl) Conftest

Slide 53

Slide 53 text

53 Policies for Kubernetes Deployment Service A Team Service B Team Service C Team Service A Application Trigger Deploy(kubectl) Deploy YAML YAML Feedbacks (Area) Good (CI) Bad(CD) Deploy(kubectl) Conftest Gatekeeper

Slide 54

Slide 54 text

54 Conftest v.s. Gatekeeper GatekeeperとConftestはどちらもPolicyをもとに検証を行うツールであるものの、 立ち位置が大きく異なるため両者は排他的なものではない。 Conftest Gatekeeper 検証 Client-side検証 Server-side検証 ツールの形態 CLIツール Kubernetes Admission Controller Policyの定義方法 Policy専用ファイル(.rego) Kubernetes CRD 検証のロケーション ローカル環境・CI CD後のKubernetesクラスタ Feedbackの速さ 早い 遅い 役割 ・Apply前にフィードバックを得るための素 早い検証 ・Best Practiceをキャッチするための検証 クラスタにApplyされるリソースに対して Policyを確実に課したいとき 表 ConftestとGatekeeperの比較

Slide 55

Slide 55 text

55 Conftest v.s. Gatekeeper GatekeeperとConftestはどちらもPolicyをもとに検証を行うツールであるものの、 立ち位置が大きく異なるため両者は排他的なものではない。 Conftest Gatekeeper 検証 Client-side検証 Server-side検証 ツールの形態 CLIツール Kubernetes Admission Controller Policyの定義方法 Policy専用ファイル(.rego) Kubernetes CRD 検証のロケーション ローカル環境・CI CD後のKubernetesクラスタ Feedbackの速さ 早い 遅い 検証の役割 ・Apply前にフィードバックを得るための素 早い検証 ・Best Practiceをキャッチするための検証 クラスタにApplyされるリソースに対して Policyを確実に課したいとき 表 ConftestとGatekeeperの比較

Slide 56

Slide 56 text

56 Conftest v.s. Gatekeeper GatekeeperとConftestはどちらもPolicyをもとに検証を行うツールであるものの、 立ち位置が大きく異なるため両者は排他的なものではない。 Conftest Gatekeeper 検証 Client-side検証 Server-side検証 ツールの形態 CLIツール Kubernetes Admission Controller Policyの定義方法 Policy専用ファイル(.rego) Kubernetes CRD 検証のロケーション ローカル環境・CI CD後のKubernetesクラスタ Feedbackの速さ 早い 遅い 検証の役割 ・Apply前にフィードバックを得るための素 早い検証 ・Best Practiceをキャッチするための検証 クラスタにApplyされるリソースに対して Policyを確実に課したいとき 表 ConftestとGatekeeperの比較

Slide 57

Slide 57 text

57 Overview of CI/CD Service Push Pull Conftest validation Kubernetes Repository Circle CI Spinnaker Deploy Gatekeeper Kubernetes Gatekeeper validation 組織的なルールをPolicyとして定義し、Gatekeeperと Conftestを使うことによって、Kubernetesへデプロイされる 全てのマイクロサービスへPolicyを課すことができるように なった。


Slide 58

Slide 58 text

58 CI/CD of Policies Trigger Kubernetes Repository Policy自体のCI/CDも行っている。ConftestはUnit testする仕組みがあるためPolicyもテストできる。 ConftestのPolicy(Rego)とGatekeeperのContstraintTemplate(CRD)に互換性がないため、変換して CRD を生成し、デプロイ。 Security Team Platform Team SRE Team PR & Review PR & Review PR & Review Circle CI Policy(.Rego) Policy(.Rego) Policy(.Rego)

Slide 59

Slide 59 text

59 CI/CD of Policies Trigger Kubernetes Repository Deploy CRD Policy自体のCI/CDも行っている。ConftestはUnit testする仕組みがあるためPolicyもテストできる。 ConftestのPolicy(Rego)とGatekeeperのContstraintTemplate(CRD)に互換性がないため、変換して CRD を生成し、デプロイ。 Security Team Platform Team SRE Team PR & Review PR & Review PR & Review Circle CI Policy(.Rego) Policy(.Rego) Policy(.Rego) Generate Constraints(CRD)

Slide 60

Slide 60 text

60 CI/CD of Policies Trigger Kubernetes Repository Deploy CRD Policy自体のCI/CDも行っている。ConftestはUnit testする仕組みがあるためPolicyもテストできる。 ConftestのPolicy(Rego)とGatekeeperのContstraintTemplate(CRD)に互換性がないため、変換して CRD を生成し、デプロイ。ルールがConftestとGatekeeperで統一されている。 Security Team Platform Team SRE Team PR & Review PR & Review PR & Review Circle CI Policy(.Rego) Policy(.Rego) Policy(.Rego) Generate Constraints(CRD)

Slide 61

Slide 61 text

61 OPAを導入することによって 各マイクロサービスのCI/CDで Policyを課すことができた

Slide 62

Slide 62 text

62 Problem & Solution Spinnaker Pipelineは、DeveloperがGUI上で設定するので設定ミスをしやす く、デプロイ手法もサービスによって大きく質が異なる。 解決策 ● DeveloperがPipelineを簡単な設定で作れる仕組み ● Pipelineを作成すると、あとから変更することができないImmutableな仕組 み ● Platform Teamが各マイクロサービスのデプロイ手法を管理し、デプロイ手 法の標準化・Best Practiceを提供しつづけられる仕組み

Slide 63

Slide 63 text

63 Problem & Solution Spinnaker Pipelineは、DeveloperがGUI上で設定するので設定ミスをしやす く、デプロイ手法もサービスによって大きく質が異なる。 解決策 ● DeveloperがPipelineを簡単な設定で作れる仕組み ● Pipelineを作成すると、あとから変更することができないImmutableな仕組 み ● Platform Teamが各マイクロサービスのデプロイ手法を管理し、デプロイ手 法の標準化・Best Practiceを提供しつづけられる仕組み Spinnaker Managed Pipelineの導入

Slide 64

Slide 64 text

64 Spinnaker

Slide 65

Slide 65 text

65 Spinnaker Pipeline

Slide 66

Slide 66 text

66 Spinnaker Managed Pipeline Managed Pipelineとは、雛形になるManaged Pipeline Template(MPT)に設定情報であるPipeline Configurationsを渡してできるPipelineのこと。すべてコードで定義される。 Managed Pipeline Template(JSON) JSON Pipeline Configurations(JSON) JSON Managed Pipeline = + ・変数を定義 ・どのMPTを使うか指定 ・変数を値を定義 Platform Team

Slide 67

Slide 67 text

67 Spinnaker Managed Pipeline 主要な機能 ・Sync機能: MPTが更新すると、そのMPTから生成された全てのPipelineも同時に変更できる。 想定ユースケース : Platform Teamが各マイクロサービスのデプロイ手法を更新したい ・Immutable機能: Managed Pipelineは直接、変更をすることができない。 ・Configuration機能: 必要な部分だけMPTの一部を変数化をして、Managed Pipelineを生成時に Pipeline Configurationsとして設定できる。 (変数はImmutableではなく、いつでも変更できる ) Managed Pipelineを使えば、Managed Pipeline Templateを管理するだけで横断的に 全マイクロサービスのPipelineを管理することができる。

Slide 68

Slide 68 text

68 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline

Slide 69

Slide 69 text

69 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline V2 Platform Team デプロイ先を変更

Slide 70

Slide 70 text

70 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline V2 V2 V2 V2 Platform Team デプロイ先を変更

Slide 71

Slide 71 text

71 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline

Slide 72

Slide 72 text

72 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline Platform Team ベストプラクティスを追加 ✅

Slide 73

Slide 73 text

73 Service A Team Service B Team Service C Team Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline Platform Team ベストプラクティスを追加 ✅ ✅ ✅ ✅

Slide 74

Slide 74 text

74 Immutable機能 Managed Pipelineは、Pipeline Configurationで渡せる情報以外は変更することができない。 DeveloperがPipelineを改変したり、誤った設定することを防ぐことができる。 Pipeline自体は変更できない

Slide 75

Slide 75 text

75 Service Team Configure Application Configuration機能 Pipeline Configurations Spinnaker Managed Pipeline containerPort: 8000 Managed Pipeline Template { “variables”: { “containerPort”: 8000 } } 各マイクロサービスに依存する設定値だけは Pipeline生成時に設定をすることができる。

Slide 76

Slide 76 text

76 Configuration機能 変更できるのはMPTで定義された変数のみ 設定値だけはMutableで後からでもDeveloperが変更することができる。 しかし、基本的なPipeline自体はImmutableである。

Slide 77

Slide 77 text

77 Spinnaker Managed Pipeline 主要な機能 ・Sync機能 Platform TeamはMPTを管理するだけど全マイクロサービスのデプロイを管理することできる ・Immutable機能 PipelineをDeveloperに変更されて、壊されるリスクもない ・Configuration機能 必要な部分だけDeveloperに設定してもらえる マイクロサービスに必要な最小限の設定だけを公開して、あとから変更されることもなく、全マイクロサービス のデプロイの標準化・管理することができる

Slide 78

Slide 78 text

78 Platform TeamがMPTを保守・開発することによって、全マイクロサービスの Pipelineを管理することがで き、サービス全体でデプロイの質を担保しつづけることができる。 例: Best PracticeをMPTに実装することによって、全マイクロサービスの PipelineにそのBest Practiceが自動的に実装される クラスタMigrationやマイクロサービスのPipelineの変更を要するときにも、ひとつの MPTを変更するだけで 済み、Developerは何もする必要がない。 
 Pipeline as Code Trigger Kubernetes Repository Deploy MPT Platform Team SRE Team PR & Review PR & Review Circle CI Managed Pipeline Template

Slide 79

Slide 79 text

79 Spinnaker Managed Pipelineを導入することによって 各マイクロサービスのデプロイを 統括的に管理・質の向上をすることができる

Slide 80

Slide 80 text

80 05 Wrap up

Slide 81

Slide 81 text

81 Wrap up マイクロサービスアーキテクチャの継続的デリバリーにおいて、 サービス全体(全マイクロサービス)の質を担保して、すべてを安全にデプロイしていくことは一般的に難し い。 
 
 


Slide 82

Slide 82 text

82 Wrap up マイクロサービスアーキテクチャの継続的デリバリーにおいて、 サービス全体(全マイクロサービス)の質を担保して、すべてを安全にデプロイしていくことは一般的に難し い。 安全な継続的デリバリーを行うためにも、それぞれのマイクロサービスの開発サイクルの中で Policyを課し たり、デプロイをする仕組みを Platformが提供するべきです。 
 
 


Slide 83

Slide 83 text

83 Wrap up マイクロサービスアーキテクチャの継続的デリバリーにおいて、 サービス全体(全マイクロサービス)の質を担保して、すべてを安全にデプロイしていくことは一般的に難し い。 安全な継続的デリバリーを行うためにも、それぞれのマイクロサービスの開発サイクルの中で Policyを課し たり、デプロイをする仕組みを Platformが提供するべきです。 メルカリではOpen Policy AgentやSpinnakerのManaged Pipelineの機能を使うことによって、 すべてのマイクロサービスの Kubernetes ManifestへPolicyを課したり・デプロイの管理することができ まし た。 
 
 


Slide 84

Slide 84 text

84 Thank you!