Infinispan 部署:单集群

本指南介绍了在单集群环境中的 Infinispan 部署。

受众

本指南介绍了在单集群环境中部署 Infinispan 所需的步骤。为了简化,本指南使用尽可能少的配置,使 Keycloak 可以使用外部 Infinispan。

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

先决条件

步骤

  1. 安装 Infinispan 运算符

  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 缓存 CR 在 Infinispan 集群中部署缓存。

    以下示例用于 sessions 缓存。对上面列出的所有其他缓存重复此操作。

    sessions 缓存的缓存 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_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