Keycloak Operator for Kubernetes - 基础教程
Keycloak 团队宣布他们将迁移到一个新的 Operator 框架,该框架将有效管理 Kubernetes 集群上的 Keycloak 安装。
那么,在 Kubernetes 上下文中,Operator 是什么?简单来说……它基本上是一个接管应用程序运维方面的组件。因此,Operator 将应用程序的生命周期和状态管理编码到其中,而不是通过脚本和我们脑中的方式来管理。对我们来说,Keycloak Operator 正是这样做的,在本博客中,我将介绍如何设置一个非常简单的 Keycloak 安装并为开发做好准备。如果您想了解更多关于 Operator 的信息,可以在这里找到一些好的资料。
如果您不熟悉 Keycloak;它是一个开源的身份和访问管理软件。当前版本是 22,已经在实际环境中广泛使用。它通过 OAuth/OIDC、AD、LDAP 和 SAML v2 提供单点登录功能。如果您对 Keycloak 不太熟悉,我还写了一个小型的自定进度的 Keycloak 教程,涵盖了所有基础和一些高级配置。
让我们开始安装一个由 PostgreSQL 数据库支持的基本 Keycloak 实例。
计划如下:
- 在 OpenShift 集群(Red Hat 的 Kubernetes 发行版)上安装 Operator
- 为 Keycloak 后端安装数据库
- 创建用于 Keycloak 后端的 SSL 证书
- 安装第一个 Keycloak 实例
- 导入一个领域
安装 Operator
为了安装 Keycloak Operator,我选择通过 Web 控制台安装,这是一种简单的方法。也可以通过 CLI 安装。
只需搜索 keycloak 并按安装。例如:
按安装后,安装程序会询问您要安装到哪个命名空间。在我的情况下,是 rhbk。
这可能需要几秒钟或几分钟,具体取决于您的集群。
安装数据库
为了让 Keycloak 服务器存储其状态和数据,它应该有一个数据库。为此,我将使用 Crunchy。
|
|
创建用于 Keycloak 后端的 SSL 证书
好的,是时候创建一个自签名证书了,如果是生产环境,假设将通过证书颁发机构获取。但这里我只是测试,所以可以使用自签名证书。在 Linux 机器上,我可以这样创建一个自签名证书,其中 keycloak.rhbk.apps.green.demoshift.com
是我的 Keycloak 实例的地址,O 是 Test demoshift。它可以是您想表示的任何内容,在我的情况下是一个测试组织。
|
|
让我们使用以下命令将此证书加载到我们的 Kubernetes 环境中。确保证书的路径正确,在我的情况下,我在与证书相同的目录中。
|
|
此外,一个好的做法是将数据库密码作为密钥加载,而不是让它散落在不同的 yaml 文件中。
|
|
安装第一个 Keycloak 实例
|
|
现在,如果我们返回 Web 控制台,您应该能够看到:
- Keycloak Operator pod
- PG 数据库 pod
- Keycloak 服务器 pod
OpenShift 有一个很好的功能,您可以在单击应用程序后看到路由。也可见于下图。前往您的实例并登录。
要登录,显然需要管理员密码,在这种情况下,密码是由 Operator 自动生成的。让我们通过运行以下命令获取它。
|
|
假设我们有密码,让我们返回路由并单击管理控制台。用户名是 admin,密码应该是我们从上述命令中检索到的。
登录并 Viola!我们已经登陆到我们新安装的 Keycloak 服务器。
导入一个领域
此时,我们只有主领域。通常,应该保持主领域不变,不做太多更改。这样做的逻辑是为了不锁定自己。我们如何导入一个领域呢?这里 Operator 的力量就显现出来了。我们将创建一个 RealmImport CR,这将向 Keycloak 添加一个新领域。想象一下,如果 Keycloak pod 在某个时刻宕机,Operator 将确保它恢复到相同的状态,而这个状态将存储在哪里?在 CR 和数据库中。
好的,让我们进一步测试这个,如何通过 KCImportRealm CR 添加一个新领域
让我们返回 Operator 视图
单击 KeycloakRealmImport -> 创建实例
我有一个领域 json 文件。显然,Operator 和 K8s 中的大多数东西都期望 yaml,所以我必须进行转换。我使用了以下 yq 进行转换。也有在线工具可用,但考虑到领域的敏感性,我不建议使用随机的在线工具转换为 yaml。
所以这里是结果的 CR
加载 yaml 并按创建
可能需要几秒钟才能出现。一旦我们创建了 CR,Keycloak Operator 就会拾取它并将其添加到运行的 Keycloak 实例中。如果您重新登录管理控制台,它应该看起来像这样。
如果我们进一步探索并查看客户端,有一个后端服务。它是一个基于 Quarkus 的用 Java 编写的 REST 服务的客户端配置。这将在另一篇文章中讨论。使用 Operator 可以做更多的事情。
如果您正在寻找更深入的细节,Keycloak 文档是一个很好的资源。如果您想探索更多并尝试此安装,您还可以使用以下 Keycloak 教程
关于 Keycloak 的更多内容将在以后的帖子中介绍。