身份管理Helm Chart

Keycloak Helm Chart是一个用于Kubernetes的现代身份和访问管理解决方案,集成了CloudNativePG PostgreSQL数据库和MCP服务器,支持高可用性和AI/LLM集成。

  • by robotinfra
  • Go Template
  • 本地部署
  • 更新于
在 GitHub 查看 robotinfra/keycloak-chart

使用说明

Keycloak头盔表

Keycloak Helm chart与CloudNativePG(CNPG)PostgreSQL数据库和Kubernetes的MCP服务器集成。

特性

  • 钥匙锁 -现代身份和访问管理解决方案
  • CloudNativePG数据库 -使用CNPG运算符管理PostgreSQL
  • MCP服务器侧车 -Keycloak MCP服务器,用于AI/LLM集成
  • 高可用性 -支持集群的StatefulSet
  • 入口 -使用证书管理器启用TLS的入口
  • 普罗米修斯指标 -Prometheus操作员服务监视器
  • 安全 -非根容器、安全上下文和机密管理

先决条件

  • 库贝内特斯1.19+
  • 头盔3.8+
  • 已安装CloudNativePG操作员
  • NGINX入口控制器
  • 证书管理器(可选,用于TLS)
  • Prometheus运算符(可选,用于度量)

安装

快速开始

# Install with default values
helm install keycloak oci://ghcr.io/robotinfra/keycloak

# Install with custom values
helm install keycloak oci://ghcr.io/robotinfra/keycloak \
  --set ingress.hosts[0].host=keycloak.example.com \
  --set ingress.tls[0].hosts[0]=keycloak.example.com

配置

关键配置选项:

# Admin credentials
admin:
  username: admin
  password: ""  # Auto-generated if empty

# Database configuration
database:
  enabled: true
  cnpg:
    instances: 3
    storage:
      size: 10Gi
      storageClass: longhorn

# MCP Server sidecar
mcpServer:
  enabled: true
  port: 8081

# Ingress
ingress:
  enabled: true
  className: nginx
  hosts:
    - host: keycloak.example.com
      paths:
        - path: /
          pathType: Prefix

# Prometheus metrics
monitoring:
  enabled: true
  serviceMonitor:
    enabled: true
    interval: 30s

看 values.yaml 对于所有配置选项。

组件

钥匙锁

该图表将Keycloak部署为StatefulSet,其中包含:

  • 通过JGroups实现高可用性集群
  • 健康、准备和启动探测
  • 可配置的资源限制
  • PostgreSQL数据库后端

CloudNativePG数据库

使用CNPG运算符来配置PostgreSQL集群:

  • 多实例实现高可用性
  • 自动故障转移
  • 备份支持(可配置)
  • Keycloak专用数据库和用户

MCP服务器侧车

可选的sidecar容器提供MCP(模型上下文协议)服务器:

  • 通过MCP展示密钥斗篷管理员API
  • 预配置为连接到本地Keycloak
  • 默认情况下可在端口8081上访问
  • 基于https://github.com/sshaaf/keycloak-mcp-server

普罗米修斯监控

启用后,为Prometheus操作员创建ServiceMonitor:

  • 刮擦 /metrics 端点
  • 可配置的刮擦间隔
  • Keycloak公开了各种JVM和应用程序指标

访问Keycloak

安装后:

  1. 获取管理员密码:

    kubectl get secret keycloak-admin -o jsonpath='{.data.password}' | base64 -d
    
  2. 通过入口进入:

    https://keycloak.example.com
    
  3. 访问MCP服务器(如果启用):

    kubectl port-forward svc/keycloak 8081:8081
    # MCP server available at http://localhost:8081
    

数据库管理

该图表创建了一个引用PostgreSQL集群的CNPG数据库资源,该集群名为 postgresql 在 database 命名空间。确保此群集存在:

# Check CNPG cluster
kubectl get cluster -n database postgresql

# Check database status
kubectl get database keycloak-db

监控

访问Keycloak指标:

# Port-forward to access metrics
kubectl port-forward svc/keycloak 8080:8080

# View metrics
curl http://localhost:8080/metrics

如果启用ServiceMonitor,Prometheus会自动抓取指标。

升级

helm upgrade keycloak oci://ghcr.io/bclermont/keycloak-chart \
  --reuse-values \
  --set image.tag=26.0.5

卸载

helm uninstall keycloak

注: CNPG数据库将保持不变。要删除:

kubectl delete database keycloak-db

参数

参数 说明 默认值
replicaCount Keycloak副本数量 2
image.repository Keycloak图像存储库 quay.io/keycloak/keycloak
image.tag Keycloak图像标签 26.0.5
admin.username 管理员用户名 admin
admin.password 管理员密码(如果为空,则自动生成) ""
database.enabled 启用CNPG数据库 true
database.cnpg.instances PostgreSQL实例数 3
database.cnpg.storage.size 数据库存储大小 10Gi
mcpServer.enabled 启用MCP服务器sidecar true
mcpServer.port MCP服务器端口 8081
ingress.enabled 启用入口 true
ingress.className 入口类名 nginx
monitoring.serviceMonitor.enabled 启用Prometheus ServiceMonitor true

看 values.yaml 查看完整的参数列表。

建筑

┌─────────────────────────────────────┐
│         Ingress (TLS)               │
│    keycloak.example.com             │
└─────────────┬───────────────────────┘
              │
┌─────────────▼───────────────────────┐
│     Keycloak Service                │
│       (ClusterIP)                   │
└─────────────┬───────────────────────┘
              │
┌─────────────▼───────────────────────┐
│    Keycloak StatefulSet             │
│  ┌───────────────────────────────┐  │
│  │  Keycloak Container           │  │
│  │  - Port 8080 (HTTP)           │  │
│  │  - Port 9000 (Health)         │  │
│  │  - Metrics enabled            │  │
│  └───────────────────────────────┘  │
│  ┌───────────────────────────────┐  │
│  │  MCP Server Container         │  │
│  │  - Port 8081                  │  │
│  │  - Connects to localhost:8080 │  │
│  └───────────────────────────────┘  │
└─────────────┬───────────────────────┘
              │
┌─────────────▼───────────────────────┐
│   CloudNativePG PostgreSQL          │
│   - 3 instances (HA)                │
│   - Auto-failover                   │
│   - Dedicated database: keycloak    │
└─────────────────────────────────────┘

故障排除

数据库连接问题

检查数据库状态:

kubectl get database keycloak-db
kubectl logs statefulset/keycloak -c keycloak

集群未形成

验证无头服务:

kubectl get svc keycloak-headless
kubectl exec keycloak-0 -- nslookup keycloak-headless

MCP服务器没有响应

检查sidecar日志:

kubectl logs statefulset/keycloak -c mcp-server

许可证

此图表按原样提供。Keycloak根据Apache License 2.0获得许可。

参考文献