3.15. 使用 Operator 部署红帽构建的 Keycloak for HA


使用红帽构建的 Keycloak Operator 作为构建块,部署红帽构建的 Keycloak 以实现高可用性。

本章论述了 OpenShift 的 Keycloak 配置的高级红帽构建,这些配置已测试,并将从单个 Pod 失败中恢复。

这些说明 适用于多集群部署 一章中介绍的设置。将其与构建块 多集群部署一章中介绍的其他构建块 一起使用。

3.15.1. 先决条件

  • 正在运行的 OpenShift 集群.
  • 了解使用 红帽构建的 Keycloak Operator 进行红帽构建的 Keycloak 部署的基本红帽构建。
  • 使用在 多个可用区中的 Deploying AWS Aurora 部署的 AWS Aurora 数据库。
  • Data Grid 服务器通过 Data Grid Operator 使用 Deploying Data Grid for HA 部署。

3.15.2. 流程

  1. 确定使用 概念调整 CPU 和内存资源章节的部署大小。
  2. 按照 Red Hat build of Keycloak Operator 安装中的内容 安装 Red Hat build of Keycloak Operator。
  3. 请注意,以下配置文件包含与 多个可用区部署 AWS Aurora 中连接到 Aurora数据库相关的选项
  4. 请注意以下与 Data Grid Operator 部署 Data Grid 相关的选项。
  5. 构建自定义红帽构建的 Keycloak 镜像,准备与 Amazon Aurora PostgreSQL 数据库一起使用。
  6. 使用在第一步中计算的资源请求和限值,使用以下值部署红帽 Keycloak CR:

    apiVersion: k8s.keycloak.org/v2alpha1
    kind: Keycloak
    metadata:
      labels:
        app: keycloak
      name: keycloak
      namespace: keycloak
    spec:
      hostname:
        hostname: <KEYCLOAK_URL_HERE>
      resources:
        requests:
          cpu: "2"
          memory: "1250M"
        limits:
          cpu: "6"
          memory: "2250M"
      db:
        vendor: postgres
        url: jdbc:aws-wrapper:postgresql://<AWS_AURORA_URL_HERE>:5432/keycloak
        poolMinSize: 30 
    1
    
        poolInitialSize: 30
        poolMaxSize: 30
        usernameSecret:
          name: keycloak-db-secret
          key: username
        passwordSecret:
          name: keycloak-db-secret
          key: password
      image: <KEYCLOAK_IMAGE_HERE> 
    2
    
      startOptimized: false 
    3
    
      features:
        enabled:
          - multi-site 
    4
    
      additionalOptions:
        - name: log-console-output
          value: json
        - name: metrics-enabled 
    5
    
          value: 'true'
        - name: event-metrics-user-enabled
          value: 'true'
        - name: cache-remote-host
          value: "infinispan.keycloak.svc"
        - name: cache-remote-port
          value: "11222"
        - name: cache-remote-username
          secret:
            name: remote-store-secret
            key: username
        - name: cache-remote-password
          secret:
            name: remote-store-secret
            key: password
        - name: db-driver
          value: software.amazon.jdbc.Driver
      http:
        tlsSecret: keycloak-tls-secret
      instances: 3
    Copy to Clipboard Toggle word wrap
    1
    数据库连接池 initial、max 和 min 大小应当相同,以允许数据库的声明缓存。调整这个数字以满足您的系统需求。因为大多数请求不会因为红帽构建的 Keycloak 嵌入式缓存而影响数据库,所以这个更改每秒可以提供几百个请求。详情请参阅数据库连接池的概念 章节。
    2 3
    指定自定义红帽构建的 Keycloak 镜像的 URL。如果您的镜像经过优化,请将 startOptimized 标志设置为 true
    4
    为多集群支持启用额外的功能,如 loadbalancer probe /lb-check
    5
    为了能够在负载下分析系统,启用指标端点。

3.15.3. 验证部署

确认红帽构建的 Keycloak 部署已就绪。

oc wait --for=condition=Ready keycloaks.k8s.keycloak.org/keycloak
oc wait --for=condition=RollingUpdate=False keycloaks.k8s.keycloak.org/keycloak
Copy to Clipboard Toggle word wrap

3.15.4. 可选: Load shedding

要启用负载均衡,请限制排队的请求数。

使用最大排队的 http 请求加载她

spec:
  additionalOptions:
    - name: http-max-queued-requests
      value: "1000"
Copy to Clipboard Toggle word wrap

所有超过的请求都使用 HTTP 503 提供。

您可以考虑进一步限制 http-pool-max-threads 的值,因为在达到请求的 CPU 限制后,OpenShift 会导致 OpenShift 节流。

有关详细信息 ,请参阅有关配置线程池 的概念 一章。

3.15.5. 可选:禁用粘性会话

当在 OpenShift 上运行以及由 Red Hat build of Keycloak Operator 提供的默认 passthrough Ingress 设置时,HAProxy 所做的负载均衡会根据源的 IP 地址使用粘性会话来实现。在运行负载测试时,或者在 HAProxy 前面运行反向代理时,您可能需要禁用此设置以避免在单个红帽构建的 Keycloak Pod 上接收所有请求。

在红帽构建的 Keycloak 自定义资源的 spec 下添加以下补充配置,以禁用粘性会话。

spec:
  ingress:
    enabled: true
    annotations:
      # When running load tests, disable sticky sessions on the OpenShift HAProxy router
      # to avoid receiving all requests on a single Red Hat build of Keycloak Pod.
      haproxy.router.openshift.io/balance: roundrobin
      haproxy.router.openshift.io/disable_cookies: 'true'
Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat