#创建实例
您可以创建一个 Keycloak 实例,为在 Kubernetes 集群中运行的应用程序提供集中式身份和访问管理。
#创建 Keycloak 实例
#前提条件
- 集群中已安装 Alauda Application Services Identity Management E1 Operator。
- 可从集群内部访问 PostgreSQL 数据库。
- 目标命名空间中存在包含数据库凭据的 Kubernetes Secret。
#操作步骤
CLI
Web Console
通过 CLI 创建 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应用清单:
kubectl apply -f keycloak.yaml -n <namespace>- 在左侧导航栏中,转到 Application Services > Keycloak。
- 单击目标命名空间。
- 单击 创建 Keycloak 实例。
- 参考下表完成配置。
| 配置项 | 字段 | 描述 |
|---|---|---|
| 实例 | 实例数量 | Keycloak 副本数。要实现高可用性,请设置为 2 个或更多。 |
| 数据库 | 供应商 | 数据库类型。建议使用 postgres。 |
| 数据库 | 主机 | 数据库的主机名或服务名称。 |
| 数据库 | 用户名 Secret | 包含数据库用户名的 Kubernetes Secret 的引用。 |
| 数据库 | 密码 Secret | 包含数据库密码的 Kubernetes Secret 的引用。 |
| HTTP | 启用 HTTP | 启用 HTTP 监听器。仅用于开发环境;生产环境请使用 TLS。 |
| Ingress | 已启用 | 启用 Ingress 暴露。外部访问时必须启用。 |
- 单击 创建。
当实例状态变为 就绪 时,表示实例已成功创建。
创建实例后,验证其状态:
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/v2beta1
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