创建实例

您可以创建一个 Keycloak 实例,为运行在 Kubernetes 集群中的应用提供集中式身份和访问管理。

创建 Keycloak 实例

前提条件

  • 集群中已安装 Alauda Build 的 Keycloak Operator。
  • 集群内可访问 PostgreSQL 数据库。
  • 目标命名空间中已存在一个包含数据库凭证的 Kubernetes Secret。

操作步骤

CLI
Web 控制台

通过 CLI 创建一个 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

应用该 manifest:

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

创建实例后,验证其状态:

kubectl get keycloak -n <namespace> -o custom-columns="NAME:.metadata.name,INSTANCES:.spec.instances,READY:.status.conditions[?(@.type=='Ready')].status"

创建高可用实例

对于生产环境,请将 spec.instances 设置为 2 或更大,以启用共享会话状态的多个副本。

数据库要求

高可用部署需要高可用的 PostgreSQL 后端。在增加实例数量之前,请确保数据库具备复制能力或为托管服务。

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc-ha
spec:
  instances: 3
  db:
    vendor: postgres
    host: postgres-db
    database: keycloak
    usernameSecret:
      name: keycloak-db-secret
      key: username
    passwordSecret:
      name: keycloak-db-secret
      key: password
  http:
    tlsSecret: example-tls-secret
  ingress:
    enabled: true
    className: nginx
    tlsSecret: example-tls-secret
  hostname:
    hostname: keycloak.example.com
  proxy:
    headers: xforwarded
  scheduling:
    affinity:
      podAntiAffinity:
        preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchLabels:
                  app: keycloak
              topologyKey: kubernetes.io/hostname
  unsupported:
    podTemplate:
      spec:
        containers:
          - securityContext:
              allowPrivilegeEscalation: false
              runAsNonRoot: true
              capabilities:
                drop:
                  - ALL
              seccompProfile:
                type: RuntimeDefault