第3章 外部ソースからの設定値の読み込み
設定プロバイダープラグインを使用して、外部ソースから設定データを読み込みます。プロバイダーは AMQ Streams とは独立して動作します。これを使用して、プロデューサーやコンシューマーを含む、すべての Kafka コンポーネントの設定データを読み込むことができます。たとえば、これを使用して、KafkaConnect コネクター設定のクレデンシャルを提供します。
- OpenShift 設定プロバイダー
OpenShift Configuration Provider プラグインは、OpenShift シークレットまたは ConfigMap から設定データを読み込みます。
Kafka namespace 外で管理される
Secret
オブジェクト、または Kafka クラスター外にあるシークレットがあるとします。OpenShift 設定プロバイダーを使用すると、ファイルを抽出せずに設定のシークレットの値を参照できます。使用するシークレットをプロバイダーに伝え、アクセス権限を提供する必要があります。プロバイダーは、新しいSecret
またはConfigMap
を使用している場合でも、Kafka コンポーネントを再起動することなくデータをロードします。この機能により、Kafka Connect インスタンスが複数のコネクターをホストする場合に中断の発生を防ぎます。- 環境変数設定プロバイダー
環境変数の設定プロバイダープラグインを使用して、環境変数から設定データを読み込みます。
環境変数の値は、シークレットまたは ConfigMap からマッピングできます。環境変数設定プロバイダーを使用して、たとえば、OpenShift シークレットからマップされた環境変数から証明書または JAAS 設定を読み込むことができます。
OpenShift Configuration Provider はマウントされたファイルを使用できません。たとえば、トラストストアまたはキーストアの場所を必要とする値をロードできません。代わりに、ConfigMap またはシークレットを環境変数またはボリュームとして Kafka Connect Pod にマウントできます。環境変数設定プロバイダーを使用して、環境変数の値を読み込むことができます。KafkaConnect.spec
の externalConfiguration
プロパティー を使用して設定を追加します。このアプローチでアクセス権限を設定する必要はありません。ただし、コネクターに新しい Secret
または ConfigMap
を使用する場合は、Kafka Connect の再起動が必要になります。これにより、すべての Kafka Connect インスタンスのコネクターが中断されます。
3.1. ConfigMap からの設定値の読み込み
この手順では、OpenShift 設定プロバイダープラグインを使用する方法を説明します。
この手順では、外部 ConfigMap
はコネクターの設定プロパティーを提供します。
前提条件
- 利用可能な OpenShift クラスター
- 稼働中の Kafka クラスター
- Cluster Operator が稼働中です。
手順
設定プロパティーが含まれる
ConfigMap
またはシークレット
を作成します。この例では、
my-connector-configuration
という名前のConfigMap
にはコネクタープロパティーが含まれます。コネクタープロパティーのある
ConfigMap
の例apiVersion: v1 kind: ConfigMap metadata: name: my-connector-configuration data: option1: value1 option2: value2
Kafka Connect 設定で OpenShift Configuration Provider を指定します。
ここで示される仕様は、シークレットおよび ConfigMap からの値の読み込みをサポートできます。
OpenShift 設定プロバイダーを有効にする 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.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider 2 config.providers.configmaps.class: io.strimzi.kafka.KubernetesConfigMapConfigProvider 3 # ...
リソースを作成または更新してプロバイダーを有効にします。
oc apply -f <kafka_connect_configuration_file>
外部の設定マップの値へのアクセスを許可するロールを作成します。
設定マップから値にアクセスするロールの例
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
設定マップにアクセスするためのロールパーミッションを付与します。ロールバインディングを作成し、設定マップが含まれる namespace へのアクセスを許可します。
設定マップが含まれる 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_name> は
KafkaConnect
のカスタムリソースの名前です。コネクター設定で設定マップを参照します。
設定マップを参照するコネクター設定の例
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 プロパティーの値を読み込んで抽出します。