
Platform Engineering Kaigi 2024登壇レポート
Posted on
エンジニアの石井と申します。
プレイドは2024年7月9日 (火) に開催された Platform Engineering Kaigi 2024 にゴールドスポンサーとして参加いたしました。スポンサーセッションでは「モノリス開発の名残からの脱却、マルチプロダクト開発における多様な開発者のニーズに応える使い勝手と堅牢性を追求した認可基盤刷新の過程と工夫」というタイトルで登壇させていただきました。
かつて KARTE がモノリスだった頃の名残を留めていた認可基盤とその問題点、刷新後のアーキテクチャや安全な移行のために施した工夫などについてお話ししています。
この記事では、発表内容を紹介しつつ、構成上発表に含めなかった内容や当日いただいた質問への返答コメントも一部紹介しています。録画もございますので、発表内容の全体についてはそちらも合わせてご覧ください。
概要
昨今の KARTE ではマルチプロダクト展開が進んでおり、コードやデータベースは分割されていますが、認可基盤だけは全てのプロダクトで共通のコードを利用していました。これはいくつかの問題を抱えていました。
そこで、まずは新たな認可基盤のアーキテクチャについて検討しました。認可基盤を一枚岩のものとして構築するか、あるいは分散させて配置するか、どちらも一長一短があり迷いましたが、最終的には分散させる方針に決定しました。アプリケーションが稼働する Pod それぞれに対して、認可のためのコンテナをサイドカーとして配置しています。
認可用のコンテナには、アプリケーションごとに異なる認可の設定を施す必要があります。設定をどのように渡すべきかもいくつか選択肢がありましたが、最終的にはコンテナの中に組み込むことにしました。KARTE のデプロイには GitOps が採用されていますが、それに伴うリポジトリ構成なども考慮した上で、このような結論に至りました。
KARTE にはエンドユーザー、すなわちプレイドにとってのお客様 (企業) のお客様 (ユーザー) の個人情報が蓄積されています。そのため認可基盤のバグ、特に本来拒絶すべきリクエストを誤って許容してしまうケースが生じないように注意を払いました。従来の認可機構と二重で認可を行いつつ、問題があればアラートが鳴るよう仕込んだ上で、徐々に移行を進めました。
認可基盤の移行はほぼ完了していますが、運用自体はまだ始まって間もない段階です。現在の形に至るまでの意思決定が適切なものであったかどうかは、今後の過程で検証されていくでしょう。
おまけ
時間の都合で今回の発表からは省きましたが、アーキテクチャを検討していた時期には、どのように Pod にサイドカーを入れるのかについても議論がありました。
最初に参考にしたのは Istio です。今回お話しした認可基盤はサービスメッシュとは異なりますが、プロキシとして動作するサイドカーを利用するという点では似通っています。そのため、Istio と同じようなサイドカーインジェクションの仕組みが使えるのではないかと考えました。
しかし検討の末、このやり方は見送ることにしました。もしこれを採用する場合、Kubernetes の Admission Webhook を利用してサイドカーを注入する想定でした。しかし
- Admission Webhook のための追加実装が必要になる
- GitOps によって karte-ops リポジトリの Kubernetes マニフェストと GKE 上で稼働するリソースの同期が取られているが、Admission Webhook が介入するとサイドカーがどこで追加されたものなのかわかりにくくなる
という懸念が挙げられました。そして最終的には karte-ops リポジトリのマニフェストに直接サイドカーの設定を追加することになりました。
さて、当日いただいた質問の一つに「認可基盤のサイドカーがない状態でデプロイすることを防ぐ仕組みはあるか」というものがあります。上述の通り、認可基盤のサイドカーは自動ではインジェクションされないため、現時点ではそのリスクがあります。しかしマニフェストに対しては conftest を実施しており、事前に定義したルールに沿った設定になっているかを CI でチェックしています。サイドカーなしのデプロイもこれで検知できるのではないかと考え、検討を進めています。
最後に
当日のブースにご来場いただいた皆様、セッションをお聞きいただいた皆様、ありがとうございました。個人的には初の登壇でしたが、貴重な経験をさせていただいたことに感謝申し上げます。
そしてイベントのスタッフの皆様、企画ならびに運営のほどありがとうございました。Platform Engineering というテーマに思いを馳せつつ、さまざまな学びを得ることができる良い機会となりました。
今後のプレイドにとっても Platform Engineering は重要なテーマです。今回の参加で得た学びを活かしつつ、日々の開発に取り組んでまいります。