3.3. 迁移 Keycloak CR
Keycloak CR 现在支持所有服务器配置选项。所有相关选项都直接作为 CR spec 下的第一个类 shield 字段提供。CR 中的所有选项都遵循与服务器选项相同的命名约定,使裸机和 Operator 部署之间的体验是无缝的。
另外,您可以在 additionalOptions
字段中定义 CR 中缺少的任何选项,如 SPI 供应商配置。另一种选择是使用 podTemplate
(一个技术预览字段)来修改原始 Kubernetes 部署 pod 模板,以防支持的替代方案不存在作为 CR 中的第一个类 prerequisites 字段。
下面显示了一个通过 Operator 部署 Keycloak 的 Keycloak CR 示例:
注意与 CLI 配置的 resemblance:
./kc.sh start --db=postgres --db-url-host=postgres-db --db-username=user --db-password=pass --https-certificate-file=mycertfile --https-certificate-key-file=myprivatekey --hostname=test.keycloak.org --spi-connections-http-client-default-connection-pool-size=20
./kc.sh start --db=postgres --db-url-host=postgres-db --db-username=user --db-password=pass --https-certificate-file=mycertfile --https-certificate-key-file=myprivatekey --hostname=test.keycloak.org --spi-connections-http-client-default-connection-pool-size=20
3.3.1. 迁移数据库配置 复制链接链接已复制到粘贴板!
Red Hat build of Keycloak 可以使用与之前由 Red Hat Single Sign-On 7.6 使用的数据库实例相同的数据库实例。当红帽构建的 Keycloak 第一次连接时,数据库 schema 将自动迁移。
不支持迁移由 Red Hat Single Sign-On 7.6 Operator 管理的嵌入式数据库。
在 Red Hat Single Sign-On 7.6 Operator 中,外部数据库连接使用 Secret 配置,例如:
在 Keycloak 的红帽构建中,数据库直接在 Keycloak CR 中配置,带有引用为 Secret 的凭证,例如:
3.3.1.1. 支持的数据库供应商 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.6 Operator 仅支持 PostgreSQL 数据库,但 Red Hat build of Keycloak Operator 支持服务器支持的所有数据库供应商。
3.3.2. 迁移 TLS 配置 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.6 Operator 默认将服务器配置为使用 OpenShift CA 生成的 TLS Secret。红帽构建的 Keycloak Operator 不会对 TLS 进行任何假设来满足生产最佳实践,并要求用户提供自己的 TLS 证书和密钥对,例如:
tlsSecret 中引用的 secret 的预期格式应该使用标准 Kubernetes TLS Secret (kubernetes.io/tls
)类型。
Red Hat Single Sign-On 7.6 Operator 在 Route 中使用重新加密 TLS 终止策略。红帽构建的 Keycloak Operator 默认使用 passthrough 策略。另外,Red Hat Single Sign-On 7.6 Operator 支持配置 TLS 终止。Red Hat build of Keycloak Operator 不支持当前版本中的 TLS 终止。
如果默认 Operator 管理的 Route 没有满足所需的 TLS 配置,则需要由用户创建自定义路由,并默认路由禁用:
3.3.3. 使用自定义镜像进行扩展 复制链接链接已复制到粘贴板!
为了反映最佳实践并支持不可变容器,Red Hat build of Keycloak Operator 不再支持在 Keycloak CR 中指定扩展。要部署扩展,必须构建优化的自定义镜像。Keycloak CR 现在包括一个指定红帽构建的 Keycloak 镜像的专用字段,例如:
在指定自定义镜像时,Operator 会假定它已被优化,且不会在每个服务器启动时执行昂贵的优化。
3.3.4. 删除升级策略选项 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.6 Operator 在执行服务器升级时支持重新创建和滚动策略。这个方法不实际。在执行升级和数据库迁移前,Red Hat Single Sign-On 7.6 Operator 是否应该缩减部署。当可以安全使用滚动策略时,用户不知道用户。
因此,在 Keycloak Operator 的红帽构建中删除了这个选项,它总是隐式执行 recreate 策略,它会在使用新的服务器容器镜像创建 Pod 前缩减整个部署,以确保只有一个服务器版本访问数据库。
3.3.5. 默认公开的健康端点 复制链接链接已复制到粘贴板!
红帽构建的 Keycloak 将服务器配置为默认公开一个简单的健康端点,供 OpenShift 探测使用。端点不会公开与部署相关的任何安全敏感数据,但可以在无需任何身份验证的情况下访问它。作为替代方案,可以在自定义路由中阻止 < your-server-context-root> /health
端点。
例如,
创建为 TLS 边缘终止配置的 Keycloak。
确保省略
tlsSecret
字段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建阻塞路由以阻止对健康端点的访问:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
基于路径的路由需要为边缘或重新加密配置 TLS 终止。默认情况下,Operator 使用 passthrough。
3.3.6. 使用 Pod 模板迁移高级部署选项 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.6 Operator 为部署配置公开多个低级字段,如卷。Red Hat build of Keycloak Operator 更为建议,且不会公开大多数这些字段。但是,仍然可以配置指定为 podTemplate
的任何所需的部署字段,例如:
spec.unsupported.podTemplate
字段只提供有限的支持,因为它会公开低级别配置,因为所有条件下还没有测试完整的功能。在可能的情况下,使用 CR spec 顶级完全支持的第一类延迟字段。
例如,不是 spec.unsupported.podTemplate.spec.imagePullSecrets
,而是直接使用 spec.imagePullSecrets
。
3.3.7. 不再支持连接到外部实例 复制链接链接已复制到粘贴板!
Red Hat Single Sign-On 7.6 Operator 支持连接到 Red Hat Single Sign-On 7.6 的外部实例。例如,Red Hat build of Keycloak Operator 不再支持通过 Client CR 在现有域中创建客户端。
3.3.8. 迁移启用 Horizontal Pod Autoscaler 的部署 复制链接链接已复制到粘贴板!
要将 Horizontal Pod Autoscaler (HPA)与 Red Hat Single Sign-On 7.6 搭配使用,需要在 Keycloak CR 中设置 disableReplicasSyncing: true
字段并扩展服务器 StatefulSet。因为红帽构建的 Keycloak Operator 中的 Keycloak CR 可以被 HPA 直接扩展,所以不再需要此项。