8.15. 从外部来源加载配置值


使用配置提供程序从外部来源加载配置数据。供应商独立于 AMQ Streams 运行。您可以使用它们为所有 Kafka 组件加载配置数据,包括制作者和消费者。您可以在组件的配置中引用外部源并提供访问权限。供应商在不需要重启 Kafka 组件或提取文件的情况下加载数据,即使引用新的外部源。例如,使用 provider 为 Kafka Connect 连接器配置提供凭证。该配置必须包含对外部源的任何访问权限。

8.15.1. 启用配置供应商

您可以使用组件的 spec 配置中的 config.providers 属性启用一个或多个配置供应商。

启用配置供应商的示例配置

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect
  annotations:
    strimzi.io/use-connector-resources: "true"
spec:
  # ...
  config:
    # ...
    config.providers: env
    config.providers.env.class: io.strimzi.kafka.EnvVarConfigProvider
  # ...
Copy to Clipboard Toggle word wrap

KubernetesSecretConfigProvider
从 OpenShift 机密加载配置数据。您可以在存储配置数据的 secret 中指定 secret 的名称和密钥。此提供程序可用于存储敏感配置数据,如密码或其他用户凭据。
KubernetesConfigMapConfigProvider
从 OpenShift 配置映射加载配置数据。您可以在保存配置数据的配置映射中指定配置映射的名称和密钥。此提供程序可用于存储非敏感配置数据。
EnvVarConfigProvider
从环境变量加载配置数据。您可以指定存储数据的环境变量的名称。此提供程序可用于配置容器中运行的应用程序,例如从从 secret 映射的环境变量加载证书或 JAAS 配置。
FileConfigProvider
从文件中加载配置数据。您可以指定存储数据的文件的路径。此提供程序可用于从挂载到容器中的文件中加载配置数据。
DirectoryConfigProvider
从目录中的文件加载配置数据。您可以指定存储配置文件的目录路径。此提供程序可用于加载多个配置文件并将配置数据整理到单独的文件中。

要使用作为 OpenShift Configuration Provider 插件一部分的 KubernetesSecretConfigProviderKubernetesConfigMapConfigProvider,您必须为包含配置文件的命名空间设置访问权限。

您可以在不设置访问权限的情况下使用其他供应商。您可以通过执行以下操作为 Kafka Connect 或 MirrorMaker 2 提供连接器配置:

  • 将配置映射或 secret 挂载到 Kafka Connect pod 中作为环境变量或卷
  • 在 Kafka Connect 或 MirrorMaker 2 配置中启用 EnvVarConfigProviderFileConfigProviderDirectoryConfigProvider
  • 使用 KafkaConnectKafkaMirrorMaker2 资源 spec 中的 externalConfiguration 属性传递连接器配置

使用供应商有助于防止通过 Kafka Connect REST 接口传递受限信息。您可以使用以下场景使用此方法:

  • 使用连接器用来连接和与数据源通信的值挂载环境变量
  • 使用用于配置 Kafka 连接连接器的值挂载属性文件
  • 将文件挂载到包含 TLS 信任存储的值和连接器使用的密钥存储值的目录中
注意

在为连接器使用新的 SecretConfigMap 时,需要重启,这可能会破坏其他连接器。

8.15.2. 从 secret 或配置映射加载配置值

使用 KubernetesSecretConfigProvider 从 secret 或 KubernetesConfigMapConfigProvider 提供配置属性,以便从配置映射中提供配置属性。

在此过程中,配置映射为连接器提供配置属性。属性指定为配置映射的键值。配置映射作为卷挂载到 Kafka Connect pod 中。

先决条件

  • Kafka 集群正在运行。
  • Cluster Operator 正在运行。
  • 您有一个包含连接器配置的配置映射。

带有连接器属性的配置映射示例

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

流程

  1. 配置 KafkaConnect 资源。

    • 启用 KubernetesConfigMapConfigProvider

    此处显示的规格支持从配置映射和 secret 加载值。

    使用配置映射和 secret 的 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.configmaps.class: io.strimzi.kafka.KubernetesConfigMapConfigProvider 
    2
    
        config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider 
    3
    
      # ...
    Copy to Clipboard Toggle word wrap

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

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

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

    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 配置映射的角色权限。

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

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

    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 自定义资源的名称。

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

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

    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>:<property>KubernetesConfigMapConfigProvider 从外部配置映射读取并提取 option1 属性值。

8.15.3. 从环境变量加载配置值

使用 EnvVarConfigProvider 将配置属性作为环境变量提供。环境变量可以包含配置映射或 secret 的值。

