
keycloak/keycloak-operatorKeycloak Kubernetes Operator 是一个专为简化 Keycloak 在 Kubernetes 集群中部署、配置及全生命周期管理而设计的操作器(Operator)。Keycloak 本身是一款开源的身份与访问管理(IAM)工具,提供用户认证、授权、单点登录(SSO)等核心能力。该 Operator 基于 Kubernetes 自定义资源(CRD)和控制器模式,将 Keycloak 的管理流程自动化,减少手动操作成本,适用于企业级 Kubernetes 环境中的 IAM 服务部署。
spec.instances)自动调整 Pod 数量,支持手动或 HPA 触发的弹性伸缩。bash# 克隆官方仓库 git clone [***] cd keycloak-operator # 安装 CRD(自定义资源定义) kubectl apply -f config/crd/bases/keycloak.org_keycloaks.yaml kubectl apply -f config/crd/bases/keycloak.org_keycloakrealms.yaml # 安装 Operator(默认命名空间:keycloak-operator) kubectl create namespace keycloak-operator kubectl apply -k config/default -n keycloak-operator
bash# 添加 Helm 仓库 helm repo add keycloak-operator [***] helm repo update # 安装 Operator(指定命名空间) helm install keycloak-operator keycloak-operator/keycloak-operator \ --namespace keycloak-operator \ --create-namespace
通过定义 Keycloak 类型的 CR 配置实例参数,示例如下(生产环境配置):
yaml# keycloak-instance.yaml apiVersion: keycloak.org/v2alpha1 kind: Keycloak metadata: name: keycloak-prod namespace: keycloak spec: # 实例配置 instances: 3 # 3副本高可用部署 image: quay.io/keycloak/keycloak:23.0.6 # 指定 Keycloak 版本 resources: # 资源限制 requests: cpu: 500m memory: 1Gi limits: cpu: 1000m memory: 2Gi # 数据库配置(生产环境使用外部 PostgreSQL) db: vendor: postgres url: jdbc:postgresql://postgres-service.keycloak.svc.cluster.local:5432/keycloak # 数据库服务地址 usernameSecret: name: keycloak-db-creds # 存储数据库用户名的 Secret 名称 key: username passwordSecret: name: keycloak-db-creds # 存储数据库密码的 Secret 名称 key: password # 网络与访问配置 http: tlsSecret: keycloak-tls # 包含 TLS 证书和密钥的 Secret 名称(需提前创建) ingress: enabled: true hostname: keycloak.example.com # Ingress 访问域名 annotations: # 可选:Ingress 控制器注解(如 NGINX 配置) nginx.ingress.kubernetes.io/ssl-redirect: "true" # 环境变量注入(如管理员账号) env: - name: KEYCLOAK_ADMIN valueFrom: secretKeyRef: name: keycloak-admin-creds key: username - name: KEYCLOAK_ADMIN_PASSWORD valueFrom: secretKeyRef: name: keycloak-admin-creds key: password
创建命名空间:
bashkubectl create namespace keycloak
创建依赖 Secret(数据库 credentials、管理员账号、TLS 证书):
bash# 数据库 credentials Secret kubectl create secret generic keycloak-db-creds -n keycloak \ --from-literal=username=keycloak \ --from-literal=password=StrongDBPassword123! # 管理员账号 Secret kubectl create secret generic keycloak-admin-creds -n keycloak \ --from-literal=username=admin \ --from-literal=password=StrongAdminPassword456! # TLS 证书 Secret(示例:使用自签证书,生产环境需替换为 CA 签发证书) openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodes -subj "/CN=keycloak.example.com" kubectl create secret tls keycloak-tls -n keycloak --cert=tls.crt --key=tls.key
应用 CR 配置:
bashkubectl apply -f keycloak-instance.yaml -n keycloak
| 参数路径 | 类型 | 描述 | 默认值 |
|---|---|---|---|
spec.instances | int | Keycloak 实例副本数,用于高可用部署 | 1 |
spec.image | string | Keycloak 镜像地址及版本(格式:仓库地址/镜像名:版本) | quay.io/keycloak/keycloak:latest |
spec.resources | object | Pod 资源限制与请求(如 requests.cpu、limits.memory) | 无(根据集群自动分配) |
spec.db.vendor | string | 数据库类型,可选值:h2(内置,测试用)、postgres、mysql | h2 |
spec.db.url | string | 外部数据库连接 URL(db.vendor 为 postgres/mysql 时必填) | - |
spec.db.usernameSecret | object | 数据库用户名 Secret 引用(name: Secret 名称, key: 密钥名) | - |
spec.db.passwordSecret | object | 数据库密码 Secret 引用(name: Secret 名称, key: 密钥名) | - |
spec.http.tlsSecret | string | 包含 TLS 证书和密钥的 Secret 名称(启用 HTTPS 时必填) | - |
spec.ingress.enabled | bool | 是否启用 Ingress 资源(用于外部访问) | false |
spec.ingress.hostname | string | Ingress 规则的访问域名(ingress.enabled: true 时必填) | - |
spec.env | []Env | 注入 Keycloak 容器的环境变量(如 KEYCLOAK_ADMIN、PROXY_ADDRESS_FORWARDING=true) | 无 |
bash# 查看 Keycloak CR 状态 kubectl get keycloak -n keycloak # 查看详细事件与配置 kubectl describe keycloak keycloak-prod -n keycloak
修改 CR 的 spec.image 字段为目标版本,Operator 将自动执行滚动升级:
bashkubectl patch keycloak keycloak-prod -n keycloak --type=merge \ -p '{"spec":{"image":"quay.io/keycloak/keycloak:24.0.0"}}'
pg_dump 用于 PostgreSQL)定期备份数据。spec.instances 和 resources,建议生产环境最低配置:2 副本 + 每实例 2 CPU 核心/4GB 内存。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务