83.8. 在 Kubernetes 中使用 secret 属性功能
camel-kubernetes 组件包括以下与 secret 相关的功能:
-
secret- 从 Kubernetes Secret 中查找字符串属性的功能。 -
secret-binary- 从 Kubernetes Secret 中查找二进制属性的功能。
Camel 从 Kubernetes API 服务器读取 Secret。在集群中启用 RBAC 时,用于运行应用程序的 ServiceAccount 需要具有针对此类访问的正确权限。
在 Kubernetes 属性占位符功能之前,需要使用它们配置(或两者)
- path - 必须挂载到正在运行的 pod 的挂载路径,以便从本地磁盘加载 configmap 或 secret。
-
Kubernetes 客户端 - 自动线.用于连接到 Kubernetes API 服务器的
io.fabric8.kubernetes.client.KubernetesClient实例。
Camel 首先使用要查找的挂载路径(如果已配置),然后回退到使用 KubernetesClient。
例如,名为 mydb 的 secret 可以包含用于连接数据库的用户名和密码,例如:
myhost = killroy
myport = 5555
myuser = scott
mypass = tiger
这在 Camel 中使用,如示例 Postrgres Sink Kamelet 所示:
<camelContext>
<route>
<from uri="direct:rome"/>
<setBody>
<constant>{ "username":"oscerd", "city":"Rome"}</constant>
</setBody>
<to uri="kamelet:postgresql-sink?serverName={{secret:mydb/myhost}}
&serverPort={{secret:mydb/myport}}
&username={{secret:mydb/myuser}}
&password={{secret:mydb/mypass}}
&databaseName=cities
&query=INSERT INTO accounts (username,city) VALUES (:#username,:#city)"/>
</route>
</camelContext>
postgres-sink Kamelet 也可以在 application.properties 中配置,这可减少上述路由中的配置:
camel.component.kamelet.postgresql-sink.databaseName={{secret:mydb/myhost}}
camel.component.kamelet.postgresql-sink.serverPort={{secret:mydb/myport}}
camel.component.kamelet.postgresql-sink.username={{secret:mydb/myuser}}
camel.component.kamelet.postgresql-sink.password={{secret:mydb/mypass}}
这减少了到以下的路由:
<camelContext>
<route>
<from uri="direct:rome"/>
<setBody>
<constant>{ "username":"oscerd", "city":"Rome"}</constant>
</setBody>
<to uri="kamelet:postgresql-sink?databaseName=cities
&query=INSERT INTO accounts (username,city) VALUES (:#username,:#city)"/>
</route>
</camelContext>