搜索

6.3. 流程

download PDF
  1. 安装 Data Grid Operator
  2. 配置凭据以访问 Data Grid 集群。

    红帽构建的 Keycloak 需要此凭证才能与 Data Grid 集群进行身份验证。以下 identity.yaml 文件使用 admin 权限设置用户名和密码

    credentials:
      - username: developer
        password: strong-password
        roles:
          - admin

    identity.yaml 可以在 secret 中设置为以下之一:

  3. 创建一个服务帐户。

    在集群间建立连接需要服务帐户。Data Grid Operator 使用它来从远程站点检查网络配置,并相应地配置本地 Data Grid 集群。

    如需了解更多详细信息,请参阅管理跨站点连接 文档。

    1. 按照如下所示,创建 service-account-token secret 类型:两个 OpenShift 集群中都可以使用相同的 YAML 文件。

      xsite-sa-secret-token.yaml

      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

      1
      机密名称。
      2
      服务帐户名称。
    2. 创建服务帐户并在两个 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

      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

    3. 下一步是将令牌从 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)"

      Site-A 令牌部署到 Site-B

      oc create secret generic -n keycloak xsite-token-secret \
        --from-literal=token="$(cat Site-A-token.txt)"

  4. 创建 TLS secret

    在本章中,Data Grid 使用 OpenShift 路由进行跨站点通信。它使用 TLS 的 SNI 扩展将流量定向到正确的 Pod。为实现这一目标,JGroups 使用 TLS 套接字,这需要一个含有正确证书的密钥存储和 Truststore。

    如需更多信息,请参阅 安全跨站点连接 文档或 红帽开发人员指南

    在 OpenShift Secret 中上传 Keystore 和 Truststore。secret 包含文件内容、访问它的密码,以及存储的类型。创建证书和存储的说明超出了本指南的范围。

    要将密钥存储上传为 Secret,请使用以下命令:

    部署密钥存储

    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

    1
    文件名和密钥存储的路径。
    2
    用于访问密钥存储的密码。
    3
    Keystore 类型。

    要将 Truststore 作为一个 Secret 上传,请使用以下命令:

    部署 Truststore

    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

    1
    文件名和 Truststore 的路径。
    2
    访问 Truststore 的密码。
    3
    Truststore 类型。
    注意

    密钥存储和 Truststore 必须在两个 OpenShift 集群中上传。

  5. 为启用了 Cross-Site 的 Data Grid 创建集群

    设置跨站点 文档提供了有关如何在启用跨站点(包括前面步骤)创建和配置 Data Grid 集群的所有信息。

    本章中提供了一个基本示例,它使用从前面的步骤中创建的凭证、令牌和 TLS Keystore/Truststore。

    Site-AInfinispan CR

    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

    1
    集群名称
    2
    允许 Prometheus 监控集群。
    3
    如果使用自定义凭证,请在此处配置 secret 名称。
    4
    本地站点的名称,本例中为 Site-A
    5
    使用 OpenShift 路由公开跨站点连接。
    6 9
    上一步中定义的 Keystore 的 secret 名称。
    7 10
    Keystore 中证书的别名。
    8 11
    上一步中定义的 Keystore 的 secret 密钥(filename)。
    12
    上一步中定义的 Truststore 的 secret 名称。
    13
    上一步中定义的 Keystore 的 Truststore 密钥(filename)。
    14
    远程站点的名称,本例中为 Site-B
    15
    远程站点的 Data Grid 集群的命名空间。
    16
    远程站点的 OpenShift API URL。
    17
    有权在远程站点进行身份验证的 secret。

    对于 Site-BInfinispan CR 类似于以上内容。请注意点 4、11 和 13。

    Site-BInfinispan CR

    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

  6. 为红帽构建的 Keycloak 创建缓存。

    红帽构建的 Keycloak 需要存在以下缓存: 会话,actionTokens,authenticationSessions,offlineSessions,clientSessions,offlineClientSessions,loginFailures, 和 work

    Data Grid Cache CR 允许在 Data Grid 集群中部署缓存。需要为每个缓存启用跨站点,如 跨站点文档记录。文档包含有关本章使用的选项的更多详细信息。以下示例显示了 Site-ACache 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 1
            site-b: 2
              backup:
                strategy: "SYNC" 3
                timeout: 13000
                stateTransfer:
                  chunkSize: 16

    1 1
    当存在写写冲突时,调用跨站点合并策略。把它设置为缓存 会话authenticationSessionsofflineSessionsclientSessionsofflineClientSessions,且不会为所有其他缓存设置它。
    2 2
    远程站点名称。
    3 3
    跨站点通信,本例中为 SYNC

    对于 Site-B缓存 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 1
            site-a: 2
              backup:
                strategy: "SYNC" 3
                timeout: 13000
                stateTransfer:
                  chunkSize: 16

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.