6.3. 手順
- Data Grid Operator をインストールします。
Data Grid クラスターにアクセスするための認証情報を設定します。
Red Hat build of Keycloak が Data Grid クラスターで認証できるようにするには、この認証情報が必要です。次の
identities.yaml
ファイルで、管理者権限を持つユーザー名とパスワードを設定します。credentials: - username: developer password: strong-password roles: - admin
credentials: - username: developer password: strong-password roles: - admin
Copy to Clipboard Copied! identities.yaml
は、次のいずれかの方法でシークレットに設定できます。Kubernetes リソースとして:
認証情報シークレット
apiVersion: v1 kind: Secret type: Opaque metadata: name: connect-secret namespace: keycloak data: identities.yaml: Y3JlZGVudGlhbHM6CiAgLSB1c2VybmFtZTogZGV2ZWxvcGVyCiAgICBwYXNzd29yZDogc3Ryb25nLXBhc3N3b3JkCiAgICByb2xlczoKICAgICAgLSBhZG1pbgo=
apiVersion: v1 kind: Secret type: Opaque metadata: name: connect-secret namespace: keycloak data: identities.yaml: Y3JlZGVudGlhbHM6CiAgLSB1c2VybmFtZTogZGV2ZWxvcGVyCiAgICBwYXNzd29yZDogc3Ryb25nLXBhc3N3b3JkCiAgICByb2xlczoKICAgICAgLSBhZG1pbgo=
1 Copy to Clipboard Copied! - 1
- Base64 でエンコードした上記の例の
identities.yaml
。
CLI の使用
oc create secret generic connect-secret --from-file=identities.yaml
oc create secret generic connect-secret --from-file=identities.yaml
Copy to Clipboard Copied! 詳細は、認証の設定 ドキュメントを参照してください。
これらのコマンドは両方の OpenShift クラスターで実行する必要があります。
サービスアカウントを作成します。
クラスター間の接続を確立するには、サービスアカウントが必要です。Data Grid Operator は、これを使用してリモートサイトからネットワーク設定を検査し、それに応じてローカル Data Grid クラスターを設定します。
詳細は、マネージドのクロスサイトレプリケーション ドキュメントを参照してください。
次のように
service-account-token
シークレットタイプを作成します。同じ YAML ファイルを両方の OpenShift クラスターで使用できます。xsite-sa-secret-token.yaml
apiVersion: v1 kind: Secret metadata: name: ispn-xsite-sa-token annotations: kubernetes.io/service-account.name: "xsite-sa" type: kubernetes.io/service-account-token
apiVersion: v1 kind: Secret metadata: name: ispn-xsite-sa-token
1 annotations: kubernetes.io/service-account.name: "xsite-sa"
2 type: kubernetes.io/service-account-token
Copy to Clipboard Copied! サービスアカウントを作成し、両方の OpenShift クラスターでアクセストークンを生成します。
Site-A
でサービスアカウントを作成するoc create sa -n keycloak xsite-sa oc policy add-role-to-user view -n keycloak -z xsite-sa oc create -f xsite-sa-secret-token.yaml oc get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -d > Site-A-token.txt
oc create sa -n keycloak xsite-sa oc policy add-role-to-user view -n keycloak -z xsite-sa oc create -f xsite-sa-secret-token.yaml oc get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -d > Site-A-token.txt
Copy to Clipboard Copied! Site-B
でサービスアカウントを作成するoc create sa -n keycloak xsite-sa oc policy add-role-to-user view -n keycloak -z xsite-sa oc create -f xsite-sa-secret-token.yaml oc get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -d > Site-B-token.txt
oc create sa -n keycloak xsite-sa oc policy add-role-to-user view -n keycloak -z xsite-sa oc create -f xsite-sa-secret-token.yaml oc get secrets ispn-xsite-sa-token -o jsonpath="{.data.token}" | base64 -d > Site-B-token.txt
Copy to Clipboard Copied! 次に、
Site-A
からSite-B
にトークンをデプロイしてから、その逆を行います。Site-B
のトークンをSite-A
にデプロイするoc create secret generic -n keycloak xsite-token-secret \ --from-literal=token="$(cat Site-B-token.txt)"
oc create secret generic -n keycloak xsite-token-secret \ --from-literal=token="$(cat Site-B-token.txt)"
Copy to Clipboard Copied! Site-A
のトークンをSite-B
にデプロイするoc create secret generic -n keycloak xsite-token-secret \ --from-literal=token="$(cat Site-A-token.txt)"
oc create secret generic -n keycloak xsite-token-secret \ --from-literal=token="$(cat Site-A-token.txt)"
Copy to Clipboard Copied!
TLS シークレットを作成します。
この章では、Data Grid でクロスサイト通信に OpenShift ルートを使用します。この OpenShift ルートは、TLS の SNI 拡張を使用してトラフィックを正しい Pod に送信します。これを実現するために、JGroups は TLS ソケットを使用します。これには、正しい証明書を備えたキーストアとトラストストアが必要です。
詳細は、クロスサイト接続のセキュリティー保護 ドキュメントまたはこちらの Red Hat Developer Guide を参照してください。
キーストアとトラストストアは、OpenShift シークレットでアップロードします。シークレットには、ファイルの内容、ファイルにアクセスするためのパスワード、およびストアのタイプを含めます。証明書とストアを作成する手順は、このガイドの範囲外です。
キーストアをシークレットとしてアップロードするには、次のコマンドを使用します。
キーストアのデプロイ
oc -n keycloak create secret generic xsite-keystore-secret \ --from-file=keystore.p12="./certs/keystore.p12" \ --from-literal=password=secret \ --from-literal=type=pkcs12
oc -n keycloak create secret generic xsite-keystore-secret \ --from-file=keystore.p12="./certs/keystore.p12" \
1 --from-literal=password=secret \
2 --from-literal=type=pkcs12
3 Copy to Clipboard Copied! トラストストアをシークレットとしてアップロードするには、次のコマンドを使用します。
トラストストアのデプロイ
oc -n keycloak create secret generic xsite-truststore-secret \ --from-file=truststore.p12="./certs/truststore.p12" \ --from-literal=password=caSecret \ --from-literal=type=pkcs12
oc -n keycloak create secret generic xsite-truststore-secret \ --from-file=truststore.p12="./certs/truststore.p12" \
1 --from-literal=password=caSecret \
2 --from-literal=type=pkcs12
3 Copy to Clipboard Copied! 注記キーストアとトラストストアは、両方の OpenShift クラスターにアップロードする必要があります。
クロスサイトを有効にして Data Grid のクラスターを作成する
クロスサイトの設定 ドキュメントに、上記の手順を含め、クロスサイトを有効にして Data Grid クラスターを作成および設定する方法に関するすべての情報が記載されています。
この章では、上記の手順のコマンドによって作成された認証情報、トークン、および TLS キーストア/トラストストアを使用した基本的な例を示します。
Site-A
のInfinispan
CRapiVersion: infinispan.org/v1 kind: Infinispan metadata: name: infinispan namespace: keycloak annotations: infinispan.org/monitoring: 'true' spec: replicas: 3 security: endpointSecretName: connect-secret service: type: DataGrid sites: local: name: site-a expose: type: Route maxRelayNodes: 128 encryption: transportKeyStore: secretName: xsite-keystore-secret alias: xsite filename: keystore.p12 routerKeyStore: secretName: xsite-keystore-secret alias: xsite filename: keystore.p12 trustStore: secretName: xsite-truststore-secret filename: truststore.p12 locations: - name: site-b clusterName: infinispan namespace: keycloak url: openshift://api.site-b secretName: xsite-token-secret
apiVersion: infinispan.org/v1 kind: Infinispan metadata: name: infinispan
1 namespace: keycloak annotations: infinispan.org/monitoring: 'true'
2 spec: replicas: 3 security: endpointSecretName: connect-secret
3 service: type: DataGrid sites: local: name: site-a
4 expose: type: Route
5 maxRelayNodes: 128 encryption: transportKeyStore: secretName: xsite-keystore-secret
6 alias: xsite
7 filename: keystore.p12
8 routerKeyStore: secretName: xsite-keystore-secret
9 alias: xsite
10 filename: keystore.p12
11 trustStore: secretName: xsite-truststore-secret
12 filename: truststore.p12
13 locations: - name: site-b
14 clusterName: infinispan namespace: keycloak
15 url: openshift://api.site-b
16 secretName: xsite-token-secret
17 Copy to Clipboard Copied! - 1
- クラスター名。
- 2
- Prometheus によるクラスターの監視を許可します。
- 3
- カスタムの認証情報を使用する場合は、ここでシークレット名を設定します。
- 4
- ローカルサイトの名前。この場合は
Site-A
です。 - 5
- OpenShift ルートを使用したクロスサイト接続の公開。
- 6 9
- 前のステップで定義したキーストアが存在するシークレット名。
- 7 10
- キーストア内の証明書のエイリアス。
- 8 11
- 前のステップで定義したキーストアの秘密鍵 (ファイル名)。
- 12
- 前のステップで定義したトラストストアが存在するシークレット名。
- 13
- 前のステップで定義したキーストアのトラストストアキー (ファイル名)。
- 14
- リモートサイトの名前 (この場合は
Site-B
)。 - 15
- リモートサイトの Data Grid クラスターの namespace。
- 16
- リモートサイトの OpenShift API URL。
- 17
- リモートサイトで認証するためのアクセストークンを含むシークレット。
Site-B
のInfinispan
CR も上記と同様です。ポイント 4、11、13 の違いに注意してください。Site-B
のInfinispan
CRapiVersion: infinispan.org/v1 kind: Infinispan metadata: name: infinispan namespace: keycloak annotations: infinispan.org/monitoring: 'true' spec: replicas: 3 security: endpointSecretName: connect-secret service: type: DataGrid sites: local: name: site-b expose: type: Route maxRelayNodes: 128 encryption: transportKeyStore: secretName: xsite-keystore-secret alias: xsite filename: keystore.p12 routerKeyStore: secretName: xsite-keystore-secret alias: xsite filename: keystore.p12 trustStore: secretName: xsite-truststore-secret filename: truststore.p12 locations: - name: site-a clusterName: infinispan namespace: keycloak url: openshift://api.site-a secretName: xsite-token-secret
apiVersion: infinispan.org/v1 kind: Infinispan metadata: name: infinispan
1 namespace: keycloak annotations: infinispan.org/monitoring: 'true'
2 spec: replicas: 3 security: endpointSecretName: connect-secret
3 service: type: DataGrid sites: local: name: site-b
4 expose: type: Route
5 maxRelayNodes: 128 encryption: transportKeyStore: secretName: xsite-keystore-secret
6 alias: xsite
7 filename: keystore.p12
8 routerKeyStore: secretName: xsite-keystore-secret
9 alias: xsite
10 filename: keystore.p12
11 trustStore: secretName: xsite-truststore-secret
12 filename: truststore.p12
13 locations: - name: site-a
14 clusterName: infinispan namespace: keycloak
15 url: openshift://api.site-a
16 secretName: xsite-token-secret
17 Copy to Clipboard Copied! Red Hat build of Keycloak 用のキャッシュを作成します。
Red Hat build of Keycloak は、
sessions
、actionTokens
、authenticationSessions
、offlineSessions
、clientSessions
、offlineClientSessions
、loginFailures
、およびwork
キャッシュの存在を必要とします。Data Grid Cache CR を使用すると、Data Grid クラスターにキャッシュをデプロイできます。クロスサイトのドキュメント に記載されているように、クロスサイトはキャッシュごとに有効にする必要があります。このドキュメントには、この章で使用するオプションの詳細が記載されています。次の例は、
Site-A
のCache
CR を示しています。Site-A
のセッションapiVersion: infinispan.org/v2alpha1 kind: Cache metadata: name: sessions namespace: keycloak spec: clusterName: infinispan name: sessions template: |- distributedCache: mode: "SYNC" owners: "2" statistics: "true" remoteTimeout: 14000 stateTransfer: chunkSize: 16 backups: mergePolicy: ALWAYS_REMOVE site-b: backup: strategy: "SYNC" timeout: 13000 stateTransfer: chunkSize: 16
apiVersion: infinispan.org/v2alpha1 kind: Cache metadata: name: sessions namespace: keycloak spec: clusterName: infinispan name: sessions template: |- distributedCache: mode: "SYNC" owners: "2" statistics: "true" remoteTimeout: 14000 stateTransfer: chunkSize: 16 backups: mergePolicy: ALWAYS_REMOVE
1 site-b:
2 backup: strategy: "SYNC"
3 timeout: 13000 stateTransfer: chunkSize: 16
Copy to Clipboard Copied! Site-B
のCache
CR もポイント 2 を除いて同様です。Site-B
のセッションapiVersion: infinispan.org/v2alpha1 kind: Cache metadata: name: sessions namespace: keycloak spec: clusterName: infinispan name: sessions template: |- distributedCache: mode: "SYNC" owners: "2" statistics: "true" remoteTimeout: 14000 stateTransfer: chunkSize: 16 backups: mergePolicy: ALWAYS_REMOVE site-a: backup: strategy: "SYNC" timeout: 13000 stateTransfer: chunkSize: 16
apiVersion: infinispan.org/v2alpha1 kind: Cache metadata: name: sessions namespace: keycloak spec: clusterName: infinispan name: sessions template: |- distributedCache: mode: "SYNC" owners: "2" statistics: "true" remoteTimeout: 14000 stateTransfer: chunkSize: 16 backups: mergePolicy: ALWAYS_REMOVE
1 site-a:
2 backup: strategy: "SYNC"
3 timeout: 13000 stateTransfer: chunkSize: 16
Copy to Clipboard Copied!