Keycloak.X アップデート

2021年10月28日 Stian Thorgersen 著

Keycloak.Xに関する計画を発表してからかなりの時間が経ちました。実際には2年前になります。他の優先事項により、少し気が散っていましたが、今はついにフルスピードで進んでいます。

Keycloak.Xは、より軽量、高速、容易になり、スケーラビリティが向上し、クラウドネイティブになり、その他多くの利点があります。素晴らしい進化にご期待ください!

Keycloak.Xの一環として、コード変更だけでなく、Keycloakチームがユーザーエクスペリエンスと、単なるコードの断片ではなく、管理しやすいソリューションの提供にさらに焦点を当てるという文化的な変化も起こります。

いくつかの破壊的な変更が予定されていますが、移行を可能な限り容易にすることに努めます。WildFlyからQuarkusへの移行のような破壊的変更については、移行期間として6ヶ月を提供する予定です。

もしそれが十分でない場合は、Red HatによるKeycloakのサポート対象ビルドであるRed Hat Single Sign-Onがあります。現在のKeycloakアーキテクチャに基づいたRed Hat Single Sign-On 7は、2024年6月までサポートされます(現在は2023年と記載されていますが、間もなく2024年に延長されます)。

今後、このブログ記事の続編で詳細をお伝えしますが、今のところはKeycloak.Xのハイライトをいくつか見ていきましょう。

ハイライト

エクスペリエンス

前述のとおり、Keycloakのエクスペリエンスにさらに多くの注意が払われます。これを念頭に置いて、幅広いユースケースをカバーすると考えられるいくつかのエクスペリエンスを特定しました。

  • アプリケーション開発者 Keycloakをアプリケーションやサービスと統合する開発者

  • カスタマイザー Keycloakを拡張したり、他のシステムと統合したりする開発者

  • ブリッジ Keycloakをアプリケーションと他のアイデンティティソリューション間のブリッジとして使用する

  • 通常 Keycloakの一般的な中小規模のデプロイメント

  • 超大規模 非常に大規模なユースケース向けのKeycloakの伸縮性があり、可用性の高いデプロイメント

  • SaaS 超大規模の拡張であり、KeycloakがSaaS、CIAM、およびB2Cシナリオのアイデンティティを有効にする

Quarkus

Keycloakを構築するプラットフォームとしてQuarkusに切り替えています。WildFlyと比較して、これにより起動時間が短縮され、メモリフットプリントが削減されます。また、複雑なXMLファイルの代わりに、コマンドライン引数と環境変数を使用してKeycloakを構成する、はるかにシンプルなアプローチが提供されます。Quarkusのもう1つの優れた点は、ディストリビューションに含まれる外部ライブラリをより詳細に制御できることです。依存関係のアップグレードを高速化することも含め、CVEに関する状況を大幅に改善するはずです。

ストレージの再アーキテクチャ

Keycloak.Xの一部として、ストレージ層の大幅な再アーキテクチャを行っています。これは、現在のアーキテクチャで発見された多くの欠点に対処するためです。ゼロダウンタイムアップグレード、スケーラビリティ、可用性がこの新しいアーキテクチャの重要なトピックとなり、長期的には追加のストレージタイプをはるかに簡単にサポートできるようになります。

Operatorとコンテナ

Keycloakの現在の構成アプローチでは、コンテナに関する優れたエクスペリエンスを作成することは、コンテナが環境変数から複雑なXML構成ファイルに変換する必要があるため、問題があります。Quarkusに関して行っている作業により、環境変数を使用したKeycloakの構成がネイティブになり、優れたコンテナエクスペリエンスをはるかに簡単に提供できるようになります。

同様に、OperatorもKeycloakの構成が容易になるため、よりシンプルにできます。また、基本ディストリビューションからのより優れた意見主導の構成も備えており、Zipディストリビューションからコンテナ、そして最終的にはOperatorにまで浸透します。コードベースをより整合させるために、Java SDKとQuarkusを使用してOperatorを最初から書き直しています。

可観測性

メトリクス、トレース、ロギング、ヘルスチェックはすべて、クラウドネイティブアプリケーションの重要な側面です。これらはすべて、特にKubernetesまたはOpenShiftで実行している場合に、Keycloakを本番環境で管理およびデバッグするための重要な機能です。

GitOpsフレンドリーな構成

GitOpsまたはCI/CD環境では、Keycloak内のランタイム構成を管理することが問題になる可能性があります。レルムやクライアントなどのすべての構成はデータベースに存在し、REST APIを通じてのみ管理できるため、GitOpsプロセスの一部として確実に管理することは困難です。

ストレージの再アーキテクチャに加えて、複数のソースからの構成をフェデレーションできる非常に強力な機能が付属しており、ファイルベースのストアでこれを活用する予定です。Keycloakは、ファイルシステム(もちろんYAML)からより静的/不変の構成を読み取り、これをDBからの動的/可変の構成と組み合わせることができます。

さらに、これにより、静的構成をGitリポジトリにチェックインし、必要に応じて開発、ステージング、および本番環境にデプロイできます。

外部統合

Keycloakには今日、SPIと呼ばれる多数の拡張ポイントがあります。Java(および場合によってはJavaScript)を使用すると、これらのSPIのカスタムプロバイダーを使用してKeycloakをカスタマイズできます。非常に強力で柔軟性がありますが、これは最新のKubernetes中心のアーキテクチャでは理想的ではありません。拡張機能はKeycloakと同じ場所に配置されているため、拡張機能のデプロイ、アップグレード、およびスケーリングが困難になります。拡張機能は、任意の言語またはフレームワークで記述することもできないため、Java以外の開発者がKeycloakを拡張するのにコストがかかります。

これを念頭に置いて、リモート拡張を通じてKeycloakを拡張および統合する機能にさらに焦点を当てることを計画しており、これを実現するための手段としてREST、gRPC、Knative、Kafkaなどを検討しています。さらに、フロントエンドを自由に構築できる「ヘッドレス」Keycloakを実現したいと考えており、これはUIをカスタマイズするための現在のテーマアプローチに大きな追加となるでしょう。

分解

最後になりましたが、Keycloakを分解する機能と、Keycloakのコードベースと機能の分離を改善することも計画しています。ここでは完全なマイクロサービスアーキテクチャにする予定はありませんが、すべてを単一のプロセスとして実行できるようにする賢明な妥協案であり、Keycloakの一部を外部サービスに分離できる機能も備えています。

ロードマップ

ご想像のとおり、Keycloak.Xで計画していることはすべて大量の作業であり、一晩では実現しません。Quarkusへの移行やストレージ層の再アーキテクチャなどの破壊的な変更に最初に焦点を当てています。

現時点ではすべてが完全に計画されているわけではありませんが、Keycloak.Xのさまざまなコンポーネントがいつ提供されるかについては、ある程度のアイデアを持っています。

  • ASAP: Keycloak 16はQuarkusディストリビューションの最後のプレビューとなる予定です。ぜひお試しいただき、フィードバックをお寄せください。

  • 2021年12月: Keycloak 17では、Quarkusディストリビューションを完全にサポートし、WildFlyディストリビューションを非推奨にする予定です。

  • 2022年3月: Keycloak 18では、新しいOperatorを含め、新しいストアのプレビューを目指しています。また、この時点でコードベースからWildFlyのサポートを削除する予定です。

  • 2022年6月: Quarkusディストリビューションのみの最初のリリース。また、この時点で新しいストアを完全にサポートされるオプションにしたいと考えています。

上記の日付は変更される可能性があります!

フィードバック

Keycloak.Xに関する計画についてフィードバックをお待ちしております。Keycloakの将来について議論するために、GitHub Discussionsにご参加ください!