我的application.properties中有一个Spring Boot应用程序,其中包含一些属性。
server.ssl.keyStore=/users/admin/certs/appcert.jks
server.ssl.keyStorePassword=certpwd
server.ssl.trustStore=/users/admin/certs/cacerts
server.ssl.trustStorePassword=trustpwd
此处证书路径硬编码到某个路径。但是,我不想硬编码,因为在Mesos或Kubernetes世界中不会知道这条路径。
我有一个泊坞文件如下。
FROM docker.com/base/jdk1.8:latest
MAINTAINER Application Engineering [ https://docker.com/ ]
RUN mkdir -p /opt/docker/svc
COPY application/weather-service.war /opt/docker/svc/
CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location=file:/conf/application.properties -Dlogging.config=/conf/logback.xml
在这里,我可以在kubernetes中使用volume mount选项,以便放置application.proerties。
如何在application.properties中为cert文件实现相同的功能?
此处,证书道具对于少数应用程序是可选的,对于少数应用程序是强制性的。
我需要选择在docker镜像中集成并将证书文件放在docker镜像之外。
方法1 。在泊坞窗图像中
删除属性" server.ssl.keyStore"来自application.properties并将其作为环境变量传递,如下所示。
CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location = file:/conf/application.properties -Dlogging.config = / conf / logback.xml -Dserver.ssl.keyStore = / certs / appcert.jks
现在,证书应该放在秘密中,并使用kubernetes的卷挂载选项。
方法2 。无需在docker文件中使用-Dserver.ssl.keyStore = / certs / appcert.jks,但仍然删除属性" server.ssl.keyStore"来自application.properties并执行以下操作。
一个。创建秘密
kubectl创建秘密通用svc-truststore-cert --from文件=。/ cacerts中
湾创建一个env变量,如下所示。
{ " name":" JAVA_OPTS", "价值":" -Dserver.ssl.trustStore = / certs / truststore / cacerts" }
℃。在pod的容器下创建卷安装。
" volumeMounts":[ { " name":" truststore-cert", " mountPath":" / certs / truststore" } ]
d。在规范下创建一个卷。
{ " name":" truststore-cert", "秘密":{ " secretName":" svc-truststore-cert", "项目":[ { " key":" cacerts", "路径":" cacerts" } ] } }
方法3 。
使用Kubernetes Persistent Volume。
在Kubernetes上创建了一个持久的卷。
将卷安装到每个微服务的Pod中(pod脚本文件中的更改)。可通过 - ' / shared / folder / certs'访问的挂载文件系统路径。
CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location = file:/conf/application.properties -Dlogging.config = / conf / logback.xml -Dserver.ssl.keyStore = / certs / appcert.jks
我采取了第二种方法。它是否正确?还有其他更好的方法吗?
由于
答案 0 :(得分:0)
是的,第二种方法是最好的方法,如果您要存储一些敏感数据,如证书,密钥等,这是唯一的方法。documentation中涵盖了该主题。
此外,您可以encrypt保密,以增加其他级别的保护。