我正在使用 Kubernetes 在 MongoDB 上使用Java Springboot 。目前,我只是在应用程序属性中对URI进行了硬编码,我想知道
如何使用Java访问Kubernetes上的MongoDB凭据?
将凭据传递到Kubernetes容器的推荐方法是使用secrets并将其作为环境变量或卷公开给应用程序。上面的链接详细描述了每种方法的工作原理。
,如果我正确理解了这个问题,那就是专门关于在Kubernetes上运行的Java Spring Boot应用程序。
我几乎没有选择...在Kubernetes上运行时有些选项不是那么安全或专有,但在这里仍然提到:
环境变量,其值在deployment/pod configuration中。有权访问配置的每个人都可以看到它们。
使用${<env-var>}
/ ${<end-var>:<default-value>}
访问Spring Boot的application.properties/.yaml
文件中的环境变量。例如,如果DB_USERNAME
和DB_PASSWORD
是两个这样的环境变量:
spring.data.mongodb.username = ${DB_USERNAME}
spring.data.mongodb.password = ${DB_PASSWORD}
...或
spring.data.mongodb.uri = mongodb://${DB_USERNAME}:${DB_PASSWORD}@<host>:<port>/<dbname>
无论应用程序使用spring.data.mongodb.*
属性还是将自定义名称的属性注入带有@Configuration
的{{1}}类中的自定义名称,此方法都将起作用。
基于在容器中启动Java应用程序的方式,可以在部署/吊舱配置中定义startup arguments,类似于上面的要点。
环境变量,其值从secret(s)填充。如上所述,从SpringBoot访问环境变量。
Secrets as files-这些秘密将“出现”在动态添加到容器中某个位置/目录的文件中;它将需要您定义自己的@Value
类,该类使用@Configuration
从文件中加载用户名和密码。
整个@PropertySource
可以放在ConfigMap中。请注意,这些属性将采用明文形式。然后使用populate a Volume和ConfigMap,以便将application.properties
添加到容器中的某个位置/目录。 Point使用application.properties
作为环境启动到该位置。 var,系统属性或 program 参数。
其他一些外部保管库类型的安全存储-init container可以获取db凭据,并使它们可用于Java应用程序,该文件位于同一容器中共享卷上的文件中。
Spring Cloud Config ...即使您不太可能希望将db凭据放入服务器存储后端的默认实现-git中。