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


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

OpenShift 配置提供程序

OpenShift Configuration Provider 插件从 OpenShift secret 或配置映射加载配置数据。

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

环境变量配置提供程序

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

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

注意

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

3.1. 从配置映射载入配置值

此流程演示了如何使用 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 和配置映射加载值。

    启用 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