入门指南
摘要
第 1 章 开始使用
1.1. 启动前
确保您的机器或容器平台可以为 Red Hat build of Keycloak 提供足够的内存和 CPU。如需有关如何开始使用生产 大小的更多信息,请参阅概念来调整 CPU 和内存资源 大小。
确保已安装 OpenJDK 21。
1.2. 下载 Red Hat build of Keycloak
从 红帽网站下载红帽 Keycloak 构建并提取它。
提取此文件后,您应该有一个名为 rhbk-26.0.6
的目录。
1.3. 启动 Red Hat build of Keycloak
-
在终端中,打开
rhbk-26.0.6
目录。 输入以下命令:
在 Linux 中,运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow bin/kc.sh start-dev
bin/kc.sh start-dev
在 Windows 上,运行:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow bin\kc.bat start-dev
bin\kc.bat start-dev
使用 start-dev
选项,您将在开发模式下启动 Red Hat build of Keycloak。在这个模式中,您可以尝试红帽构建的 Keycloak 首次启动并运行。这个模式为开发人员提供方便的默认值,比如开发一个新的 Red Hat build of Keycloak 主题。
1.4. 创建管理员用户
Red Hat build of Keycloak 没有默认的 admin 用户。您需要先创建 admin 用户,然后才能启动 Keycloak。
- 打开 http://localhost:8080/。
- 使用您首选的用户名和密码填写表单。
1.5. 登录管理控制台
- 进入 红帽构建 Keycloak 管理控制台。
- 使用您之前创建的用户名和密码登录。
1.6. 创建一个 realm
红帽构建的 Keycloak 中的域相当于一个租户。每个域都允许管理员创建隔离的应用程序和用户组。最初,红帽构建的 Keycloak 包含一个名为 master
的域。只使用这个域来管理红帽构建的 Keycloak,而不管理任何应用程序。
使用这些步骤来创建第一个域。
- 打开 Red Hat build of Keycloak Admin Console。
- 点 master realm 旁边的 Red Hat build of Keycloak,然后点 Create Realm。
-
在 Realm name 字段中输入
myrealm
。 - 点 Create。

1.7. 创建用户
最初,域没有用户。使用这些步骤创建用户:
- 验证您仍然在 myrealm 域中,这在 Manage 一词上方显示。
- 点左侧菜单中的 Users。
- 单击 Create new user。
使用以下值填写表单:
-
用户名 :
myuser
- 名字 :任何名字
- 姓氏 :任何姓氏
-
用户名 :
- 点 Create。

此用户需要密码才能登录。设置初始密码:
- 单击页面顶部的 Credentials。
- 使用密码填写 Set password 表单。
- 将 Temporary 切换到 Off,以便用户不需要在第一次登录时更新此密码。

1.8. 登录到帐户控制台
现在,您可以登录到帐户控制台以验证此用户是否已正确配置。
- 打开 红帽构建的 Keycloak 帐户控制台。
-
使用您之前创建的
myuser
和密码登录。
作为帐户控制台中的用户,您可以管理帐户,包括修改配置集、添加双因素身份验证,以及包括身份提供程序帐户。

1.9. 保护第一个应用程序
要保护第一个应用程序,请首先将应用程序注册到 Red Hat build of Keycloak 实例:
- 打开 Red Hat build of Keycloak Admin Console。
- 单击左上角的 master 一词,然后单击 myrealm。
- 点 Clients。
- 点 Create client
使用以下值填写表单:
-
客户端类型 :
OpenID Connect
客户端 ID :
myclient
-
客户端类型 :
- 点 Next
- 确认启用了 标准流。
- 点击 Next。
在登录设置 下进行这些更改。
-
将 Valid 重定向 URI 设置为
https://www.keycloak.org/app/*
-
将 Web 源 设置为
https://www.keycloak.org
-
将 Valid 重定向 URI 设置为
- 点击 Save。

