NICTの若手セキュリティイノベーター育成プログラムであるSecHack365 に登用されて二〇一八年度は”サーバーレスによるセキュアなアプリケーションの実現”というテーマでハッカソンをしてパブリッククラウドにおけるあれやこれやをやっていくつもりでしたが気が付いたらローカルでの実行環境の方に目がいってしまいテーマややることを全く変えてしまいました.
ちなみに英文タイトルはyatteiki on Multi-Tenant Architecture for Managed Serverless Function and futureです.
はじめに
背景
- サーバーレスアーキテクチャによるサービス提供の一般化
- Webフックのプロセスやイベントを実行させたいという需要が高まっている時代.
- パブリックFaaSにおける様々な障壁
- FaaS基盤のOSS化
- kubernetesを利用するための障壁
- ローカルの計算資源を最大限利用したい
一般的に人々が何かしらの処理を行いたい場合にはローカルで計算資源を確保するかVPSやパブリックなクラウドサービスなどの外部サービスを用いることで実現できる.また,クラウドサービスの場合は負荷分散やオートスケールの仕組みを比較的に容易に準備できるのも利点の一つだがローカルの場合だと専門的なインフラや分散システムの知識を持っている人間にとっても困難である場合が多い.また,ローカルの実行環境が仮想マシンの場合は仮想マシンを自動で起動させる必要があるため,突発的なアクセス集中に対して負荷分散が間に合わず20ミリ秒以下で起動して、0.5秒間だけの実行などはできない.
最近では,OSSとしてコンテナオーケストレーションツールやFaaS基盤が公開されてきていますがこれらを利用することでローカルでのオートスケールの問題などが解決するのではないかと考える.
OSSとして公開されてきたコンテナオーケストレーションやFaaS基盤ですがこれらにはまだまだ,ソフトウェアとして歴史が浅く自明に必要な機能がなかったりもしています.特にFaaS基盤におけるマルチテナント対応に関してはまだまだ多くの課題があります.しかし,これらの基盤に関しては多くのcontributorがコミットをして成熟していき何かしらのソフトウェアが“事実上の標準”という座を掴むのだと思います.
クラウド・ネイティブ・コンピューティングは下記のような特徴を持ちます. * アプリケーションをマイクロサービスに分割する * 各パーツ自身をコンテナなどでパッケージ化 * リソースの利用を最適化するために、動的に統合/オーケストレーション
これらを実現するためのFaaS基盤は少なからずありますが今回はその中でも開発やコミュニティーが活発であるOpenFaaSについて利用したいと思った”が”その中でマルチテナントに関する問題にぶつかったのでその対応をするための提案を行っていきたい(KnativeとOpenShiftは恐らくマルチテナント対応されています).
OpenFaaSについてまとめたい
- Docker上で動作するServerlessなFramework
- Docker上で動作すればFunctionになりえる.
- swarmとkubernetes上の動作がサポートされている.
- その他の特性( microservices/Zero-scale/read-only functions )
Rancher のカタログを提供しているしAnsibleでもbuildできる.
OpenFaaSで利用できる言語としては以下のものがあります. Go, java8,node,php7,python2,python3,ruby,csharp https://github.com/openfaas/templates より
目的
充分に伸縮性のあるOpenFaaSという基盤でリソースを最大限活用するにはマルチテナントというのは大事な要素である.また,OpenFaaSを様々な機能が使えるような状況のままマルチテナント/マルチユーザーに対応させてオンプレなどでも利用したい.
OpenFaaS マルチテナント対応とOpenFaaS Multiuserについて
シングルテナントの基盤を複数台構築した場合はリソースが最適に使いきれなかったりサーバーが複数台に跨ぐため管理/運用 が煩雑になってしまったり,他の完璧なローカルで実行することは難しい.そこで一つのKubernetes基盤上に複数のユーザーを収容できるモデルについて提案,実装行う.
既存のOpenFaaSを複数ユーザーで使う方法①
シングルテナントで複数台 構築/運用/管理を行う
利点
- 構築が楽
- 構造が単純
問題点
- 管理が複雑で運用コストが高い.
- 一元管理がしずらい
- リソースが最大限使うことができない
既存のOpenFaaSを複数ユーザーで使う方法②
CI/CDの権限分離によって行う(OpenFaaS Cloudはこの方法)
利点
- リソースを最大限利用することがきる.
- 特殊な環境化でなければ これを工夫すれば十分に対応できるのではないか?
問題点
- 構築が大変/ローカルでは構築が難しい
- GitHubなどのシステムにどうしても依存してしまう.
- 権限制御が難しい.
OpenFaaS Multiuser には何ができるのか?
各Endpointにてローカルの認証を行うことで様々なことができるようになった.
ローカル認証による恩恵
- 既存のOpenFaaSの機能利用可能
- 別Namespaceにて関数の実行が可能
- 各ユーザーごとのGatewayの配置
- ローカルからのデプロイが可能
今後の課題
- オペレーションの確立
- マルチノード対応
- マルチリージョン対応
- ユーザ近傍におけるFunctionの実装
- サービスインした時の問題点
議論
- Kubernetesの認証について
- HTTPS化について
- I/Oについて