検索

第3章 Red Hat build of Keycloak をコンテナー内で実行する

download PDF

この章では、コンテナーを実行する際に最適なエクスペリエンスを実現するために、Red Hat build of Keycloak コンテナーイメージを最適化して実行する方法を説明します。

警告

この章は、OpenShift 環境で実行するイメージのビルドにのみ適用されます。このイメージは OpenShift 環境のみをサポートします。他の Kubernetes ディストリビューションで実行する場合はサポートされません。

3.1. カスタマイズおよび最適化されたコンテナーイメージの作成

デフォルトの Red Hat build of Keycloak コンテナーイメージは、すぐに設定および最適化できる状態で出荷されます。

Red Hat build of Keycloak コンテナーを最適に起動するには、コンテナーのビルド中に build ステップを実行してイメージをビルドします。この手順を実行することで、後に続くコンテナーイメージの各起動フェーズで時間を節約できます。

3.1.1. 最適化された Red Hat build of Keycloak Dockerfile を記述する

次の Dockerfile は、健全性およびメトリクスのエンドポイントとトークン交換機能を有効にし、PostgreSQL データベースを使用する、事前設定済みの Red Hat build of Keycloak イメージを作成します。

Dockerfile:

FROM registry.redhat.io/rhbk/keycloak-rhel9:24 as builder

# Enable health and metrics support
ENV KC_HEALTH_ENABLED=true
ENV KC_METRICS_ENABLED=true

# Configure a database vendor
ENV KC_DB=postgres

WORKDIR /opt/keycloak
# for demonstration purposes only, please make sure to use proper certificates in production instead
RUN keytool -genkeypair -storepass password -storetype PKCS12 -keyalg RSA -keysize 2048 -dname "CN=server" -alias server -ext "SAN:c=DNS:localhost,IP:127.0.0.1" -keystore conf/server.keystore
RUN /opt/keycloak/bin/kc.sh build

FROM registry.redhat.io/rhbk/keycloak-rhel9:24
COPY --from=builder /opt/keycloak/ /opt/keycloak/

# change these values to point to a running postgres instance
ENV KC_DB=postgres
ENV KC_DB_URL=<DBURL>
ENV KC_DB_USERNAME=<DBUSERNAME>
ENV KC_DB_PASSWORD=<DBPASSWORD>
ENV KC_HOSTNAME=localhost
ENTRYPOINT ["/opt/keycloak/bin/kc.sh"]

ビルドプロセスには複数の段階が含まれます。

  • build コマンドを実行してサーバーのビルドオプションを設定し、最適化されたイメージを作成します。
  • build 段階で生成されたファイルが、新しいイメージにコピーされます。
  • 最後のイメージで、ホスト名とデータベースの追加の設定オプションが設定されているため、コンテナーの実行時にそれらを再度設定する必要はありません。
  • エントリーポイントで、kc.sh により、すべてのディストリビューションのサブコマンドがアクセス可能になります。

カスタムプロバイダーは、JAR ファイルを /opt/keycloak/providers ディレクトリーに含めるステップを定義するだけでインストールできます。このステップは、以下のように、build コマンドを RUNs 行の前に配置する必要があります。

# A example build step that downloads a JAR file from a URL and adds it to the providers directory
FROM registry.redhat.io/rhbk/keycloak-rhel9:24 as builder

...

# Add the provider JAR file to the providers directory
ADD --chown=keycloak:keycloak --chmod=644 <MY_PROVIDER_JAR_URL> /opt/keycloak/providers/myprovider.jar

...

# Context: RUN the build command
RUN /opt/keycloak/bin/kc.sh build

3.1.2. 追加の RPM パッケージをインストールする

FROM registry.redhat.io/rhbk/keycloak-rhel9 段階で新しいソフトウェアをインストールしようとすると、microdnfdnf、さらには rpm がインストールされていないことがわかります。また、利用できるパッケージは非常に少なく、bash シェルと Red Hat build of Keycloak 自体の実行に必要なものしかありません。これは、Red Hat build of Keycloak の攻撃対象領域を減らすセキュリティー強化対策によるものです。

まず、ユースケースを別の方法で実装できるかどうかを検討し、なるべく最終的なコンテナーへの新規 RPM のインストールを回避します。

  • Dockerfile 内の RUN curl 命令は、リモート URL をネイティブにサポートしているため、ADD に置き換えることができます。
  • 一部の一般的な CLI ツールは、Linux ファイルシステムを創造的に使用することで置き換えることができます。たとえば、ip addr show tap0cat/sys/class/net/tap0/address になります。
  • RPM を必要とするタスクはイメージビルドの前の段階に移動し、代わりに結果をコピーできます。

以下は例です。前のビルド段階で update-ca-trust を実行し、後の段階に結果をコピーします。

FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
COPY mycertificate.crt /etc/pki/ca-trust/source/anchors/mycertificate.crt
RUN update-ca-trust

FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /etc/pki /etc/pki

絶対に必要な場合は、ubi-micro で確立された次の 2 段階のパターンに従い、新しい RPM をインストールできます。

FROM registry.access.redhat.com/ubi9 AS ubi-micro-build
RUN mkdir -p /mnt/rootfs
RUN dnf install --installroot /mnt/rootfs <package names go here> --releasever 9 --setopt install_weak_deps=false --nodocs -y && \
    dnf --installroot /mnt/rootfs clean all && \
    rpm --root /mnt/rootfs -e --nodeps setup

FROM registry.redhat.io/rhbk/keycloak-rhel9
COPY --from=ubi-micro-build /mnt/rootfs /

このアプローチでは chroot (/mnt/rootfs) を使用するため、指定したパッケージとその依存関係のみがインストールされます。その結果、推測を必要とせずに第 2 段階に簡単にコピーできます。

警告

一部のパッケージには、依存関係の大きなツリーがあります。新しい RPM をインストールすると、コンテナーの攻撃対象領域が意図せず増大する可能性があります。インストールされているパッケージのリストを慎重に確認してください。

3.1.3. コンテナーイメージの構築

実際の container イメージをビルドするには、Dockerfile を含むディレクトリーから次のコマンドを実行します。

podman build . -t mykeycloak

3.1.4. 最適化された Red Hat build of Keycloak コンテナーイメージの起動

イメージを起動するには、以下を実行します。

podman run --name mykeycloak -p 8443:8443 \
        -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=change_me \
        mykeycloak \
        start --optimized

Red Hat build of Keycloak は、セキュアな HTTPS 通信のみを使用して実稼働モードで開始され、https://localhost:8443 で使用できます。

ヘルスチェックエンドポイントは、https://localhost:8443/healthhttps://localhost:8443/health/ready、および https://localhost:8443/health/live で使用できます。

https://localhost:8443/metrics を開くと、モニタリングソリューションで使用できる運用メトリクスを含むページが表示されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.