在此过程中,环境变量为连接器提供与 Amazon AWS 通信的配置属性。连接器必须能够读取 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY。环境变量的值派生自挂载到 Kafka Connect pod 的 secret。

注意

用户定义的环境变量的名称不能以 KAFKA_STRIMZI_ 开头。

先决条件

  • Kafka 集群正在运行。
  • Cluster Operator 正在运行。
  • 您有一个包含连接器配置的 secret。

带有环境变量值的 secret 示例

apiVersion: v1
kind: Secret
metadata:
  name: aws-creds
type: Opaque
data:
  awsAccessKey: QUtJQVhYWFhYWFhYWFhYWFg=
  awsSecretAccessKey: Ylhsd1lYTnpkMjl5WkE=
Copy to Clipboard Toggle word wrap

流程

  1. 配置 KafkaConnect 资源。

    • 启用 EnvVarConfigProvider
    • 使用 externalConfiguration 属性指定环境变量。

    使用外部环境变量的 Kafka 连接配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnect
    metadata:
      name: my-connect
      annotations:
        strimzi.io/use-connector-resources: "true"
    spec:
      # ...
      config:
        # ...
        config.providers: env 
    1
    
        config.providers.env.class: io.strimzi.kafka.EnvVarConfigProvider 
    2
    
      # ...
      externalConfiguration:
        env:
          - name: AWS_ACCESS_KEY_ID 
    3
    
            valueFrom:
              secretKeyRef:
                name: aws-creds 
    4
    
                key: awsAccessKey 
    5
    
          - name: AWS_SECRET_ACCESS_KEY
            valueFrom:
              secretKeyRef:
                name: aws-creds
                key: awsSecretAccessKey
      # ...
    Copy to Clipboard Toggle word wrap

    1
    配置提供程序的别名用于定义其他配置参数。供应商参数使用 config.providers 的别名,格式为 config.providers.${alias}.class
    2
    EnvVarConfigProvider 提供来自环境变量的值。
    3
    环境变量从 secret 中获取一个值。
    4
    包含环境变量的 secret 名称。
    5
    存储在 secret 中的密钥的名称。
    注意

    secretKeyRef 属性引用 secret 中的密钥。如果您使用配置映射而不是 secret,请使用 configMapKeyRef 属性。

  2. 创建或更新资源以启用供应商。

    oc apply -f <kafka_connect_configuration_file>
    Copy to Clipboard Toggle word wrap
  3. 在连接器配置中引用环境变量。

    引用环境变量的连接器配置示例

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

    占位符结构是 env:<environment_variable_name>EnvVarConfigProvider 从挂载的 secret 中读取并提取环境变量值。

8.15.4. 从目录中的文件加载配置值

使用 FileConfigProvider 从目录中的文件提供配置属性。文件可以是配置映射或 secret。

在此过程中,文件为连接器提供配置属性。数据库用户名和密码被指定为 secret 的属性。secret 作为一个卷挂载到 Kafka Connect pod。卷挂载到路径 /opt/kafka/external-configuration/<volume-name > 上。

先决条件

  • Kafka 集群正在运行。
  • Cluster Operator 正在运行。
  • 您有一个包含连接器配置的 secret。

带有数据库属性的 secret 示例

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  connector.properties: |- 
1

    dbUsername: my-username 
2

    dbPassword: my-password
Copy to Clipboard Toggle word wrap

1
属性文件格式的连接器配置。
2
配置中使用的数据库用户名和密码属性。

流程

  1. 配置 KafkaConnect 资源。

    • 启用 FileConfigProvider
    • 使用 externalConfiguration 属性指定该文件。

    使用外部属性文件的 Kafka 连接配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnect
    metadata:
      name: my-connect
    spec:
      # ...
      config:
        config.providers: file 
    1
    
        config.providers.file.class: org.apache.kafka.common.config.provider.FileConfigProvider 
    2
    
      #...
      externalConfiguration:
        volumes:
          - name: connector-config 
    3
    
            secret:
              secretName: mysecret 
    4
    Copy to Clipboard Toggle word wrap

    1
    配置提供程序的别名用于定义其他配置参数。
    2
    FileConfigProvider 提供来自属性文件的值。参数使用 config.providers 的别名,格式为 config.providers.${alias}.class
    3
    包含 secret 的卷名称。
    4
    secret 的名称。
  2. 创建或更新资源以启用供应商。

    oc apply -f <kafka_connect_configuration_file>
    Copy to Clipboard Toggle word wrap
  3. 将连接器配置中的文件属性引用为占位符。

    引用该文件的连接器配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      name: my-source-connector
      labels:
        strimzi.io/cluster: my-connect-cluster
    spec:
      class: io.debezium.connector.mysql.MySqlConnector
      tasksMax: 2
      config:
        database.hostname: 192.168.99.1
        database.port: "3306"
        database.user: "${file:/opt/kafka/external-configuration/connector-config/mysecret:dbUsername}"
        database.password: "${file:/opt/kafka/external-configuration/connector-config/mysecret:dbPassword}"
        database.server.id: "184054"
        #...
    Copy to Clipboard Toggle word wrap

    占位符结构是 文件:<path_and_file_name>:<property>FileConfigProvider 从挂载的 secret 中读取并提取数据库 username 和 password 属性值。

