Keycloak 是一个高性能的基于Java的身份和访问管理解决方案。它允许开发人员以最小的工作量为其应用程序添加身份验证层。Bitnami Keycloak 镜像提供了一种简单、可靠的方式来部署和运行Keycloak,适用于开发和生产环境。
Keycloak ***网站
商标声明:本软件列表由 Bitnami 打包。产品中提到的各个商标分别归各自公司所有,使用这些商标并不意味着任何关联或认可。
Keycloak 适用于需要强大身份验证和授权功能的各种场景:
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/keycloak
如需在生产环境中使用Keycloak,建议尝试VMware Tanzu Application Catalog,这是Bitnami目录的商业版本。
自2025年8月28日起,Bitnami将改进其公共目录,在新的Bitnami Secure Images计划下提供精选的强化、安全聚焦的镜像。作为此过渡的一部分:
这些变更旨在通过推广软件供应链完整性和最新部署的最佳实践,提高所有Bitnami用户的安全态势。有关更多详细信息,请访问Bitnami Secure Images公告。
要安装名为my-release的Chart:
consolehelm install my-release oci://REGISTRY_NAME/REPOSITORY_NAME/keycloak
注意: 您需要将占位符
REGISTRY_NAME和REPOSITORY_NAME替换为Helm Chart仓库的引用。例如,对于Bitnami,您需要使用REGISTRY_NAME=registry-1.docker.io和REPOSITORY_NAME=bitnamicharts。
这些命令使用默认配置在Kubernetes集群上部署Keycloak应用程序。
提示: 使用
helm list命令列出所有发布版本
yamlversion: '3' services: keycloak: image: bitnami/keycloak:latest ports: - '8080:8080' environment: - KEYCLOAK_ADMIN_USER=admin - KEYCLOAK_ADMIN_PASSWORD=password - KEYCLOAK_EXTRA_ARGS=--import-realm volumes: - ./realms:/opt/bitnami/keycloak/data/import
consoledocker run -d \ --name keycloak \ -p 8080:8080 \ -e KEYCLOAK_ADMIN_USER=admin \ -e KEYCLOAK_ADMIN_PASSWORD=password \ bitnami/keycloak:latest
通过将metrics.enabled设置为true,可以将此Chart与Prometheus集成。这将在metrics服务中公开Keycloak原生Prometheus端点,可以在metrics.service部分下进行配置。它将具有必要的注释,以便被Prometheus自动抓取。
要使集成正常工作,需要安装Prometheus或Prometheus Operator。安装Bitnami Prometheus helm chart或Bitnami Kube Prometheus helm chart,可以轻松在集群中拥有一个可用的Prometheus。
通过设置metrics.serviceMonitor.enabled=true,Chart可以部署ServiceMonitor对象,以便与Prometheus Operator集成。确保在集群中安装了Prometheus Operator CustomResourceDefinitions,否则将失败并显示以下错误:
textno matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
安装Bitnami Kube Prometheus helm chart以获取必要的CRD和Prometheus Operator。
有时,您可能希望让Keycloak连接到外部PostgreSQL数据库,而不是集群内的数据库 - 例如,当使用托管数据库服务时,或者为所有应用程序运行单个数据库服务器时。要实现此目的,请将postgresql.enabled参数设置为false,并使用externalDatabase.*参数指定外部数据库的凭据。以下是一个示例:
textpostgresql.enabled=false externalDatabase.host=myexternalhost externalDatabase.user=myuser externalDatabase.password=mypassword externalDatabase.database=mydatabase externalDatabase.port=5432 externalDatabase.schema=public
注意: 仅支持PostgreSQL数据库服务器作为外部数据库
虽然不推荐,但也可以使用外部MSSQL数据库运行Keycloak,配置如下:
yamlexternalDatabase: host: "mssql.example.com" port: 1433 user: keycloak database: keycloak existingSecret: passwords extraEnvVars: - name: KC_DB # 覆盖配置文件中的值 value: 'mssql' - name: KC_DB_URL value: 'jdbc:sqlserver://mssql.example.com:1433;databaseName=keycloak;'
您可以通过将KEYCLOAK_EXTRA_ARGS设置为包含--import-realm参数来导入Realm。
根据***文档此处的说明,这将导入/opt/bitnami/keycloak/data/import下所有*.json文件作为Keycloak的Realm。您可以通过挂载卷来提供文件,例如使用docker compose:
yamlkeycloak: image: bitnami/keycloak:latest volumes: - /local/path/to/realms/folder:/opt/bitnami/keycloak/data/import
您可以通过GUI导出Realm,但即使设置了选项,它也不会导出用户,这是Keycloak的一个已知bug。
通过使用kc.sh脚本,您可以导出包含用户的Realm。确保将导出文件夹挂载到本地文件夹:
yamlkeycloak: image: bitnami/keycloak:latest volumes: - /local/path/to/export/folder:/export
然后在运行的keycloak容器中打开终端并运行:
bashkc.sh export --dir /export/ --users realm_file
这将把所有Realm连同用户一起导出到/export文件夹。
此Chart提供对Ingress资源的支持。如果您的集群上安装了Ingress控制器(例如nginx-ingress-controller或contour),您可以利用Ingress控制器来提供应用程序服务。要启用Ingress集成,请将ingress.enabled设置为true。
最常见的场景是将一个主机名映射到部署。在这种情况下,可以使用ingress.hostname属性来设置主机名。ingress.tls参数可用于为此主机添加TLS配置。
但是,也可以有多个主机。为了实现这一点,可以设置ingress.extraHosts参数(如果可用),将主机名指定为数组。还可以使用ingress.extraTLS参数(如果可用)为额外的主机添加TLS配置。
注意: 对于
ingress.extraHosts参数中指定的每个主机,需要设置名称、路径以及Ingress控制器应了解的任何注释。并非所有Ingress控制器都支持所有注释,但此注释参考文档列出了许多流行Ingress控制器支持的注释。
添加TLS参数(如果可用)将导致Chart生成HTTPS URL,应用程序将在端口443上可用。实际的TLS密钥不必由此Chart生成。但是,如果启用了TLS,则在TLS密钥存在之前,Ingress记录将无法工作。
了解更多关于Ingress控制器。
此Chart有助于创建用于Ingress控制器的TLS密钥(尽管这不是必需的)。有几种常见的用例:
在前两种情况下,需要证书和密钥。文件应为.pem格式。
证书文件示例:
注意: 如果存在证书链,可能会有多个证书。
text-----BEGIN CERTIFICATE----- MIID6TCCAtGgAwIBAgIJAIaCwivkeB5EMA0GCSqGSIb3DQEBCwUAMFYxCzAJBgNV ... jScrvkiBO65F46KioCL9h5tDvomdU1aqpI/CBzhvZn1c0ZTf87tGQR8NK7v7 -----END CERTIFICATE-----
证书密钥示例:
text-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEAvLYcyu8f3skuRyUgeeNpeDvYBCDcgq+LsWap6zbX5f8oLqp4 ... wrj2wDbCDCFmfqnSJ+dKI3vFLlEz44sAV8jX/kd4Y6ZTQhlLbYc= -----END RSA PRIVATE KEY-----
*.ingress.secrets条目的certificate和key值中。INGRESS_HOSTNAME-tls的TLS密钥(其中INGRESS_HOSTNAME是一个占位符,需要替换为您使用*.ingress.hostname参数设置的主机名)。*.ingress.annotations中。*.ingress.tls和*.ingress.selfSigned都设置为true。可以通过指定tls.enabled=true在Chart中启用Web界面的TLS支持。有两种可能的选项:
要提供您自己的密钥,请设置tls.existingSecret值。可以使用PEM或JKS格式。
使用PEM证书:
tls.usePemCerts=true: 使用PEM证书而不是JKS文件。tls.certFilename: 证书文件名。默认为tls.crt。tls.certKeyFilename: 证书密钥文件名。默认为tls.key使用JKS密钥库:
tls.usePemCerts=false: 使用JKS文件。tls.keystoreFilename: 证书文件名。默认为keycloak.keystore.jks。tls.truststoreFilename: 信任库文件名。默认为keycloak.truststore.jks。在以下示例中,我们将使用PEM证书。首先,使用证书文件创建密钥:
consolekubectl create secret generic certificates-tls-secret --from-file=./cert.pem --from-file=./cert.key
然后,使用以下参数:
consoletls.enabled=true tls.autoGenerated.enabled=false tls.usePemCerts=true tls.existingSecret="certificates-tls-secret" tls.certFilename="cert.pem" tls.certKeyFilename="cert.key"
也可以依靠Chart的证书自动生成功能。Chart支持两种不同的自动生成所需证书的方式:
tls.autoGenerated.enabled设置为true并将tls.autoGenerated.engine设置为helm来启用此功能。tls.autoGenerated.enabled设置为true并将tls.autoGenerated.engine设置为cert-manager来启用此功能。请注意,支持通过设置tls.autoGenerated.certManager.existingIssuer和tls.autoGenerated.certManager.existingIssuerKind参数来使用现有的Issuer/ClusterIssuer来颁发TLS证书。如果您的Ingress控制器具有TLS/SSL终止功能,您可能需要通过proxyHeaders参数正确配置反向代理头。在上游文档中找到更多信息。
Bitnami charts在首次启动时配置凭据。对密钥或凭据的任何进一步更改都需要手动干预。请按照以下说明操作:
shellkubectl create secret generic SECRET_NAME --from-literal=admin-password=PASSWORD --dry-run -o yaml | kubectl apply -f -
要在Kubernetes上备份和恢复Helm chart部署,您需要从源部署备份持久卷,并使用Velero(Kubernetes备份/恢复工具)将它们附加到新部署。在本指南中找到使用Velero的说明。
Bitnami charts允许为Chart部署内的所有容器设置资源请求和限制。这些在resources值内(检查参数表)。设置请求对于生产工作负载至关重要,这些应该根据您的具体用例进行调整。
为了使此过程更容易,Chart包含resourcesPreset值,它根据不同的预设自动设置resources部分。在bitnami/common chart中检查这些预设。但是,在生产工作负载中不建议使用resourcesPreset,因为它可能无法完全适应您的特定需求。在***Kubernetes文档中找到有关容器资源管理的更多信息。
此Chart允许您使用affinity参数设置自定义亲和性。在[kubernetes文档]([***]
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429