13.2.70.2. 卷


使用卷将 ConfigMap 或 Secret 挂载到 Kafka Connect pod。

在以下情况下,使用卷而不是环境变量会很有用:

  • 挂载用来配置 Kafka Connect 连接器的属性文件
  • 使用 TLS 证书挂载信任存储或密钥存储

卷挂载到 Kafka Connect 容器中,路径 /opt/kafka/external-configuration/<volume-name>。例如,名为 connector -config 的卷中的文件将显示在 /opt/kafka/external-configuration/connector-config 目录中。

配置 提供程序 从配置外部加载值。使用供应商机制避免通过 Kafka Connect REST 接口传递受限信息。

  • FileConfigProvider 从文件中的属性加载配置值。
  • DirectoryConfigProvider 从目录结构中的独立文件加载配置值。

如果要添加多个供应商(包括自定义供应商),请使用以逗号分隔的列表。您可以使用自定义供应商从其他文件位置加载值。

使用 FileConfigProvider 加载属性值

在本例中,名为 mysecret 的 Secret 包含指定数据库名称和密码的连接器属性:

带有数据库属性的 Secret 示例

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
type: Opaque
stringData:
  connector.properties: |- 1
    dbUsername: my-username 2
    dbPassword: my-password

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

Secret 和 FileConfigProvider 配置供应商在 Kafka Connect 配置中指定。

  • Secret 被挂载到名为 connector -config 的卷。
  • 为 fileConfigProvider 指定别名 文件

外部卷示例设置为来自 Secret 的值

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

1
配置提供程序的别名用于定义其他配置参数。
2
FileConfigProvider 提供属性文件的值。参数使用 config.providers 中的别名,格式为 config.providers.${alias}.class
3
包含 Secret 的卷的名称。每个卷必须在 name 属性中指定一个名称和对 ConfigMap 或 Secret 的引用。
4
Secret 的名称。

在连接器配置中引用 Secret 中属性值的占位符。占位符结构为 file:PATH-AND-FILE-NAME:PROPERTYFileConfigProvider 在连接器配置中读取并提取挂载的 Secret 中的数据库 用户名和密码 属性值。

显示外部值占位符的连接器配置示例

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"
    #...

使用 DirectoryConfigProvider 从单独的文件中加载属性值

在本例中,Secret 在单独的文件中包含 TLS 信任存储和密钥存储用户凭证。

带有用户凭证的 Secret 示例

apiVersion: v1
kind: Secret
metadata:
  name: mysecret
  labels:
    strimzi.io/kind: KafkaUser
    strimzi.io/cluster: my-cluster
type: Opaque
data: 1
  ca.crt: # Public key of the client CA
  user.crt: # User certificate that contains the public key of the user
  user.key: # Private key of the user
  user.p12: # PKCS #12 archive file for storing certificates and keys
  user.password: # Password for protecting the PKCS #12 archive file

Secret 和 DirectoryConfigProvider 配置供应商在 Kafka Connect 配置中指定。

  • Secret 被挂载到名为 connector -config 的卷。
  • DirectoryConfigProvider 被授予别名 目录

为用户凭证文件设置的外部卷示例

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect
spec:
  # ...
  config:
    config.providers: directory
    config.providers.directory.class: org.apache.kafka.common.config.provider.DirectoryConfigProvider 1
  #...
  externalConfiguration:
    volumes:
      - name: connector-config
        secret:
          secretName: mysecret

1 1
DirectoryConfigProvider 提供目录中文件的值。参数使用 config.providers 中的别名,格式为 config.providers.${alias}.class

凭据的占位符在连接器配置中引用。占位符结构为 directory:PATH:FILE-NAMEDirectoryConfigProvider 在连接器配置中读取并提取挂载的 Secret 中的凭证。

显示外部值占位符的连接器配置示例

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:
    security.protocol: SSL
    ssl.truststore.type: PEM
    ssl.truststore.location: "${directory:/opt/kafka/external-configuration/connector-config:ca.crt}"
    ssl.keystore.type: PEM
    ssl.keystore.location: ${directory:/opt/kafka/external-configuration/connector-config:user.key}"
    #...

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.