11.8. 外部データベースへの接続
Operator を使用して、keycloak-db-secret YAML ファイルを作成し、Keycloak CR externalDatabase プロパティーを有効に設定することで、外部 PostgreSQL データベースに接続できます。値は Base64 でエンコードされていることに注意してください。
keycloak-db-secret の YAML ファイルサンプル
以下のプロパティーは、データベースのホスト名または IP アドレスとポートを設定します。
-
POSTGRES_EXTERNAL_ADDRESS- 外部データベースの IP アドレスまたはホスト名。 -
POSTGRES_EXTERNAL_PORT- (必要に応じて) データベースポート。
他のプロパティーは、ホストされたデータベースまたは外部データベースと同じ方法で機能します。以下のように設定します。
-
POSTGRES_DATABASE- 使用されるデータベース名。 -
POSTGRES_USERNAME- データベースのユーザー名 -
POSTGRES_PASSWORD- データベースのパスワード -
POSTGRES_SUPERUSER- バックアップがスーパーユーザーとして実行されるかどうかを示します。通常はtrueです。 -
ssl_MODE: 外部 PostgreSQL データベースへの接続で TLS を使用するかどうかを示します。使用できる 値を確認します。
SSL_MODE を有効にすると、Operator は、PostgreSQL データベースが使用する root.crt が含まれる keycloak-db-ssl-cert-secret というシークレットを検索します。シークレットの作成は任意で、データベースの証明書を検証する場合にのみシークレットが使用されます (例: SSLMODE: verify-ca)。以下は例です。
Operator によって使用される TLS Secret の YAML ファイルのサンプル。
Operator は keycloak-postgresql という名前のサービスを作成します。このサービスは、POSTGRES_EXTERNAL_ADDRESS のコンテンツに基づいて外部データベースを公開するように、Operator によって設定されます。Red Hat Single Sign-On は、このサービスを使用してデータベースに接続します。つまり、データベースに直接接続するのではなく、このサービスを介して接続します。
Operator は keycloak-postgresql という名前のサービスを作成します。このサービスは、POSTGRES_EXTERNAL_ADDRESS のコンテンツに基づいて外部データベースを公開するように、Operator によって設定されます。Red Hat Single Sign-On は、このサービスを使用してデータベースに接続します。つまり、データベースに直接接続するのではなく、このサービスを介して接続します。
Keycloak カスタムリソースには、外部データベースのサポートを有効にするために更新が必要です。
外部データベースをサポートする Keycloak カスタムリソースの YAML ファイルの例
前提条件
-
keycloak-db-secretの YAML ファイルがある。 -
Keycloak カスタムリソースを変更して
externalDatabaseをtrueに設定している。 - cluster-admin パーミッション、または管理者によって付与される同等のレベルのパーミッションがある。
手順
PostgreSQL データベースのシークレットを検索します (
oc get secret <secret_for_db> -o yaml)。以下は例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow POSTGRES_EXTERNAL_ADDRESSは Base64 形式です。シークレットの値をデコードします (
echo "<encoded_secret>" | base64 -decode)。以下は例になります。echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3
$ echo "MTcyLjE3LjAuMw==" | base64 -decode 192.0.2.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow デコードされた値がデータベースの 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
$ 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.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 実行中のサービスの一覧に
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 27m
$ 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 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow keycloak-postgresqlサービスは、バックエンドの IP アドレスのセットにリクエストを送信します。これらの IP アドレスはエンドポイントと呼ばれます。keycloak-postgresqlサービスで使用されるエンドポイントを表示して、それらがデータベースの IP アドレスを使用していることを確認します。oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27m
$ oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27mCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red 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
$ 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.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow