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

Kubernetes Configuration Provider プラグインを使用して、外部ソースから設定データを読み込みます。OpenShift シークレットまたは ConfigMap からデータをロードします。

Kafka namespace 外で管理される Secret、または Kafka クラスター外にある Secret があるとします。プロバイダーを使用すると、ファイルを抽出せずに設定の Secret の値を参照できます。使用する Secret をプロバイダーに伝え、アクセス権限を提供する必要があります。プロバイダーは、新しい Secret または ConfigMap を使用している場合でも、Kafka コンポーネントを再起動することなくデータをロードします。この機能により、Kafka Connect インスタンスが複数のコネクターをホストする場合に中断の発生を防ぎます。

プロバイダーは AMQ Streams とは独立して動作します。これを使用して、プロデューサーやコンシューマーを含む、すべての Kafka コンポーネントの設定データを読み込むことができます。たとえば、これを使用して、KafkaConnect コネクター設定のクレデンシャルを提供します。

この手順では、外部 ConfigMap はコネクターの設定プロパティーを提供します。

注記

OpenShift Configuration Provider はマウントされたファイルを使用できません。たとえば、トラストストアまたはキーストアの場所を必要とする値をロードできません。代わりに、ConfigMap またはシークレットを環境変数またはボリュームとして Kafka Connect Pod にマウントできます。KafkaConnect.specexternalConfiguration プロパティーを使用して設定を追加します。このアプローチでアクセス権限を設定する必要はありません。ただし、コネクターに新しい Secret または ConfigMap を使用する場合は、Kafka Connect の再起動が必要になります。これにより、すべての Kafka Connect インスタンスのコネクターが中断されます。

前提条件

  • OpenShift クラスターが利用できる必要があります。
  • Kafka クラスターが稼働している必要があります。
  • Cluster Operator が稼働している必要があります。

手順

  1. 設定プロパティーが含まれる ConfigMap またはシークレットを作成します。

    この例では、my-connector-configuration という名前の ConfigMap にはコネクタープロパティーが含まれます。

    コネクタープロパティーのある ConfigMap の例

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

  2. Kafka Connect 設定で OpenShift Configuration Provider を指定します。

    ここで示される仕様は、シークレットおよび ConfigMap からの値の読み込みをサポートできます。

    ConfigMap からの値に設定された外部ボリュームの例

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

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

    oc apply -f KAFKA-CONNECT-CONFIG-FILE
  4. 外部 ConfigMap の値へのアクセスを許可するロールを作成します。

    ConfigMap から値にアクセスするロールの例

    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 ConfigMap にアクセスするためのロールパーミッションを付与します。

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

    ConfigMap が含まれる 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名前空間へのアクセス許可を与えます。

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

  6. コネクター設定で ConfigMap を参照します。

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

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

    ConfigMap のプロパティー値のプレースホルダーは、コネクター設定で参照されます。プレースホルダー構造は、configmaps:PATH-AND-FILE-NAME:PROPERTY です。KubernetesConfigMapConfigProvider は、外部の ConfigMap から option1 プロパティの値を読み込んで抽出します。