13.2.70.2. volumes

ボリュームを使用して ConfigMap またはシークレットを Kafka Connect Pod にマウントします。

以下の場合、環境変数の代わりにボリュームを使用すると便利です。

  • Kafka Connect コネクターの設定に使用されるプロパティーファイルのマウント
  • TLS 証明書でのトラストストアまたはキーストアのマウント

ボリュームは、パス /opt/kafka/external-configuration/<volume-name> の Kafka Connect コンテナー内にマウントされます。たとえば、 connector-config という名前のボリュームのファイルは /opt/kafka/external-configuration/connector-config ディレクトリーにあります。

設定プロバイダーは設定外から値を読み込みます。プロバイダーメカニズムを使用して、制限された情報がKafka ConnectREST インターフェースを介して渡されないようにします。

  • 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 またはシークレットを参照する必要があります。
4
Secret の名前。

Secret のプロパティー値のプレースホルダーは、コネクター設定で参照されます。プレースホルダー構造は、configmaps:PATH-AND-FILE-NAME:PROPERTY です。FileConfigProvider は、コネクター設定でマウントされた Secret からデータベースの username および password プロパティーの値を読み取りおよび展開します。

外部値のプレースホルダーを示すコネクター設定の例

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-NAME です。DirectoryConfigProvider は、コネクター設定でマウントされた 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}"
    #...