第 3 章 从外部来源加载配置值
使用配置提供程序插件从外部来源加载配置数据。供应商独立于 AMQ Streams 进行操作。您可以使用它们来加载所有 Kafka 组件的配置数据,包括生成者和消费者。例如,使用它们为 Kafka Connect 连接器配置提供凭证。
- OpenShift 配置提供程序
OpenShift Configuration Provider 插件从 OpenShift 机密或 ConfigMap 加载配置数据。
假设您在 Kafka 命名空间或 Kafka 集群外部管理的
Secret对象。OpenShift 配置提供程序允许您在配置中引用 secret 的值,而无需提取文件。您只需告诉供应商要使用哪些 secret 并提供访问权限。供应商在不需要重启 Kafka 组件的情况下加载数据,即使使用新的Secret或ConfigMap对象。当 Kafka Connect 实例托管多个连接器时,此功能可以避免中断。- 环境变量配置提供程序
Environment Variables Configuration Provider 插件从环境变量加载配置数据。
环境变量的值可以从 secret 或 ConfigMap 中映射。您可以使用 Environment Variables Configuration Provider,例如从 OpenShift 机密映射的环境变量加载证书或 JAAS 配置。
OpenShift 配置提供程序无法使用挂载的文件。例如,它无法加载需要信任存储或密钥存储的位置。相反,您可以将 ConfigMap 或 secret 挂载到 Kafka Connect pod 中,作为环境变量或卷。您可以使用 Environment Variables Configuration Provider 来加载环境变量的值。您可以使用 KafkaConnect.spec 中的 externalConfiguration 属性添加配置。您不需要使用此方法设置访问权限。但是,当为连接器使用新的 Secret 或 ConfigMap 时,Kafka Connect 将需要重启。这会导致所有 Kafka Connect 实例连接器中断。
3.1. 从 ConfigMap 加载配置值 复制链接链接已复制到粘贴板!
此流程演示了如何使用 OpenShift 配置提供程序插件。
在此过程中,外部 ConfigMap 对象为连接器提供配置属性。
先决条件
- 一个 OpenShift 集群可用。
- Kafka 集群正在运行。
- Cluster Operator 正在运行。
流程
创建包含配置属性的
ConfigMap或Secret。在本例中,名为
my-connector-configuration的ConfigMap对象包含连接器属性:带有连接器属性的
ConfigMap示例apiVersion: v1 kind: ConfigMap metadata: name: my-connector-configuration data: option1: value1 option2: value2在 Kafka Connect 配置中指定 OpenShift Configuration Provider。
此处所示的规格支持从 secret 和 ConfigMap 中加载值。
启用 OpenShift 配置供应商的 Kafka 连接配置示例
apiVersion: kafka.strimzi.io/v1beta2 kind: KafkaConnect metadata: name: my-connect annotations: strimzi.io/use-connector-resources: "true" spec: # ... config: # ... config.providers: secrets,configmaps1 config.providers.secrets.class: io.strimzi.kafka.KubernetesSecretConfigProvider2 config.providers.configmaps.class: io.strimzi.kafka.KubernetesConfigMapConfigProvider3 # ...创建或更新资源以启用该提供程序。
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配置映射的权限。创建角色绑定,以允许访问包含配置映射的命名空间。
访问包含配置映射的命名空间的角色绑定示例
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> : & lt;property>。KubernetesConfigMapConfigProvider从外部配置映射读取并提取 option1 属性值。