Infinispan 部署:单集群

本文档描述了在单集群环境中部署 Infinispan 的方法。

受众

本指南描述了在单集群环境中部署 Infinispan 所需的步骤。为了简单起见,本指南使用了允许 Keycloak 与外部 Infinispan 一起使用的最简配置。

有关其他指南,请参阅 在生产环境中运行

前提条件

步骤

  1. 安装 Infinispan Operator

  2. 配置访问 Infinispan 集群的凭据。

    Keycloak 需要此凭据才能与 Infinispan 集群进行身份验证。以下 identities.yaml 文件设置了具有管理员权限的用户名和密码

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

    identities.yaml 可以设置为 secret,作为以下方式之一

    • 作为 Kubernetes 资源

      凭据 Secret
      apiVersion: v1
      kind: Secret
      type: Opaque
      metadata:
        name: connect-secret
        namespace: keycloak
      data:
        identities.yaml: Y3JlZGVudGlhbHM6CiAgLSB1c2VybmFtZTogZGV2ZWxvcGVyCiAgICBwYXNzd29yZDogc3Ryb25nLXBhc3N3b3JkCiAgICByb2xlczoKICAgICAgLSBhZG1pbgo= (1)
      1 来自先前示例的 identities.yaml 进行了 base64 编码。
    • 使用 CLI

      kubectl create secret generic connect-secret --from-file=identities.yaml

      查看 配置身份验证 文档以获取更多详细信息。

  3. 创建一个 Infinispan 集群。

    创建 Infinispan 集群 文档提供了有关如何创建和配置 Infinispan 集群的所有信息。

    Infinispan CR
    apiVersion: infinispan.org/v1
    kind: Infinispan
    metadata:
      name: infinispan (1)
      namespace: keycloak
      annotations:
        infinispan.org/monitoring: 'true' (2)
    spec:
      replicas: 3
      jmx:
        enabled: true
      security:
        endpointSecretName: connect-secret (3)
      service:
        type: DataGrid
    1 集群名称
    2 允许 Prometheus 监控集群
    3 如果使用自定义凭据,请在此处配置上一步中创建的 secret 名称。
  4. 为 Keycloak 创建缓存。

    Keycloak 需要存在以下缓存:sessionsactionTokensauthenticationSessionsofflineSessionsclientSessionsofflineClientSessionsloginFailureswork

    使用 Infinispan Cache CR 在 Infinispan 集群中部署缓存。

    请参阅下面的 sessions 缓存示例。对上面列出的所有其他缓存重复此操作。

    sessions 缓存的 Cache CR
    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: "5000"
          encoding:
            media-type: "application/x-protostream"
          locking:
            acquireTimeout: "4000"
          transaction:
            mode: "NON_DURABLE_XA" (1)
            locking: "PESSIMISTIC" (2)
          stateTransfer:
            chunkSize: "16"
          indexing:
            enabled: true
            indexed-entities:
            - keycloak.RemoteUserSessionEntity
          

    Infinispan 文档 包含有关缓存配置及其选项的更多详细信息。

验证部署

确认 Infinispan 集群已形成。

等待直到 Infinispan 集群形成
kubectl wait --for condition=WellFormed --timeout=300s infinispans.infinispan.org -n keycloak infinispan