8.15.5. 从目录中的多个文件加载配置值

使用 DirectoryConfigProvider 从目录中的多个文件中提供配置属性。文件可以是配置映射或 secret。

在此过程中,secret 为连接器提供 TLS 密钥存储和信任存储用户凭证。凭据位于单独的文件中。secret 作为卷挂载到 Kafka Connect pod 中。卷挂载到路径 /opt/kafka/external-configuration/<volume-name > 上。

先决条件

  • Kafka 集群正在运行。
  • Cluster Operator 正在运行。
  • 您有一个包含用户凭证的 secret。

使用用户凭证的 secret 示例

apiVersion: v1
kind: Secret
metadata:
  name: my-user
  labels:
    strimzi.io/kind: KafkaUser
    strimzi.io/cluster: my-cluster
type: Opaque
data:
  ca.crt: <public_key> # Public key of the clients CA
  user.crt: <user_certificate> # Public key of the user
  user.key: <user_private_key> # Private key of the user
  user.p12: <store> # PKCS #12 store for user certificates and keys
  user.password: <password_for_store> # Protects the PKCS #12 store
Copy to Clipboard Toggle word wrap

my-user secret 为连接器提供密钥存储凭据(user.crtuser.key)。

在部署 Kafka 集群时生成的 <cluster_name>-cluster-ca-cert secret 提供集群 CA 证书作为信任存储凭证(ca.crt)。

流程

  1. 配置 KafkaConnect 资源。

    • 启用 DirectoryConfigProvider
    • 使用 externalConfiguration 属性指定文件。

    使用外部属性文件的 Kafka 连接配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnect
    metadata:
      name: my-connect
    spec:
      # ...
      config:
        config.providers: directory 
    1
    
        config.providers.directory.class: org.apache.kafka.common.config.provider.DirectoryConfigProvider 
    2
    
      #...
      externalConfiguration:
        volumes: 
    3
    
          - name: cluster-ca 
    4
    
            secret:
              secretName: my-cluster-cluster-ca-cert 
    5
    
          - name: my-user
            secret:
              secretName: my-user 
    6
    Copy to Clipboard Toggle word wrap

    1
    配置提供程序的别名用于定义其他配置参数。
    2
    DirectoryConfigProvider 提供来自目录中的文件的值。参数使用 config.providers 的别名,格式为 config.providers.${alias}.class
    3
    包含 secret 的卷名称。
    4
    集群 CA 证书的 secret 名称,以提供信任存储配置。
    5
    用户提供密钥存储配置的 secret 名称。
  2. 创建或更新资源以启用供应商。

    oc apply -f <kafka_connect_configuration_file>
    Copy to Clipboard Toggle word wrap
  3. 将连接器配置中的文件属性引用为占位符。

    引用文件的连接器配置示例

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      name: my-source-connector
      labels:
        strimzi.io/cluster: my-connect-cluster
    spec:
      class: io.debezium.connector.mysql.MySqlConnector
      tasksMax: 2
      config:
        # ...
        database.history.producer.security.protocol: SSL
        database.history.producer.ssl.truststore.type: PEM
        database.history.producer.ssl.truststore.certificates: "${directory:/opt/kafka/external-configuration/cluster-ca:ca.crt}"
        database.history.producer.ssl.keystore.type: PEM
        database.history.producer.ssl.keystore.certificate.chain: "${directory:/opt/kafka/external-configuration/my-user:user.crt}"
        database.history.producer.ssl.keystore.key: "${directory:/opt/kafka/external-configuration/my-user:user.key}"
        #...
    Copy to Clipboard Toggle word wrap

    占位符结构是 directory:<path>:<file_name>DirectoryConfigProvider 从挂载的 secret 中读取并提取凭证。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat