Kubernetes Keycloak Operator - 基础教程
Keycloak团队宣布他们将转向新的Operator框架,这将有效管理Kubernetes集群上的Keycloak安装。
什么是Kubernetes Operator?
在Kubernetes上下文中,Operator是一个接管应用程序运维方面的组件。它不像脚本那样管理所有的生命周期和状态,而是以某种方式将运维知识编码到Operator中。对我们来说,Keycloak Operator正是这样做的,在本博客中,我将介绍如何设置一个非常简单的Keycloak安装并为开发做好准备。
如果你不熟悉Keycloak,它是一个开源的身份和访问管理软件。当前版本是22,已经在很多地方使用。它通过OAuth/OIDC、AD、LDAP和SAML v2提供单点登录功能。
安装基本Keycloak实例(使用PostgreSQL数据库)
计划如下:
- 在OpenShift集群(Red Hat的Kubernetes发行版)上安装Operator
- 为Keycloak后端安装数据库
- 创建用于Keycloak后端的SSL证书
- 安装第一个Keycloak实例
- 导入Realm
安装Operator
我选择通过Web控制台安装Keycloak Operator,这是一种简单的方法。也可以通过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,密码应该是我们从上面命令中检索到的。
登录并瞧!我们已经登陆到我们新安装的Keycloak服务器。
导入Realm
此时我们只有master realm。通常,应该保持master realm完整而不做太多更改。这背后的逻辑是不要锁住自己。我们如何导入一个realm呢?这里Operator的力量就显现出来了。我们将创建一个RealmImport CR,这将向Keycloak添加一个新的realm。想象一下,如果Keycloak pod在某个时刻宕机,Operator将确保它被恢复到相同的状态,这个状态将在哪里?在CRs和数据库中。
让我们进一步测试这一点,如何通过KCImportRealm CR添加一个新的realm
让我们回到Operator视图 点击KeycloakRealmImport -> 创建实例
我有一个realm json文件。显然,Operator和K8s中的大多数东西都期望yaml,所以我必须进行转换。我使用了以下yq进行转换。也有在线工具可用,但考虑到realm的敏感性,我不建议使用随机的在线工具转换为yaml。
这是生成的CR
加载yaml并按创建
可能需要几秒钟才能出现。一旦我们创建了CR,Keycloak Operator就会拾取它并将其添加到运行的Keycloak实例中。如果你重新登录到管理控制台,它应该看起来像这样。
如果我们进一步探索并查看客户端,有一个backend-service。这是一个用Java编写的基于Quarkus的REST服务的客户端配置。这将在另一篇文章中讨论。使用Operator可以做更多的事情。
如果你正在寻找更深入的细节,Keycloak文档是一个很好的资源。如果你正在探索更多并尝试此安装,你也可以使用以下Keycloak教程。
关于Keycloak的更多内容将在后面的文章中介绍。