第 3 章 从外部来源加载配置值


使用配置供应商插件从外部来源加载配置数据。供应商独立于 AMQ Streams 运行。您可以使用它们为所有 Kafka 组件(包括生产者和消费者)加载配置数据。例如,使用它们为 Kafka Connect 连接器配置提供凭证。

OpenShift 配置提供程序

OpenShift Configuration Provider 插件从 OpenShift secret 或 ConfigMap 中加载配置数据。

假设您有一个在 Kafka 命名空间或 Kafka 集群外管理的 Secret 对象。OpenShift Configuration Provider 允许您在不提取文件的情况下引用配置中的机密值。您只需告知供应商使用哪些 secret 并提供访问权限。供应商加载数据而无需重启 Kafka 组件,即使使用新的 SecretConfigMap 对象。此功能可避免在 Kafka Connect 实例托管多个连接器时中断。

环境变量配置提供程序

Environment Variables Configuration Provider 插件从环境变量加载配置数据。

环境变量的值可以从 secret 或 ConfigMap 中映射。您可以使用 Environment Variables Configuration Provider (如,从 OpenShift secret 映射的环境变量)加载证书或 JAAS 配置。

注意

OpenShift 配置提供程序无法使用已挂载的文件。例如,它无法加载需要信任存储或密钥存储的位置的值。反之,您可以将 ConfigMap 或 secret 挂载到 Kafka Connect pod 中作为环境变量或卷。您可以使用 Environment Variables Configuration Provider 来加载环境变量的值。您可以使用 KafkaConnect.spec 中的 externalConfiguration 属性添加配置。您不需要通过这种方法设置访问权限。但是,当将新的 SecretConfigMap 用于连接器时,Kafka Connect 将需要重启。这会导致中断所有 Kafka Connect 实例连接器。

3.1. 从 ConfigMap 中载入配置值

此流程演示了如何使用 OpenShift Configuration Provider 插件。

在此过程中,外部 ConfigMap 对象为连接器提供配置属性。

先决条件

  • OpenShift 集群可用。
  • Kafka 集群正在运行。
  • Cluster Operator 正在运行。

流程

  1. 创建包含配置属性的 ConfigMapSecret

    在本例中,名为 my-connector-configurationConfigMap 对象包含 connector 属性:

    使用连接器属性的 ConfigMap 示例

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-connector-configuration
    data:
      option1: value1
      option2: value2
    Copy to Clipboard Toggle word wrap

  2. 在 Kafka Connect 配置中指定 OpenShift Configuration Provider。

    此处所示的规格支持从 secret 和 ConfigMap 中加载值。

    启用 OpenShift Configuration Provider 的 Kafka Connect 配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnect
    metadata:
      name: my-connect
      annotations:
        strimzi.io/use-connector-resources: "true"
    spec:
      # ...
      config:
        # ...
        config.providers: secrets,configmaps 
    1
    
        config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider 
    2
    
        config.providers.configmaps.class: io.strimzi.kafka.KubernetesConfigMapConfigProvider 
    3
    
      # ...
    Copy to Clipboard Toggle word wrap

    1
    配置提供程序的别名用于定义其他配置参数。provider 参数使用 config.providers 中的别名,格式为 config.providers.${alias}.class
    2
    KubernetesSecretConfigProvider 提供来自 secret 的值。
    3
    KubernetesConfigMapConfigProvider 提供配置映射的值。
  3. 创建或更新资源以启用该提供程序。

    oc apply -f <kafka_connect_configuration_file>
    Copy to Clipboard Toggle word wrap
  4. 创建允许访问外部配置映射中的值的角色。

    从配置映射访问值的角色示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:
      name: connector-configuration-role
    rules:
    - apiGroups: [""]
      resources: ["configmaps"]
      resourceNames: ["my-connector-configuration"]
      verbs: ["get"]
    # ...
    Copy to Clipboard Toggle word wrap

    该规则授予访问 my-connector-configuration 配置映射的角色权限。

  5. 创建一个角色绑定,以允许访问包含配置映射的命名空间。

    访问包含配置映射的命名空间的角色绑定示例

    apiVersion: rbac.authorization.k8s.io/v1
    kind: RoleBinding
    metadata:
      name: connector-configuration-role-binding
    subjects:
    - kind: ServiceAccount
      name: my-connect-connect
      namespace: my-project
    roleRef:
      kind: Role
      name: connector-configuration-role
      apiGroup: rbac.authorization.k8s.io
    # ...
    Copy to Clipboard Toggle word wrap

    角色绑定授予访问 my-project 命名空间的角色权限。

    服务帐户必须是 Kafka Connect 部署使用的相同。服务帐户名称格式为 < cluster_name>-connect,其中 <cluster_name > 是 KafkaConnect 自定义资源的名称。

  6. 在连接器配置中引用配置映射。

    引用配置映射的连接器配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      name: my-connector
      labels:
        strimzi.io/cluster: my-connect
    spec:
      # ...
      config:
        option: ${configmaps:my-project/my-connector-configuration:option1}
        # ...
    # ...
    Copy to Clipboard Toggle word wrap

    配置映射中属性值的占位符在连接器配置中引用。占位符结构是 configmaps: <path_and_file_name> : & lt;property>KubernetesConfigMapConfigProvider 从外部配置映射读取并提取 option1 属性值。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat