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 27m
keycloak-postgresql
サービスは、バックエンドの IP アドレスのセットにリクエストを送信します。これらの IP アドレスはエンドポイントと呼ばれます。keycloak-postgresql
サービスで使用されるエンドポイントを表示して、それらがデータベースの IP アドレスを使用していることを確認します。$ oc get endpoints keycloak-postgresql NAME ENDPOINTS AGE keycloak-postgresql 192.0.2.3.5432 27m
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