LoginSignup
9
4

More than 1 year has passed since last update.

Keycloak Ver.17でデフォルトとなったQuarkusディストリビューションについて:設定項目比較編

Posted at

はじめに

前回の記事ではQuarkus版Keycloakと従来のWildFly版Keycloakの変更点概要を紹介しました。
Keycloak Ver.17はKeycloak.Xと呼ばれるアーキテクチャの刷新が行われて従来の
Keycloakから大きく変更されています。過去の記事ではプレビュー版のKeycloak.Xに対して機能面(外部DB接続、ロードバランサ接続、クラスタ構成)の確認を行っていましたが、今回は正式採用されたQuarkus版についてWildFly版と比較しつつ具体的な設定項目の可否やQuarkus版における改善内容をとりあげたいと思います。

設定可否の比較

WildFly版とQuarkus版の設定項目について、その可否を表にまとめました。参考として最右列にはQuarkus版におけるCLIオプションを記述しています。前回の記事で紹介したとおり、各CLIオプションはkeycloak.confに記述することで設定することも可能です。

記号 意味
できる
オプション設定のほかに作業が必要
× できない
設定大項目 設定小項目 WildFly Quarkus Quarkus版のCLIオプション
起動モード スタンドアローン
ドメインクラスター × 設定できない
クロスデータセンターレプリケーション --cache
--cache-config-file1
--cache-stack
DB DBの選択 --db
DBベンダーの追加 × 設定できない
ロードバランサ接続 --proxy
ホスト名設定 フロントエンドURL設定 --hostname
バックエンドURL設定 --hostname-strict-backchannel
管理URL設定 --hostname-admin
HTTPS/SSL設定 サーバ証明書と秘密鍵のストア --https-certificate-file
--http-certificate-key-file
クライアント証明書のストア --https-trust-store-file
外部接続 HTTP接続プーリング --spi-connections-http-client-default-
プロキシマッピング --spi-connections-http-client-default-
HTTPS接続のトラストストア --spi-truststore-file-

Quarkus版で改善されたこと

Keycloak.confにより設定の記述がシンプルになった

前回の記事で紹介したように、Quarkus版ではWildFlyの設定が混じった複雑なXMLファイルでなく、Keycloakの設定値のみが記載された設定ファイルであるkeycloak.confによって設定できます。
Keycloak Ver.17のWildFly版(Keycloak-17.0.0-legacy)の設定ファイル(standalone.xml)はデフォルトで570行ありましたが、keycloak.confはコメント行を除くと10行になりました。

また、設定の記述もシンプルになりました。たとえば、ホスト名の設定を記述する場合、従来のWildFly版では以下のようなXMLの記述が必要となります。

<spi name="hostname">
    <default-provider>default</default-provider>
    <provider name="default" enabled="true">
        <properties>
            <property name="frontendUrl" value="your-host-name"/>
        </properties>
    </provider>
</spi>

一方で、Quarkus版では以下のように1行で設定を記述できます。

hostname=your-host-name

このように、XML構造で記述しなくてよいため見通しの良い設定ファイルとなりました。

外部DBのドライバインストールが不要になった

従来のKeycloakで外部DBを扱う場合はmodule/ディレクトリ配下にJDBCドライバを配置して設定ファイルを書くことで設定していました。Quarkus版ではデフォルトでMariaDB、Microsoft SQL Server、MySQL、Oracle DB、PostgreSQLに対応しており、--dbオプションによって選択できます。このため、自身でJDBCドライバを用意する必要がなくなりました。

Quarkus版で対応しなくなったこと

ドメインクラスターモード

WildFlyの機能としてドメインコントローラと呼ばれるノードがKeycloakの設定を管理して他のクラスターノードへ設定を伝搬することで冗長構成する動作モードがありましたが、Quarkusへ変更されるとともに廃止されました。QuarkusがKubernetesネイティブということもあり、一般的なコンテナアプリケーションと同様に静的な設定項目は設定ファイル込みでコンテナイメージを作成して、動的な設定項目はデプロイ時に環境変数を渡して設定することがベストプラクティスとなっていくと考えられます。

独自のJDBCドライバ設定

前述したようにWildFly版のKeycloakではmodule/ディレクトリ配下にJDBCドライバを配置して設定ファイルを書くことで追加のドライバを入れることができました。一方で、一般にQuarkusアプリケーションでは動的にJDBCドライバを適用することはできず、mavenプロジェクトのpom.xmlに依存関係を記載したうえでapplication.propertiesにJDBCの設定を記載してアプリケーションをビルドする必要があります。また、KeycloakではDBベンダの設定が列挙体によって定義されており、JDBCドライバのURLなどは設定できるもののドライバ名などを設定として読み込ませることができません。そのため、Quarkus版のKeycloakでは従来のようにユーザが任意のJDBCドライバを設定することはできなくなり、デフォルトで組み込まれているJDBCドライバを利用することになります。

おわりに

Quarkus版Keycloakでは従来の設定はそのままに、より簡素な設定ファイルによって記述することができるようになりました。また、外部DBも自身でJDBCドライバを用意することなく設定記述のみで複数のDBから選択して接続できます。

一方で、ドメインクラスターモードに対応しなくなったため、各サーバで個別に設定ファイルを持つ必要がありデプロイ作業や設定ファイルの管理などの運用面は変わります。こうした点はQuarkusがKubernetesネイティブを謳うことからも一般的なコンテナアプリケーションの運用に近づけていくことが必要となる可能性があります。

  1. クラスターの設定にはXMLで記述するinfinispanの設定ファイルが必要です。

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4