在 OpenShift 上安装 Keycloak

在 OpenShift 上部署 Keycloak,使用与 Minikube 环境类似的设置。

虽然 Minikube 是此设置的主要目标,但这跟踪了如何在 OpenShift 环境中使用它的进度,请参见 支持的功能

需要具有 cluster-admin 角色才能访问 OpenShift,才能安装自定义资源定义。

OpenShift 不得从互联网访问,因为此设置会打开节点端口和 URL,这些端口和 URL 未通过良好的密码和传输加密进行适当保护。

先决条件

使用 oc cluster-info 验证设置是否正常工作。

支持的功能

目前,以下功能已知无法在 OpenShift 上运行

sqlpad

容器需要 root 用户。

监控

OpenShift 仅提供 Grafana、OpenTelemetry 和 Jaeger 用于监控。Graphite 尚未实现。

Cryostat 依赖于 Cryostat 运算符进行安装,这是 在 AWS 上安装 OpenShift 提供的安装脚本的默认设置。

在 OpenShift 上安装 Keycloak

  1. https://github.com/keycloak/keycloak-benchmark/ 检查 Git 存储库。

  2. 更改到文件夹 provision/openshift

  3. 运行 task 命令以在 OpenShift 上配置所有容器。

要配置部署,请参见 自定义部署 获取详细信息。

从 Operator Hub 安装 Keycloak

默认情况下,运算符是通过 keycloak-k8s-resources 直接安装的。

要从Operator Hub 使用Operator Lifecycle Manager 安装运算符,请设置

KC_OPERATOR_OLM=true

此外,还可以自定义以下参数

KC_OPERATOR_CATALOG_SOURCE_NS

OLM 目录源的命名空间。默认为 openshift-marketplace

KC_OPERATOR_CATALOG_SOURCE

OLM 目录源。默认为 community-operators

KC_OPERATOR_NAME

目录源中 Keycloak 运算符的名称。默认为 keycloak-operator

KC_OPERATOR_CHANNEL

OLM 订阅频道。如果未设置,将使用所选运算符的默认频道。

KC_OPERATOR_VERSION

Keycloak 运算符版本。如果未设置,将使用所选频道的当前版本。

请注意,用于 OLM 订阅的实际集群服务版本是按约定设置的,如下所示

${KC_OPERATOR_NAME}.v${KC_OPERATOR_VERSION}

验证安装

运行以下脚本以检查所有服务是否正在运行并接收可用 URL 的列表

./isup.sh

安装 Grafana 监控

要安装具有预配置仪表盘的 Grafana,请执行以下步骤

  1. 运行 task monitoring 命令

验证安装

Grafana 仪表盘然后在以下位置可用

https://grafana.apps.<domain name>
这是使用 OpenShift 集群的所有用户的共享资源。虽然下一节描述了如何在不同的命名空间中安装多个 Keycloak,但这不适用于 Grafana 实例。

OpenShift 日志记录

OpenShift 日志记录默认情况下启用。所有应用程序和基础设施 pod 日志都存储在 openshift-logging 命名空间中的非复制 ElasticSearch 实例中。

可以在 Kibana UI 中查询日志,可以通过应用程序启动器 application launcher → Openshift UI 中的日志记录访问 Kibana UI

application launcher logs

此外,当查看 pod 的日志时,使用在 Kibana 中显示链接来搜索此特定 pod 的日志

show in kibana

首次登录 Kibana 时,创建一个索引模式 *,并将时间戳字段设置为 @timestamp,以便能够查询日志。有关更多详细信息,请参见 OpenShift 文档

与其他用户共享一个 OpenShift 集群

以下选项对于以可由一个 OpenShift 集群中的多个用户同时使用的方式自定义 Keycloak 部署是必要的。

KC_NAMESPACE_PREFIX

允许自定义命名空间名称。生成的命名空间将为 ${KC_NAMESPACE_PREFIX}keycloak。默认情况下,命名空间前缀设置为 $(whoami)-,但可以在 .env 文件中进行自定义。