You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Bitnami Helm Chart在K8s部署Keycloak 18生产环境配置问题

Keycloak 18.0.1生产模式部署问题(Bitnami Helm Chart + AKS)

部署环境概述

  • 运行环境:Azure AKS Kubernetes集群
  • 部署方式:Bitnami Helm Chart,StatefulSet模式
  • Ingress Controller:Traefik 2.7
  • 数据库:外部PostgreSQL
  • 代理模式:Keycloak "edge"模式,SSL由Traefik+cert-manager+Let's Encrypt处理

问题1:启用生产模式后数据库连接异常

现象

初始部署后日志提示处于开发模式:

2022-07-29 22:43:21,460 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, jdbc-mariadb, jdbc-mssql, jdbc-mysql, jdbc-oracle, jdbc-postgresql, keycloak, narayana-jta, reactive-routes, resteasy, resteasy-jackson, smallrye-context-propagation, smallrye-health, smallrye-metrics, vault, vertx]
2022-07-29 22:43:21,466 WARN [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.

添加生产模式Helm配置后,出现数据库驱动错误,服务尝试回退到内置H2数据库:

cache:
  enabled: true

auth:
  adminUser: ****
  adminPassword: ****
  managementUser: ****
  managementPassword: ****

proxy: edge

postgresql:
  enabled: false

externalDatabase:
  host: ****
  port: 5432
  user: ****
  password: ****
  database: keycloak

resources:
  requests:
    cpu: 0.5
    memory: 512Mi
  limits:
    cpu: 1
    memory: 1Gi

extraEnvVars:
  - name: KEYCLOAK_PRODUCTION
    value: "true"
  - name: KC_HOSTNAME
    value: "<external host name>"
  - name: KC_HOSTNAME_STRICT_HTTPS
    value: "false"

错误日志片段:

at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:352)
at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:216)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:513)
at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:494)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
2022-07-29 18:27:20,885 WARN [io.agroal.pool] (agroal-11) Datasource '': No suitable driver found for jdbc:postgresql://***********:5432/keycloak?currentSchema=public

解决方案

Quarkus生产模式下不会自动加载所有JDBC驱动,需显式指定启用PostgreSQL驱动,修改Helm配置的extraEnvVars块:

extraEnvVars:
  - name: KEYCLOAK_PRODUCTION
    value: "true"
  - name: KC_HOSTNAME
    value: "<external host name>"
  - name: KC_HOSTNAME_STRICT_HTTPS
    value: "false"
  # 新增:显式启用PostgreSQL驱动
  - name: QUARKUS_JDBC_POSTGRESQL_ENABLED
    value: "true"

同时确认externalDatabase配置的主机、端口、账号信息正确,且AKS集群网络能访问外部PostgreSQL实例。


问题2:Infinispan缓存无法持久化,多副本运行异常

现象

日志提示Infinispan未启用全局状态,无法持久化内部缓存:

[org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled

解决方案

修改Helm配置开启Infinispan全局状态与持久化,支持多副本缓存一致性:

  1. 调整cache配置块:
cache:
  enabled: true
  # 启用全局状态
  globalState:
    enabled: true
  # 配置缓存持久化存储
  persistence:
    enabled: true
    storageClass: "your-aks-storage-class" # 替换为AKS中可用的存储类
    size: 10Gi
  1. 添加环境变量指定Keycloak使用集群缓存模式:
extraEnvVars:
  # 保留已有变量...
  - name: KC_CACHE
    value: "ispn"
  - name: KC_CACHE_STACK
    value: "kubernetes"
  1. 配置多副本数(按需调整):
replicaCount: 2

内容的提问来源于stack exchange,提问作者Pascal Paulis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 15:45:15