搜索

第 4 章 高级配置

download PDF

4.1. 高级配置

本章论述了如何使用自定义资源(CR)进行红帽构建的 Keycloak 部署高级配置。

4.1.1. 服务器配置详情

许多服务器选项都作为 Keycloak CR 中的第一类统计字段公开。CR 的结构基于红帽构建的 Keycloak 的配置结构。例如,若要配置服务器的 https-port,请按照 CR 中的类似模式并使用 httpsPort 字段。以下示例是复杂的服务器配置,但演示了服务器选项和 Keycloak CR 之间的关系:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  db:
    vendor: postgres
    usernameSecret:
      name: usernameSecret
      key: usernameSecretKey
    passwordSecret:
      name: passwordSecret
      key: passwordSecretKey
    host: host
    database: database
    port: 123
    schema: schema
    poolInitialSize: 1
    poolMinSize: 2
    poolMaxSize: 3
  http:
    httpEnabled: true
    httpPort: 8180
    httpsPort: 8543
    tlsSecret: my-tls-secret
  hostname:
    hostname: my-hostname
    admin: my-admin-hostname
    strict: false
    strictBackchannel: false
  features:
    enabled:
      - docker
      - authorization
    disabled:
      - admin
      - step-up-authentication
  transaction:
    xaEnabled: false

有关选项列表,请参阅 Keycloak CRD。有关配置选项的详情,请查看 所有配置

4.1.1.1. 其他选项

有些专家服务器选项作为 Keycloak CR 中的专用字段不可用。以下是省略的字段示例:

  • 需要深入了解底层红帽构建的 Keycloak 实现的字段
  • 与 OpenShift 环境无关的字段
  • 供应商配置的字段,因为它们是根据使用的供应商实施动态的

Keycloak CR 的 additionalOptions 字段可让红帽构建 Keycloak 以键值对的形式接受任何可用的配置。您可以使用此字段包含 Keycloak CR 中省略的任何选项。有关配置选项的详情,请查看 所有配置

这些值可以用纯文本字符串或 Secret 对象引用表示,如下例所示:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  additionalOptions:
    - name: spi-connections-http-client-default-connection-pool-size
      secret: # Secret reference
        name: http-client-secret # name of the Secret
        key: poolSize # name of the Key in the Secret
    - name: spi-email-template-mycustomprovider-enabled
      value: true # plain text value
注意

以这种方式定义的选项名称格式与配置文件中指定的选项的密钥格式相同。有关各种配置格式的详情,请参阅配置红帽构建的 Keycloak

4.1.2. Secret References

secret References 由 Keycloak CR 中的一些专用选项使用,如 tlsSecret,或作为 additionalOptions 中的值。

与 ConfigMap 引用类似,选项(如 configMapFile )使用。

在指定 Secret 或 ConfigMap 参考时,请确保包含引用密钥的 Secret 或 ConfigMap 存在于与引用它的 CR 相同的命名空间中。

Operator 大约会每分钟轮询到引用 Secret 或 ConfigMap 的更改。当检测到有意义的更改时,Operator 会执行红帽构建的 Keycloak Deployment 的滚动重启,以获取更改。

4.1.3. 不支持的功能

CR 的 unsupported 字段包含没有完全测试且技术预览的高实验性配置选项。

4.1.3.1. Pod 模板

Pod 模板是用于 Deployment 模板的原始 API 表示。当您的用例的 CR 顶级不存在支持字段时,此字段是一个临时临时解决方案。

Operator 将提供的模板字段与 Operator 为特定 Deployment 生成的值合并。使用此功能,您可以访问高级别的自定义。但是,不能保证部署可以按预期工作。

以下示例演示了注入标签、注解、卷和卷挂载:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  unsupported:
    podTemplate:
      metadata:
        labels:
          my-label: "keycloak"
      spec:
        containers:
          - volumeMounts:
              - name: test-volume
                mountPath: /mnt/test
        volumes:
          - name: test-volume
            secret:
              secretName: keycloak-additional-secret

4.1.4. 禁用所需选项

红帽构建的 Keycloak 和红帽构建的 Keycloak Operator 提供了最佳生产就绪体验。但是,在开发阶段,您可以禁用关键安全功能。

具体来说,您可以禁用主机名和 TLS,如下例所示:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  http:
    httpEnabled: true
  hostname:
    strict: false
    strictBackchannel: false

4.1.5. 资源要求

Keycloak CR 允许指定管理红帽构建的 Keycloak 容器 计算资源的 资源选项。它提供通过 Keycloak CR 独立请求和限制资源的功能,以及通过 Realm Import CR 的域导入作业。

如果没有指定值,则默认 请求内存 设置为 1700MiB限值 内存设置为 2GiB。这些值根据红帽构建的 Keycloak 内存管理的更深入分析来选择。

如果没有在 Realm Import CR 中指定值,它将回退到 Keycloak CR 中指定的值,或回退到上面定义的默认值。

您可以根据您的要求指定自定义值,如下所示:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  resources:
    requests:
      cpu: 1200m
      memory: 896Mi
    limits:
      cpu: 6
      memory: 3Gi

此外,红帽构建的 Keycloak 容器通过提供堆大小的相对值来更有效地管理堆大小。它通过提供某些 JVM 选项来实现。

如需了解更多详细信息,请参阅 在容器中运行红帽构建的 Keycloak

4.1.6. truststores

如果您需要提供可信证书,Keycloak CR 提供了顶级功能来配置服务器的信任存储,如 配置可信证书 中所述。

使用 Keycloak spec 的 truststores 小节来指定包含 PEM 编码文件的 Secret,或使用扩展名 .p12.pfx 的 PKCS12 文件,例如:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  truststores:
    my-truststore:
      secret:
        name: my-secret

其中 my-secret 的内容可以是 PEM 文件,例如:

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
stringData:
  cert.pem: |
    -----BEGIN CERTIFICATE-----
    ...

在 Kubernetes 或 OpenShift 环境中自动包含可信证书已知位置时。这包括 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt 和 /var/run/secrets/kubernetes.io/serviceaccount/service-ca.crt (如果存在)。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.