9.15. 外部ソースからの設定値の読み込み


設定プロバイダーを使用して、外部ソースから設定データを読み込みます。プロバイダーは、Streams for Apache Kafka とは独立して動作します。これを使用して、プロデューサーやコンシューマーを含む、すべての Kafka コンポーネントの設定データを読み込むことができます。コンポーネントの設定で外部ソースを参照し、アクセス権を提供します。プロバイダーは、新しい外部ソースを参照する場合でも、Kafka コンポーネントの再起動やファイルの抽出を必要とせずにデータを読み込みます。たとえば、プロバイダーを使用して、Kafka Connect コネクター設定の認証情報を提供します。設定には、外部ソースへのアクセス権が含まれている必要があります。

9.15.1. 設定プロバイダーの有効化

コンポーネントの spec 設定で config.providers プロパティーを使用して、1 つ以上の設定プロバイダーを有効にできます。

設定プロバイダーを有効にするための設定例

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: org.apache.kafka.common.config.provider.EnvVarConfigProvider
  # ...

KubernetesSecretConfigProvider
OpenShift シークレットから設定データを読み込みます。シークレットの名前と、設定データが保存されるシークレット内のキーを指定します。このプロバイダーは、パスワードやその他のユーザー認証情報などの機密設定データを保存するのに役立ちます。
KubernetesConfigMapConfigProvider
OpenShift config map から設定データを読み込みます。config map の名前と、設定データが保存される config map 内のキーを指定します。このプロバイダーは、機密性のない設定データを保存するのに役立ちます。
EnvVarConfigProvider
環境変数から設定データを読み込みます。設定データが保存される環境変数の名前を指定します。このプロバイダーは、コンテナー内で実行されるアプリケーションを設定する場合、たとえば、シークレットからマップされた環境変数から証明書や JAAS 設定をロードする場合に役立ちます。
FileConfigProvider
ファイルから設定データを読み込みます。設定データが保存されているファイルへのパスを指定します。このプロバイダーは、コンテナーにマウントされたファイルから設定データをロードする場合に役立ちます。
DirectoryConfigProvider
ディレクトリー内のファイルから設定データを読み込みます。設定ファイルが保存されているディレクトリーへのパスを指定します。このプロバイダーは、複数の設定ファイルを読み込んだり、設定データを個別のファイルに整理したりする場合に役立ちます。

OpenShift Configuration Provider プラグインの一部である KubernetesSecretConfigProvider および KubernetesConfigMapConfigProvider を使用するには、設定ファイルを含む namespace へのアクセス権を設定する必要があります。

アクセス権を設定せずに他のプロバイダーを使用できます。次の手順を実行することで、この方法で Kafka Connect または MirrorMaker 2 のコネクター設定を提供できます。

  • config map またはシークレットを環境変数またはボリュームとして Kafka Connect Pod にマウントします
  • Kafka Connect または MirrorMaker 2 設定で EnvVarConfigProviderFileConfigProvider、または DirectoryConfigProvider を有効にする
  • KafkaConnect または KafkaMirrorMaker2 リソースの specexternalConfiguration プロパティーを使用してコネクター設定を渡します。

プロバイダーを使用すると、Kafka Connect REST インターフェイスを介して制限された情報が渡されるのを防ぐことができます。このアプローチは次のシナリオで使用できます。

  • コネクターがデータソースとの接続と通信に使用する値を使用して環境変数をマウントする
  • Kafka Connect コネクターの設定に使用される値を含むプロパティーファイルをマウントする
  • コネクターが使用する TLS トラストストアとキーストアの値を含むディレクトリーにファイルをマウントする
注記

コネクターに新しい Secret または ConfigMap を使用する場合は再起動が必要であり、他のコネクターが中断される可能性があります。

9.15.2. シークレットまたは config map から設定値を読み込む

KubernetesSecretConfigProvider を使用してシークレットから設定プロパティーを提供するか、KubernetesConfigMapConfigProvider を使用して config map から設定プロパティーを提供します。

この手順では、config map はコネクターの設定プロパティーを提供します。プロパティーは、config map のキー値として指定されます。config map は、Kafka Connect Pod にボリュームとしてマウントされます。

前提条件

  • 稼働中の Kafka クラスター
  • Cluster Operator が稼働中である。
  • コネクター設定を含む config map がある。

コネクタープロパティーを含む config map の例

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-connector-configuration
data:
  option1: value1
  option2: value2

手順

  1. KafkaConnect リソースを設定します。

    • KubernetesConfigMapConfigProvider を有効にする

    ここに示す仕様は、config map およびシークレットからの値のロードをサポートできます。

    config map とシークレットを使用するための 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
      # ...

    1
    設定プロバイダーのエイリアスは、他の設定パラメーターを定義するために使用されます。プロバイダーパラメーターは config.providers からのエイリアスを使用し、config.providers.${alias}.class の形式を取ります。
    2
    KubernetesConfigMapConfigProvider は config map から値を指定します。
    3
    KubernetesSecretConfigProvider は Secret から値を指定します。
  2. リソースを作成または更新してプロバイダーを有効にします。

    oc apply -f <kafka_connect_configuration_file>
  3. 外部の config map の値へのアクセスを許可するロールを作成します。

    config map の値にアクセスするロールの例

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

    このルールは、my-connector-configuration config map にアクセスする権限をロールに付与します。

  4. config map が含まれる namespace へのアクセスを許可するロールバインディングを作成します。

    config map が含まれる namespace にアクセスするためのロールバインディングの例

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

    ロールバインディングにより、my-project namespace にアクセスする権限がロールに付与されます。

    サービスアカウントは、Kafka Connect デプロイメントによって使用されるものと同じである必要があります。サービスアカウント名の形式は <cluster_name>-connect で、<cluster_name>KafkaConnect のカスタムリソースの名前です。

  5. コネクター設定で config map を参照します。

    config map を参照するコネクター設定の例

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

    プレースホルダー構造は、configmaps:<path_and_file_name>:<property> です。KubernetesConfigMapConfigProvider は、外部の ConfigMap から option1 プロパティーの値を読み込んで抽出します。

9.15.3. 環境変数から設定値の読み込み

EnvVarConfigProvider を使用して、設定プロパティーを環境変数として提供します。環境変数には、config map またはシークレットの値を含めることができます。

この手順では、環境変数は、Amazon AWS と通信するためのコネクターの設定プロパティーを提供します。コネクターは AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY の読み取みを可能にする必要があります。環境変数の値は、Kafka Connect Pod にマウントされたシークレットから派生します。

注記

ユーザー定義の環境変数に、KAFKA_ または STRIMZI_ で始まる名前を付けることはできません。

前提条件

  • 稼働中の Kafka クラスター
  • Cluster Operator が稼働中である。
  • コネクター設定を含むシークレットがある。

環境変数の値を含むシークレットの例

apiVersion: v1
kind: Secret
metadata:
  name: aws-creds
type: Opaque
data:
  awsAccessKey: QUtJQVhYWFhYWFhYWFhYWFg=
  awsSecretAccessKey: Ylhsd1lYTnpkMjl5WkE=

手順

  1. KafkaConnect リソースを設定します。

    • EnvVarConfigProvider を有効にする
    • externalConfiguration プロパティーを使用して環境変数を指定します。

    外部環境変数を使用するための Kafka Connect 設定の例

    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: org.apache.kafka.common.config.provider.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
      # ...

    1
    設定プロバイダーのエイリアスは、他の設定パラメーターを定義するために使用されます。プロバイダーパラメーターは config.providers からのエイリアスを使用し、config.providers.${alias}.class の形式を取ります。
    2
    EnvVarConfigProvider は、環境変数から値を指定します。
    3
    環境変数はシークレットから値を取得します。
    4
    環境変数を含むシークレットの名前。
    5
    シークレットに保存されているキーの名前。
    注記

    SecretKeyRef プロパティーは、シークレット内のキーを参照します。シークレットの代わりに config map を使用している場合は、configMapKeyRef プロパティーを使用します。

  2. リソースを作成または更新してプロバイダーを有効にします。

    oc apply -f <kafka_connect_configuration_file>
  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}
        # ...
    # ...

    プレースホルダー構造は env:<environment_variable_name> です。EnvVarConfigProvider は、マウントされたシークレットから環境変数値を読み取り、抽出します。

9.15.4. ディレクトリー内のファイルから設定値を読み込む

FileConfigProvider を使用して、ディレクトリー内のファイルから設定プロパティーを提供します。ファイルは config map またはシークレットにすることができます。

この手順では、ファイルによりコネクターの設定プロパティーが提供されます。データベース名とパスワードはシークレットのプロパティーとして指定されます。シークレットは、Kafka Connect Pod にボリュームとしてマウントされます。ボリュームはパス /opt/kafka/external-configuration/<volume-name> にマウントされます。

前提条件

  • 稼働中の Kafka クラスター
  • Cluster Operator が稼働中である。
  • コネクター設定を含むシークレットがある。

データベースプロパティーのあるシークレットの例

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

1
プロパティーファイル形式のコネクター設定。
2
設定で使用されるデータベースのユーザー名およびパスワードプロパティー。

手順

  1. KafkaConnect リソースを設定します。

    • FileConfigProvider を有効にする
    • externalConfiguration プロパティーを使用してファイルを指定します。

    外部プロパティーファイルを使用するための Kafka Connect 設定の例

    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
    シークレットが含まれるボリュームの名前。
    4
    シークレットの名前。
  2. リソースを作成または更新してプロバイダーを有効にします。

    oc apply -f <kafka_connect_configuration_file>
  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"
        #...

    プレースホルダー構造は、file:<path_and_file_name>:<property> です。FileConfigProvider は、マウントされたシークレットからデータベースのユーザー名とパスワードのプロパティー値を読み取り、抽出します。

9.15.5. ディレクトリー内の複数のファイルから設定値を読み込む

DirectoryConfigProvider を使用して、ディレクトリー内の複数のファイルから設定プロパティーを提供します。ファイルは config map またはシークレットにすることができます。

この手順では、シークレットによって、コネクターの TLS キーストアとトラストストアのユーザー認証情報が提供されます。認証情報は別のファイルにあります。シークレットは、Kafka Connect Pod にボリュームとしてマウントされます。ボリュームはパス /opt/kafka/external-configuration/<volume-name> にマウントされます。

前提条件

  • 稼働中の Kafka クラスター
  • Cluster Operator が稼働中である。
  • ユーザー認証情報を含むシークレットを持っている。

ユーザー認証情報を含むシークレットの例

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

my-user シークレットは、コネクターのキーストア認証情報 (user.crt および user.key) を提供します。

Kafka クラスターのデプロイ時に生成される <cluster_name>-cluster-ca-cert シークレットは、クラスター CA 証明書をトラストストア認証情報 (ca.crt) として提供します。

手順

  1. KafkaConnect リソースを設定します。

    • DirectoryConfigProvider を有効にする
    • externalConfiguration プロパティーを使用してファイルを指定します。

    外部プロパティーファイルを使用するための Kafka Connect 設定の例

    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

    1
    設定プロバイダーのエイリアスは、他の設定パラメーターを定義するために使用されます。
    2
    DirectoryConfigProvider はディレクトリー内のファイルからの値を提供します。プロバイダーパラメーターは config.providers からのエイリアスを使用し、config.providers.${alias}.class の形式を取ります。
    3
    シークレットを含むボリュームの名前。
    4
    トラストストア設定を提供するクラスター CA 証明書のシークレットの名前。
    5
    ユーザーがキーストア設定を指定するためのシークレットの名前。
  2. リソースを作成または更新してプロバイダーを有効にします。

    oc apply -f <kafka_connect_configuration_file>
  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}"
        #...

    プレースホルダー構造は directory:<path>:<file_name> です。DirectoryConfigProvider は、マウントされたシークレットから認証情報を読み取り、抽出します。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.