本記事は「Kong Advent Calendar 2024」の20日目のエントリとして、Kong Gatewayを実際にプロダクト環境で4年間運用して得た経験を皆様に還元いたします。
はじめに
皆さんはKong API Gatewayを運用していますでしょうか?マイクロサービスアーキテクチャにおいて、APIゲートウェイは不可欠な存在です。本記事では、私たちのチームがKongを4年間運用してきた経験を基に、Kongのメリットとデメリット、そして意外な活用事例についてご紹介します。
4年前、私たちがKong Gatewayを本番環境で運用始めた際には情報が少なく、不安もありました。
2020年の初夢にはゴリラが出てくる程度には寝ても覚めてもKongのことを考えていた4年間の一つの区切りとしてアウトプットを以下に記載いたします。
私たちの環境
- 利用している Kong製品: Kong Gateway, Kong Ingress Controller, Kong Helm Chart, 自作したGo製のKong Plugin
- 利用期間:約4年
- 利用規模:Kubernetes上の150くらいのマイクロサービス
- 利用目的:独自の認証認可をkong pluginに集約した集中管理
Kongを使っていてよかったところ
高い拡張性と柔軟性
Kongは、プラグインによって機能を拡張できることが大きな特徴です。認証、レート制限、キャッシュなど、様々な機能をプラグインで実現できます。また、Kongはオープンソースであるため、コミュニティが開発したプラグインも豊富に存在します。
そして、まさに、Kong Pluginを自作することで独自の認証認可機構を構築できる目処が立った点こそがKong Gatewayを利用するに至った点でもあります。
高いパフォーマンス
Kongは、Luaで実装されており、高いパフォーマンスを実現しています。大規模なトラフィックにも耐えうるスケーラビリティも魅力です。
Kong Gatewayを配置したKuberntes上のpodがスケールアウトする速度も申し分なく、スパイクアクセスがあっても、大きな問題は起きていません。
Kubernetesとの高い親和性
Kong Ingress Controllerを利用することで、Kubernetes環境にKongを簡単に導入できます。KubernetesのService Discoveryと連携し、動的なサービスの管理も可能です。
充実したドキュメントとコミュニティ
Kongは、公式ドキュメントが充実しており、コミュニティも活発です。基本的には何か問題があっても情報が見つからないといったケースには出会っていません。
Kongの辛いところ
設定の複雑さ
Kongの設定は、YAML形式で行います。プラグインの設定も複雑になりがちで、初心者にとっては学習コストが高い場合があります。
運用が安定するまでは、設定が意図通り機能しているのかを確認するのにかなり時間を費やすことがありました。
バージョンアップ時の影響
Kongは、頻繁にバージョンアップが行われます。バージョンアップに伴い、設定やプラグインの変更が必要になる場合があります。
私たちのチームはKong関連のプロダクトを複数組み合わせているため、そのバージョン毎の組み合わせと頻度には注意を払いつつ運用をしてきています。
ただし、Kong Gateway 3.4以降LTSによって安定した運用が可能になってきています。
エラーログを止める術がない場合がある
正常に動作しており、利用状況としては問題ない場合でもエラーログが出力されるため、運用上許容すべきエラーログを運用ドキュメントにまとめたり、量の多いものはDatadogで上除外する形の運用を実施しています。
見逃してはいけないエラーログと運用上許容数エラーログの判別には慎重な判断が求められます。
(ただ、実際は動いていれば許容するという方向に流れがちではあります。)
4年間運用して感じたこと
Kong Pluginの柔軟性とパフォーマンス
Kong Pluginは公式のものはLuaによる実装ですが、Go言語やPytohn、JavaScriptでも記述できます。私たちは、Go言語で高性能なカスタムプラグインを開発し、特定の要件に対応してきました。
Kong Helm Chartの便利さ
Kong Helm Chartを利用することで、Kubernetesへの導入が非常に簡単になります。また、リリースノートには、Breaking Changeが丁寧に記載されているため、バージョンアップ時の影響を事前に把握できます。
nginxの機能との親和性
Kongは、nginxを内包しているため、nginxで利用していた機能をそのまま利用できます。例えば、log formatを既存のシステムと合わせることで、ログ解析の効率化を図ることができます。
まとめ
書き出してみると、当たり障りのない使い方をしているのかもしれませんが、Kongという素晴らしい製品に助けられた四年間であったと考えられます。
できる範囲で、恩恵を受けた分はKong コミュニティにもお返し出来たらと考えこの記事を作成しました。
Kongの導入を検討されている方の参考になれば幸いです。
上記は、私がKong Gatewayを運用してきた個人的な経験と見解に基づいたものです。所属組織の見解とは異なる場合があります。