3.3. 迁移 Keycloak CR
Keycloak CR 现在支持所有服务器配置选项。在 CR 的 spec 下,所有相关选项都作为第一类的会面字段提供。CR 中的所有选项遵循相同的命名约定,这与在裸机和 Operator 部署间体验的服务器选项相同。
另外,您可以在 additionalOptions
字段中定义 CR 缺少的任何选项,如 SPI 供应商配置。另一个选择是使用 podTemplate
(一个技术预览字段)来修改原始 Kubernetes 部署 pod 模板,如果支持的替代方案并不存在作为 CR 中的第一个类 该文件字段。
下面显示了一个通过 Operator 部署红帽构建的 Keycloak CR 示例:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: instances: 1 db: vendor: postgres host: postgres-db usernameSecret: name: keycloak-db-secret key: username passwordSecret: name: keycloak-db-secret key: password http: tlsSecret: example-tls-secret hostname: hostname: test.keycloak.org additionalOptions: - name: spi-connections-http-client-default-connection-pool-size value: 20
请注意 CLI 配置的位置:
./kc.sh start --db=postgres --db-url-host=postgres-db --db-username=user --db-password=pass --https-certificate-file=mycertfile --https-certificate-key-file=myprivatekey --hostname=test.keycloak.org --spi-connections-http-client-default-connection-pool-size=20
其他资源
3.3.1. 迁移数据库配置
Red Hat build of Keycloak 可以使用与之前 Red Hat Single Sign-On 7.6 使用相同的数据库实例。当红帽首次构建 Keycloak 时,数据库架构将自动迁移。
不支持迁移由 Red Hat Single Sign-On 7.6 Operator 管理的嵌入式数据库。
在 Red Hat Single Sign-On 7.6 Operator 中,外部数据库连接使用 Secret 配置,例如:
apiVersion: v1 kind: Secret metadata: name: keycloak-db-secret namespace: keycloak labels: app: sso stringData: POSTGRES_DATABASE: kc-db-name POSTGRES_EXTERNAL_ADDRESS: my-postgres-hostname POSTGRES_EXTERNAL_PORT: 5432 POSTGRES_USERNAME: user POSTGRES_PASSWORD: pass type: Opaque
在 Red Hat build of Keycloak 中,数据库直接在 Keycloak CR 中配置,其凭证被引用为 Secret,例如:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: db: vendor: postgres host: my-postgres-hostname port: 5432 usernameSecret: name: keycloak-db-secret key: username passwordSecret: name: keycloak-db-secret key: password ... apiVersion: v1 kind: Secret metadata: name: keycloak-db-secret stringData: username: "user" password: "pass" type: Opaque
3.3.1.1. 支持的数据库供应商
Red Hat Single Sign-On 7.6 Operator 仅支持 PostgreSQL 数据库,但红帽构建的 Keycloak Operator 支持服务器支持的所有数据库供应商。
3.3.2. 迁移 TLS 配置
Red Hat Single Sign-On 7.6 Operator 默认将服务器配置为使用 OpenShift CA 生成的 TLS Secret。Red Hat build of Keycloak Operator 不对 TLS 进行任何假设来满足生产环境的最佳实践,并要求用户提供自己的 TLS 证书和密钥对,例如:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: http: tlsSecret: example-tls-secret ...
tlsSecret 中引用的 secret 的预期格式应使用标准的 Kubernetes TLS Secret (kubernetes.io/tls
)类型。
默认情况下,Red Hat Single Sign-On 7.6 Operator 在 Route 上默认使用重新加密 TLS 终止策略。默认情况下,Red Hat build of Keycloak Operator 使用 passthrough 策略。另外,Red Hat Single Sign-On 7.6 Operator 支持配置 TLS 终止。红帽构建的 Keycloak Operator 不支持当前版本中的 TLS 终止。
如果默认 Operator 管理的 Route 不满足所需的 TLS 配置,则需要用户创建自定义 Route,并禁用它:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: ingress: enabled: false ...
3.3.3. 使用自定义镜像进行扩展
为了反映最佳实践并支持不可变容器,红帽构建的 Keycloak Operator 不再支持在 Keycloak CR 中指定扩展。要部署扩展,必须构建优化的自定义镜像。Keycloak CR 现在包含专用字段 镜像
,用于指定红帽构建的 Keycloak 镜像,例如:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: image: quay.io/my-company/my-keycloak:latest ...
在指定自定义镜像时,Operator 会假定它已被优化,且不会在每个服务器启动时执行昂贵的优化。
3.3.4. 删除升级策略选项
Red Hat Single Sign-On 7.6 Operator 支持在执行服务器升级时重新创建和滚动策略。这种方法并不实际。只有 Red Hat Single Sign-On 7.6 Operator 应该在执行升级和数据库迁移前缩减部署,则最多可选择用户。在安全使用滚动策略时,用户不知道用户。
因此,红帽构建的 Keycloak Operator 中删除了这个选项,它会始终隐式执行 recreate 策略,这会在使用新服务器容器镜像创建 Pod 前缩减整个部署,以确保只有一个服务器版本访问数据库。
3.3.5. 默认启用的健康状况端点
Red Hat build of Keycloak 配置服务器,以默认公开 OpenShift 探测使用的健康端点。端点在管理界面上公开,它使用专用端口(默认为9000),可以从 OpenShift 中访问,但不能由 Operator 作为路由公开。
3.3.6. 使用 Pod 模板迁移高级部署选项
Red Hat Single Sign-On 7.6 Operator 为部署配置公开多个低级别字段,如卷。Red Hat build of Keycloak Operator 更加建议,不会公开其中大多数字段。但是,仍然可以配置指定为 podTemplate
的任何所需的部署字段,例如:
apiVersion: k8s.keycloak.org/v2alpha1 kind: Keycloak metadata: name: example-kc spec: unsupported: podTemplate: metadata: labels: foo: "bar" spec: containers: - volumeMounts: - name: test-volume mountPath: /mnt/test volumes: - name: test-volume secret: secretName: test-secret ...
spec.unsupported.podTemplate
字段 是一个技术预览功能。它仅提供有限的支持,因为它会公开低级别配置,而所有情况下尚未测试完整的功能。在可能的情况下,在 CR spec 的顶级使用完全支持的第一类保证字段。
例如,不使用 spec.unsupported.podTemplate.spec.imagePullSecrets
,而是使用 spec.imagePullSecrets
。
3.3.7. 不再支持连接到外部实例
Red Hat Single Sign-On 7.6 Operator 支持连接到 Red Hat Single Sign-On 7.6 的外部实例。例如,红帽构建的 Keycloak Operator 不再支持通过 Client CR 在现有域中创建客户端。
3.3.8. 迁移 Horizontal Pod Autoscaler 启用部署
要将 Horizontal Pod Autoscaler (HPA)与 Red Hat Single Sign-On 7.6 搭配使用,需要在 Keycloak CR 中设置 disableReplicasSyncing: true
字段并扩展 server StatefulSet。这不再需要,因为红帽构建的 Keycloak Operator 中的 Keycloak CR 可以直接由 HPA 扩展。