快速开始

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

前提条件

在部署 Keycloak 实例之前,请确保已安装 Alauda Build of Keycloak operator。安装说明请参见 Install

部署 Keycloak 实例

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

第 1 步:创建数据库 Secret

创建一个用于存储 PostgreSQL 凭据的 Secret:

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/v2alpha1
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 可能会在 reconciliation 期间覆盖或忽略此处提供的设置。在本快速开始中,它用于注入一个 security context,以强制以非 root 用户运行并移除 Linux capabilities。对于生产部署,如有可用,请优先使用 operator 的专用安全字段。

应用 manifest:

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

第 4 步:验证实例

检查实例状态:

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

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

访问管理员控制台

部署 Keycloak 时,Operator 会生成一个随机的初始管理员用户名和密码,并将其作为 Secret 存储在与 Keycloak CR 相同的 namespace 中。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 and TLS 以用于生产访问。
  • 使用更多选项创建 Keycloak 实例:有关高可用配置,请参见 Create Instance