快速开始

本文档帮助新用户快速了解并使用 Keycloak 功能。

前提条件

在部署 Keycloak 实例之前,请确保已安装 Alauda 原生应用服务 Identity Management E1 Operator。有关安装说明,请参阅 安装。

部署 Keycloak 实例

安装 Operator 后,通过创建所需的 Kubernetes 资源来部署 Keycloak 实例。

步骤 1:创建数据库 Secret

创建一个 Secret 以存储 PostgreSQL 凭据:

kubectl create secret generic keycloak-db-secret \
  --from-literal=username=kc-user \
  --from-literal=password=<your-password> \
  -n <namespace>

步骤 2:部署 PostgreSQL(仅限开发环境)

仅限开发环境

以下 PostgreSQL 配置使用 emptyDir 存储,该存储不会在 Pod 重启后持久化数据。对于生产环境,请将 emptyDir 替换为 PersistentVolumeClaim。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgresql-db
spec:
  serviceName: postgres-db
  selector:
    matchLabels:
      app: postgresql-db
  replicas: 1
  template:
    metadata:
      labels:
        app: postgresql-db
    spec:
      containers:
        - name: postgresql-db
          image: quay.io/sclorg/postgresql-15-c9s:latest
          volumeMounts:
            - mountPath: /var/lib/pgsql/data
              name: data-volume
          env:
            - name: POSTGRESQL_USER
              valueFrom:
                secretKeyRef:
                  key: username
                  name: keycloak-db-secret
            - name: POSTGRESQL_PASSWORD
              valueFrom:
                secretKeyRef:
                  key: password
                  name: keycloak-db-secret
            - name: POSTGRESQL_DATABASE
              value: keycloak
      volumes:
        - name: data-volume
          emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:
  name: postgres-db
spec:
  selector:
    app: postgresql-db
  ports:
    - port: 5432
      targetPort: 5432

步骤 3:创建 Keycloak 实例

apiVersion: k8s.keycloak.org/v2beta1
kind: Keycloak
metadata:
  name: example-kc
spec:
  instances: 1
  db:
    vendor: postgres
    host: postgres-db
    database: keycloak
    usernameSecret:
      name: keycloak-db-secret
      key: username
    passwordSecret:
      name: keycloak-db-secret
      key: password
  http:
    httpEnabled: true
  ingress:
    enabled: false
  additionalOptions:
    - name: metrics-enabled
      value: "true"
    - name: hostname-strict
      value: "false"
  unsupported:
    podTemplate:
      spec:
        containers:
          - securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              capabilities:
                drop:
                  - ALL
              seccompProfile:
                type: RuntimeDefault
关于 unsupported.podTemplate

spec.unsupported.podTemplate 字段会将任意 Kubernetes Pod 模板属性直接合并到受管 Pod 中。Keycloak Operator 不正式支持此字段——Operator 可能会在协调期间覆盖或忽略此处提供的设置。在本快速开始中,该字段用于注入安全上下文,以强制使用非 root 用户执行并删除 Linux capabilities。对于生产部署,建议在可用时优先使用 operator 专用的安全字段。

应用清单:

kubectl apply -f keycloak.yaml -n <namespace>

步骤 4:验证实例

检查实例状态:

kubectl get keycloak example-kc -n <namespace> -o wide

当 READY 列显示为 true 时,表示实例已成功运行。

访问管理控制台

部署 Keycloak 时,Operator 会生成随机的初始管理员用户名和密码,并将其作为 Secret 存储在与 Keycloak CR 相同的命名空间中。Secret 名称遵循 <keycloak-cr-name>-initial-admin 模式。

获取初始凭据:

kubectl get secret example-kc-initial-admin -n <namespace> \
  -o jsonpath='{.data.username}' | base64 --decode
kubectl get secret example-kc-initial-admin -n <namespace> \
  -o jsonpath='{.data.password}' | base64 --decode

对于开发环境访问,请使用端口转发:

kubectl port-forward service/example-kc-service 8080:8080 -n <namespace>

然后访问管理控制台:http://localhost:8080。

后续步骤

Keycloak 实例运行后,您可以:

  • 对外暴露:为生产环境访问配置 Ingress 和 TLS。
  • 使用更多选项创建 Keycloak 实例:参阅创建实例,了解高可用配置。

Keycloak™ 是 The Linux Foundation 的商标。Alauda 是独立供应商。本产品与 The Linux Foundation 无关联,也未获得其认可或赞助。所有商标均归其各自所有者所有,此处使用商标仅用于标识目的。