要确认客户端是否已创建成功,您可以使用 Keycloak 网站 上的 SPA 测试应用程序。
- 打开 https://www.keycloak.org/app/。
- 单击 Save 以使用默认配置。
- 点 Sign in 来使用之前启动的 Keycloak 服务器的红帽构建来向此应用程序进行身份验证。
1.10. 采取下一步
在生产环境中运行红帽构建的 Keycloak 之前,请考虑以下操作:
- 切换到生产就绪数据库,如 PostgreSQL。
- 使用您自己的证书配置 SSL。
- 将 admin 密码切换到更安全的密码。
如需更多信息,请参阅 服务器配置指南。
第 2 章 扩展
启动红帽构建的 Keycloak 后,请考虑使用这些扩展和调整指南将您的实例调整为所需的负载:
- 尽可能减少资源利用率
- 实现目标响应时间
- 最小化数据库池争用
- 解决内存不足错误或过度垃圾回收开销
- 通过水平扩展提供高可用性
2.1. 垂直扩展
当您监控红帽构建的 Keycloak 工作负载时,请检查 CPU 或内存是否位于或过度使用。查阅 概念以调整 CPU 和内存资源大小,以更好地调整 Java 虚拟机(JVM)可用的资源。
在增加 JVM 可用的内存量前,特别是遇到内存不足错误时,最好使用堆转储决定什么占用量。过多的响应时间可能还表示 HTTP 工作队列太大,对负载的调优比简单地提供更多内存要好。请参见以下部分。
2.1.1. 常见调优选项
红帽构建的 Keycloak 根据您提供的内核数自动调整已使用的线程数量。手动更改线程数可以提高整体吞吐量。如需了解更多详细信息,请参阅配置线程池的概念。但是,更改线程数必须与其他 JVM 资源(如数据库连接)一同使用;否则,您可能会在其它位置移动瓶颈。如需了解更多详细信息,请参阅数据库连接池的概念。
要限制排队工作的内存使用率并为负载她提供,请参阅有关 配置线程池的概念。
如果您在获取数据库连接时出现超时,您应该考虑增加可用连接数。如需了解更多详细信息,请参阅数据库连接池的概念。
2.1.2. 垂直自动扩展
有些平台(如 Kubernetes)提供了垂直自动扩展的机制。如果需要重启服务器实例,则红帽构建的 Keycloak 不建议使用垂直自动扩展,目前是 Kubernetes 上的 Java 的情况。您可以考虑提供更高的 CPU 和/或内存限值,以便 JVM 根据需要在这些限制内调整。
2.2. 横向扩展
单个红帽构建的 Keycloak 实例容易受到可用性问题的影响。如果实例停机,您将遇到完全中断,直到另一个实例启动为止。通过在不同的机器上运行两个或多个群集成员,您可以大大增加红帽构建的 Keycloak 的可用性。
单个 JVM 对它可以处理的并发请求数量有限制。其他服务器实例可提供大致线性的吞吐量扩展,直到相关的资源(如数据库或分布式缓存)限制该扩展。
通常,请考虑允许红帽构建 Keycloak Operator 来处理横向扩展问题。使用 Operator 时,根据需要设置 Keycloak 自定义资源 spec.instances
,以水平扩展。如需了解更多详细信息,请参阅使用 Red Hat build of Keycloak Operator 部署红帽构建的 Keycloak for HA。
如果没有使用 Operator,请查看以下内容:
- 您的实例可能更高的可用性位于独立的机器上。在 Kubernetes 上,使用 Pod anti-affinitity 来强制执行这一点。
使用分布式缓存;对于多站点集群,将外部缓存用于群集成员来共享同一状态。有关相关配置的详情,请参阅配置分布式缓存。嵌入的 Infinispan 缓存具有横向扩展的注意事项,包括:
- 您的实例需要一种方式来互相发现。如需更多信息,请参阅配置分布式缓存中的发现。
- 此缓存不适用于跨越多个可用区(也称扩展集群)的集群。对于嵌入式 Infinispan 缓存,可处理一个可用区中的所有实例。目标是避免在响应时间内扩大通信不必要的往返。在 Kubernetes 上,使用 Pod 关联性来强制实施这种 Pod 分组。
- 这个缓存不会正常处理多个成员加入或同时保留。特别是,同时离开的成员可能会导致数据丢失。在 Kubernetes 中,您可以使用带有默认串行处理的 StatefulSet 来确保 Pod 按顺序启动和停止。
为了避免整个站点不可用时丢失服务可用性,请参阅高可用性指南以了解有关多站点部署的更多信息。请参阅多站点部署。
2.2.1. 横向自动扩展
水平自动扩展允许根据需要添加或删除红帽构建的 Keycloak 实例。请记住,启动时间不是即时的,应该使用优化的镜像来最大程度减少开始时间。
在使用嵌入的 Infinispan 缓存集群时,动态添加或删除群集成员需要 Infinispan 来执行 Infinispan 缓存重新平衡,如果这些缓存中有很多条目,这可能会变得昂贵。要最大程度减少此时间,我们默认将会话相关缓存中的条目数限制为 10000。请注意,只有在配置中没有显式禁用 persistent-user-sessions
功能时,才能进行这个优化。
在 Kubernetes 中,Keycloak 自定义资源是可扩展的,这意味着它可以被内置的自动扩展器 作为目标。