Help us understand the problem. What is going on with this article?

Keycloak のコンテナ周りの動向調査

株式会社 日立製作所の茂木です。今回は Keycloak の Docker Container,Helm Chart, Operator を調査してみました。

Docker Image

Keycloak の公式 Docker Image は jboss/keycloak、Image 作成のための Dockerfile やスクリプトはhttps://github.com/keycloak/keycloak-containersで公開されています。このイメージは柔軟な設定変更へ対応するために、DB のアドレスやユーザ名/パスワードといった一般的な設定項目だけでなく、様々なパラメータや機能が搭載されています。今回はこのうちのいくつかを紹介します。

Running custom scripts on startup

Wildfly の CLI スクリプトやシェルスクリプトの実行を/opt/jboss/startup-scriptsに配置すると、Keycloak の起動前にそれらのスクリプトが実行されるようになります。イメージのパラメータとして公開されていない設定などを変更する際に用途に有用です。

Enable some metrics

KEYCLOAK_STATISTICSに値を指定すると、データベースや HTTP リクエストといったメトリクス情報が取得できるようになります。「Keycloak でメトリクス情報の取得」で紹介した Keycloak のメトリクスではなく、Wildfly が収集するメトリクス情報を取得できるようになります。

Helm Chart

Kubernetes 上では、Helm を利用してアプリケーションをデプロイすることが主流になっているかと思います。Keycloak の Helm チャートも公開されていますが、stable/keycloak で提供されているチャートは DEPRECATED となっていて、バージョンも 5.0.0 から更新されていません。説明にもあるように、codecentric のリポジトリを利用しましょう。

$ helm repo add codecentric https://codecentric.github.io/helm-charts
$ helm install keycloak codecentric/keycloak

ちなみにこの Helm チャートを利用すると、Keycloak は Deployment ではなく StatefulSet でデプロイされます。なぜStatefulSetを利用しているかは、Why StatefulSet?で説明されています。

Operator

Kubernetes 上にデプロイする方法としては、Operatorを利用するものもあります。Keycloak の Operator はhttps://github.com/keycloak/keycloak-operatorで公開されています。

Keycloak, Realm, Client, User および Backup の Custom Resource Definition(CRD)が提供されていて、これらを利用して Keycloak の操作を行えるようになっています。

今回は簡単に Keycloak Operator の導入方法を紹介します。

環境

今回は kubernetes v1.17 で動作させてみました。

Keycloak Operator の導入方法

まずはhttps://github.com/keycloak/keycloak-operatorを Clone し、必要な CRD や RoleBinding などをインストールしていきます。Makefile が用意されているので、make cluster/prepareを実行するだけで必要なリソースが keycloak という namespace に作成されます。

 $ make cluster/prepare
customresourcedefinition.apiextensions.k8s.io/keycloakbackups.keycloak.org created
customresourcedefinition.apiextensions.k8s.io/keycloakclients.keycloak.org created
customresourcedefinition.apiextensions.k8s.io/keycloakrealms.keycloak.org created
customresourcedefinition.apiextensions.k8s.io/keycloaks.keycloak.org created
customresourcedefinition.apiextensions.k8s.io/keycloakusers.keycloak.org created
namespace/keycloak created
role.rbac.authorization.k8s.io/keycloak-operator created
rolebinding.rbac.authorization.k8s.io/keycloak-operator created
serviceaccount/keycloak-operator created

次に Operator のイメージをデプロイします。上記で作成された ServiceAccount や RoleBinding は keycloak namespace にあるので、Operator も -n keycloak をつけてデプロイします。

$ kubectl apply -n keycloak -f  deploy/operator.yaml
deployment.apps/keycloak-operator created

Keycloak Operator の Pod が起動したら、Keycloak のリソースを作成してみます。deploy/examples/keycloak/にサンプルの定義があるのでそれを利用します。

$ kubectl apply -n keycloak -f deploy/examples/keycloak/keycloak.yaml
keycloak.keycloak.org/example-keycloak created

これで、keycloak の StatefulSet および PostgreSQL の Deployment、Service や Ingress が作成されます。ここまではできたのですが、Service の設定に Openshift の拡張(Securing service traffic using service serving certificate secrets)が利用されていたりなどで、現時点ではうまく動作しませんでした。

まだ開発が始まったばかりなので、これからの進化に期待していきたいと思います。

サンプル定義の中身

最後にサンプル定義の中身を見てみます。下記のファイルはdeploy/examples/keycloak/rhsso.yamlです。

apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
  name: example-keycloak
  labels:
    app: sso
spec:
  instances: 1
  extensions:
    - https://github.com/aerogear/keycloak-metrics-spi/releases/download/1.0.4/keycloak-metrics-spi-1.0.4.jar #<-- 1
  externalAccess:
    enabled: True
  profile: RHSSO # <--2

まず特徴的なのが 1 にあるように、プラグインの定義ができる点です。ここで指定されているのはこの記事で紹介したkeycloak-metrics-spiです。この定義を見る限りでは複数のプラグインが設定できるようです。
また、2 にあるようにprofileという項目で Keycloak と Red Hat SSO のデプロイを切り替えることができるようです。

まとめ

Keycloak のコンテナ周りについて調査しました。Operator は将来有望ですが、現時点ではまだまだ機能が足りないと感じます。当分は Helm を利用することになりそうです。

この Advent Calendar は去年からの取り組みですが、今年は社内で広く参加者を募集してみました。また、(株)日立製作所 サービスコンピューティング研究部 Advent Calendarの開催、やOpenChain Japan WG Advent Calendarへの参加など、社内でも情報発信の文化が広まってきたように思います。今後も様々な情報を発信していこうと思っていますので、よろしくお願いします。

最後になりますが、記事を掲載していただいた方、Advent Calendar の公開に協力していただいた方、そして購読していただいた方、ありがとうございました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした