
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
Keycloak 是一个高性能的基于Java的身份和访问管理解决方案。它允许开发人员以最小的工作量为其应用程序添加身份验证层。Bitnami Keycloak 镜像提供了一种简单、可靠的方式来部署和运行Keycloak,适用于开发和生产环境。
https://www.keycloak.org/
商标声明:本软件列表由 Bitnami 打包。产品中提到的各个商标分别归各自公司所有,使用这些商标并不意味着任何关联或认可。
Keycloak 适用于需要强大身份验证和授权功能的各种场景:
consolehelm install my-release oci://registry-1.docker.io/bitnamicharts/keycloak
如需在生产环境中使用Keycloak,建议尝试https://bitnami.com/enterprise%EF%BC%8C%E8%BF%99%E6%98%AFBitnami%E7%9B%AE%E5%BD%95%E7%9A%84%E5%95%86%E4%B8%9A%E7%89%88%E6%9C%AC%E3%80%82
自2025年8月28日起,Bitnami将改进其公共目录,在新的https://news.broadcom.com/app-dev/broadcom-introduces-bitnami-secure-images-for-production-ready-containerized-applications%E4%B8%8B%E6%8F%90%E4%BE%9B%E7%B2%BE%E9%80%89%E7%9A%84%E5%BC%BA%E5%8C%96%E3%80%81%E5%AE%89%E5%85%A8%E8%81%9A%E7%84%A6%E7%9A%84%E9%95%9C%E5%83%8F%E3%80%82%E4%BD%9C%E4%B8%BA%E6%AD%A4%E8%BF%87%E6%B8%A1%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%9A
这些变更旨在通过推广软件供应链完整性和最新部署的最佳实践,提高所有Bitnami用户的安全态势。有关更多详细信息,请访问https://github.com/bitnami/containers/issues/83267%E3%80%82
要安装名为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: docker.xuanyuan.run/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 \ docker.xuanyuan.run/bitnami/keycloak:latest
通过将metrics.enabled设置为true,可以将此Chart与Prometheus集成。这将在metrics服务中公开Keycloak原生Prometheus端点,可以在metrics.service部分下进行配置。它将具有必要的注释,以便被Prometheus自动抓取。
Prometheus 要求
要使集成正常工作,需要安装Prometheus或Prometheus Operator。安装https://github.com/bitnami/charts/tree/main/bitnami/prometheus%E6%88%96https://github.com/bitnami/charts/tree/main/bitnami/kube-prometheus%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%BD%BB%E6%9D%BE%E5%9C%A8%E9%9B%86%E7%BE%A4%E4%B8%AD%E6%8B%A5%E6%9C%89%E4%B8%80%E4%B8%AA%E5%8F%AF%E7%94%A8%E7%9A%84Prometheus%E3%80%82
与 Prometheus Operator 集成
通过设置metrics.serviceMonitor.enabled=true,Chart可以部署ServiceMonitor对象,以便与Prometheus Operator集成。确保在集群中安装了Prometheus Operator CustomResourceDefinitions,否则将失败并显示以下错误:
textno matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
安装https://github.com/bitnami/charts/tree/main/bitnami/kube-prometheus%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%BF%85%E8%A6%81%E7%9A%84CRD%E5%92%8CPrometheus 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;'
导入 Realm
您可以通过将KEYCLOAK_EXTRA_ARGS设置为包含--import-realm参数来导入Realm。
根据官方文档https://www.keycloak.org/server/importExport#_importing_a_realm_from_a_directory%E7%9A%84%E8%AF%B4%E6%98%8E%EF%BC%8C%E8%BF%99%E5%B0%86%E5%AF%BC%E5%85%A5%60/opt/bitnami/keycloak/data/import%60%E4%B8%8B%E6%89%80%E6%9C%89%60*.json%60%E6%96%87%E4%BB%B6%E4%BD%9C%E4%B8%BAKeycloak%E7%9A%84Realm%E3%80%82%E6%82%A8%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E6%8C%82%E8%BD%BD%E5%8D%B7%E6%9D%A5%E6%8F%90%E4%BE%9B%E6%96%87%E4%BB%B6%EF%BC%8C%E4%BE%8B%E5%A6%82%E4%BD%BF%E7%94%A8docker compose:
yamlkeycloak: image: docker.xuanyuan.run/bitnami/keycloak:latest volumes: - /local/path/to/realms/folder:/opt/bitnami/keycloak/data/import
导出 Realm
您可以通过GUI导出Realm,但即使设置了选项,它也不会导出用户,这是Keycloak的一个已知https://github.com/keycloak/keycloak/issues/23970%E3%80%82
通过使用kc.sh脚本,您可以导出包含用户的Realm。确保将导出文件夹挂载到本地文件夹:
yamlkeycloak: image: docker.xuanyuan.run/bitnami/keycloak:latest volumes: - /local/path/to/export/folder:/export
然后在运行的keycloak容器中打开终端并运行:
bashkc.sh export --dir /export/ --users realm_file
这将把所有Realm连同用户一起导出到/export文件夹。
此Chart提供对Ingress资源的支持。如果您的集群上安装了Ingress控制器(例如https://github.com/bitnami/charts/tree/main/bitnami/nginx-ingress-controller%E6%88%96https://github.com/bitnami/charts/tree/main/bitnami/contour%EF%BC%89%EF%BC%8C%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%88%A9%E7%94%A8Ingress%E6%8E%A7%E5%88%B6%E5%99%A8%E6%9D%A5%E6%8F%90%E4%BE%9B%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9C%8D%E5%8A%A1%E3%80%82%E8%A6%81%E5%90%AF%E7%94%A8Ingress%E9%9B%86%E6%88%90%EF%BC%8C%E8%AF%B7%E5%B0%86%60ingress.enabled%60%E8%AE%BE%E7%BD%AE%E4%B8%BA%60true%60%E3%80%82
最常见的场景是将一个主机名映射到部署。在这种情况下,可以使用ingress.hostname属性来设置主机名。ingress.tls参数可用于为此主机添加TLS配置。
但是,也可以有多个主机。为了实现这一点,可以设置ingress.extraHosts参数(如果可用),将主机名指定为数组。还可以使用ingress.extraTLS参数(如果可用)为额外的主机添加TLS配置。
注意: 对于
ingress.extraHosts参数中指定的每个主机,需要设置名称、路径以及Ingress控制器应了解的任何注释。并非所有Ingress控制器都支持所有注释,但https://github.com/kubernetes/ingress-nginx/blob/master/docs/user-guide/nginx-configuration/annotations.md%E5%88%97%E5%87%BA%E4%BA%86%E8%AE%B8%E5%A4%9A%E6%B5%81%E8%A1%8CIngress%E6%8E%A7%E5%88%B6%E5%99%A8%E6%94%AF%E6%8C%81%E7%9A%84%E6%B3%A8%E9%87%8A%E3%80%82
添加TLS参数(如果可用)将导致Chart生成HTTPS URL,应用程序将在端口443上可用。实际的TLS密钥不必由此Chart生成。但是,如果启用了TLS,则在TLS密钥存在之前,Ingress记录将无法工作。
https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/%E3%80%82
配置用于 Ingress 的 TLS 密钥
此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.tls和*.ingress.selfSigned都设置为true。可以通过指定tls.enabled=true在Chart中启用Web界面的TLS支持。有两种可能的选项:
提供您自己的 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"
自动生成 TLS 证书
也可以依靠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 一起使用 SSL 卸载
如果您的Ingress控制器具有TLS/SSL终止功能,您可能需要通过proxyHeaders参数正确配置反向代理头。在https://www.keycloak.org/server/reverseproxy%E4%B8%AD%E6%89%BE%E5%88%B0%E6%9B%B4%E5%A4%9A%E4%BF%A1%E6%81%AF%E3%80%82
Bitnami charts在首次启动时配置凭据。对密钥或凭据的任何进一步更改都需要手动干预。请按照以下说明操作:
shellkubectl create secret generic SECRET_NAME --from-literal=admin-password=PASSWORD --dry-run -o yaml | kubectl apply -f -
要在Kubernetes上备份和恢复Helm chart部署,您需要从源部署备份持久卷,并使用https://velero.io/%EF%BC%88Kubernetes%E5%A4%87%E4%BB%BD/%E6%81%A2%E5%A4%8D%E5%B7%A5%E5%85%B7%EF%BC%89%E5%B0%86%E5%AE%83%E4%BB%AC%E9%99%84%E5%8A%A0%E5%88%B0%E6%96%B0%E9%83%A8%E7%BD%B2%E3%80%82%E5%9C%A8https://techdocs.broadcom.com/us/en/vmware-tanzu/application-catalog/tanzu-application-catalog/services/tac-doc/apps-tutorials-backup-restore-deployments-velero-index.html%E4%B8%AD%E6%89%BE%E5%88%B0%E4%BD%BF%E7%94%A8Velero%E7%9A%84%E8%AF%B4%E6%98%8E%E3%80%82
Bitnami charts允许为Chart部署内的所有容器设置资源请求和限制。这些在resources值内(检查参数表)。设置请求对于生产工作负载至关重要,这些应该根据您的具体用例进行调整。
为了使此过程更容易,Chart包含resourcesPreset值,它根据不同的预设自动设置resources部分。在https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15%E4%B8%AD%E6%A3%80%E6%9F%A5%E8%BF%99%E4%BA%9B%E9%A2%84%E8%AE%BE%E3%80%82%E4%BD%86%E6%98%AF%EF%BC%8C%E5%9C%A8%E7%94%9F%E4%BA%A7%E5%B7%A5%E4%BD%9C%E8%B4%9F%E8%BD%BD%E4%B8%AD%E4%B8%8D%E5%BB%BA%E8%AE%AE%E4%BD%BF%E7%94%A8%60resourcesPreset%60%EF%BC%8C%E5%9B%A0%E4%B8%BA%E5%AE%83%E5%8F%AF%E8%83%BD%E6%97%A0%E6%B3%95%E5%AE%8C%E5%85%A8%E9%80%82%E5%BA%94%E6%82%A8%E7%9A%84%E7%89%B9%E5%AE%9A%E9%9C%80%E6%B1%82%E3%80%82%E5%9C%A8https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/%E4%B8%AD%E6%89%BE%E5%88%B0%E6%9C%89%E5%85%B3%E5%AE%B9%E5%99%A8%E8%B5%84%E6%BA%90%E7%AE%A1%E7%90%86%E7%9A%84%E6%9B%B4%E5%A4%9A%E4%BF%A1%E6%81%AF%E3%80%82
此Chart允许您使用affinity参数设置自定义亲和性。在[kubernetes文档](https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-
以下是 bitnamicharts/keycloak 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务