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.spec
の externalConfiguration
プロパティーを使用して設定を追加します。このアプローチでアクセス権限を設定する必要はありません。ただし、コネクターに新しい Secret または ConfigMap を使用する場合は、Kafka Connect の再起動が必要になります。これにより、すべての Kafka Connect インスタンスのコネクターが中断されます。
前提条件
- 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 からの値の読み込みをサポートできます。
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 # ...
リソースを作成または更新してプロバイダーを有効にします。
oc apply -f KAFKA-CONNECT-CONFIG-FILE
外部 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 にアクセスするためのロールパーミッションを付与します。ロールバインディングを作成し、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_NAME は
KafkaConnect
のカスタムリソースの名前です。コネクター設定で 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 プロパティの値を読み込んで抽出します。