#创建实例
您可以创建一个 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>- 在左侧导航栏中,进入 Application Services > Keycloak。
- 单击目标命名空间。
- 单击 Create Keycloak Instance。
- 参考下表完成配置。
| 配置项 | 字段名 | 说明 |
|---|---|---|
| Instances | Instance Count | Keycloak 副本数量。为实现高可用,建议设置为 2 个或更多。 |
| Database | Vendor | 数据库类型。推荐使用 postgres。 |
| Database | Host | 数据库的主机名或服务名。 |
| Database | Username Secret | 指向包含数据库用户名的 Kubernetes Secret。 |
| Database | Password Secret | 指向包含数据库密码的 Kubernetes Secret。 |
| HTTP | HTTP Enabled | 启用 HTTP 监听器。仅用于开发环境;生产环境请使用 TLS。 |
| Ingress | Enabled | 启用 Ingress 暴露。外部访问时必需。 |
- 单击 Create。
当实例状态变为 Ready 时,表示该实例已成功创建。
创建实例后,验证其状态:
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