2.9. 从外部源加载配置值
使用 Kubernetes Configuration Provider 插件,从外部来源加载配置数据。从 OpenShift 机密或 ConfigMap 加载数据。
假设您在 Kafka 命名空间外或 Kafka 集群外管理的 Secret。提供程序允许您在配置中引用 Secret 的值,而无需提取文件。您只需告诉提供商要使用的 Secret 并提供访问权限。供应商会在不需要重启 Kafka 组件的情况下加载数据,即使使用新的 Secret 或 ConfigMap 时也是如此。当 Kafka Connect 实例托管多个连接器时,此功能可避免中断。
该供应商独立于 AMQ Streams 运行。您可以使用它来加载所有 Kafka 组件的配置数据,包括生产者和使用者。例如,使用它来提供 Kafka Connect 连接器配置的凭据。
在这一流程中,外部 ConfigMap 为连接器提供配置属性。
OpenShift 配置提供程序无法使用挂载的文件。例如,它无法加载需要信任存储或密钥存储位置的值。相反,您可以将 ConfigMap 或 Secret 挂载到 Kafka Connect pod 中,作为环境变量或卷。您可以使用 KafkaConnect.spec
中的 externalConfiguration
属性 添加配置。您无需通过这种方法设置访问权限。但是,当使用新 Secret 或 ConfigMap 作为连接器时,Kafka Connect 需要重启。这会导致所有 Kafka Connect 实例的连接器中断。
先决条件
- 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 配置提供程序。
此处显示的规格可支持从 Secret 和 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 的命名空间。
用于访问包含 ConfigMap 的命名空间的角色绑定示例
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 属性值。