11.6. 外部データベースへの接続
Keycloak カスタムリソースを変更し、keycloak-db-secret YAML ファイルを作成して、Operator を使用して外部 PostgreSQL データベースに接続できます。値は Base64 でエンコードされていることに注意してください。
keycloak-db-secret の YAML ファイルサンプル
apiVersion: v1
kind: Secret
metadata:
name: keycloak-db-secret
namespace: keycloak
stringData:
POSTGRES_DATABASE: <Database Name>
POSTGRES_EXTERNAL_ADDRESS: <External Database IP or URL (resolvable by K8s)>
POSTGRES_EXTERNAL_PORT: <External Database Port>
# Strongly recommended to use <'Keycloak CR-Name'-postgresql>
POSTGRES_HOST: <Database Service Name>
POSTGRES_PASSWORD: <Database Password>
# Required for AWS Backup functionality
POSTGRES_SUPERUSER: true
POSTGRES_USERNAME: <Database Username>
type: Opaque
以下のプロパティーは、データベースのホスト名または IP アドレスとポートを設定します。
-
POSTGRES_EXTERNAL_ADDRESS- 外部データベースの IP アドレスまたはホスト名。 -
POSTGRES_EXTERNAL_PORT- (必要に応じて) データベースポート。
他のプロパティーは、ホストされたデータベースまたは外部データベースと同じ方法で機能します。以下のように設定します。
-
POSTGRES_DATABASE- 使用されるデータベース名。 -
POSTGRES_HOST- データベースとの通信に使用するサービスの名前。通常は、keycloak-postgresqlとなります。 -
POSTGRES_USERNAME- データベースのユーザー名 -
POSTGRES_PASSWORD- データベースのパスワード -
POSTGRES_SUPERUSER- バックアップがスーパーユーザーとして実行されるかどうかを示します。通常はtrueです。
Keycloak カスタムリソースには、外部データベースのサポートを有効にするために更新が必要です。
外部データベースをサポートする Keycloak カスタムリソースの YAML ファイルの例
apiVersion: keycloak.org/v1alpha1
kind: Keycloak
metadata:
labels:
app: sso
name: example-keycloak
namespace: keycloak
spec:
externalDatabase:
enabled: true
instances: 1
前提条件
-
keycloak-db-secretの YAML ファイルがある。 -
Keycloak カスタムリソースを変更して
externalDatabaseをtrueに設定している。 - cluster-admin パーミッション、または管理者によって付与される同等のレベルのパーミッションがある。
手順
PostgreSQL データベースのシークレットを検索します (
oc get secret <secret_for_db> -o yaml)。以下は例になります。$ oc get secret keycloak-db-secret -o yaml apiVersion: v1 data POSTGRES_DATABASE: cm9vdA== POSTGRES_EXTERNAL_ADDRESS: MTcyLjE3LjAuMw== POSTGRES_EXTERNAL_PORT: NTQzMg==POSTGRES_EXTERNAL_ADDRESSは Base64 形式です。シークレットの値をデコードします (
echo "<encoded_secret>" | base64 -decode)。以下は例になります。$ echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3デコードされた値がデータベースの IP アドレスと一致していることを確認します。
$ oc get pods -o wide NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 13m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 24m 192.0.2.3実行中のサービスの一覧に
keycloak-postgresqlが表示されることを確認します。$ oc get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE keycloak ClusterIP 203.0.113.0 <none> 8443/TCP 27m keycloak-discovery ClusterIP None <none> 8080/TCP 27m keycloak-postgresql ClusterIP 203.0.113.1 <none> 5432/TCP 27mkeycloak-postgresqlサービスは、バックエンドの IP アドレスのセットにリクエストを送信します。これらの IP アドレスはエンドポイントと呼ばれます。keycloak-postgresqlサービスで使用されるエンドポイントを表示して、それらがデータベースの IP アドレスを使用していることを確認します。$ oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27mRed Hat Single Sign-On が外部データベースで実行されていることを確認します。この例は、すべてが実行されていることを示しています。
$ oc get pods NAME READY STATUS RESTARTS AGE IP keycloak-0 1/1 Running 0 26m 192.0.2.0 keycloak-postgresql-c8vv27m 1/1 Running 0 36m 192.0.2.3