Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes秘密和spring引导配置_Spring_Spring Boot_Kubernetes_Kubernetes Security_Kubernetes Secrets - Fatal编程技术网

Kubernetes秘密和spring引导配置

Kubernetes秘密和spring引导配置,spring,spring-boot,kubernetes,kubernetes-security,kubernetes-secrets,Spring,Spring Boot,Kubernetes,Kubernetes Security,Kubernetes Secrets,我们的服务正在kubernetes集群中运行。 我正试图使我们的服务受到SSL的保护 为此,我在application.properties中添加了以下内容: security.require-ssl=true server.ssl.key-store-type=JKS server.ssl.key-store=serviceCertificates.jks server.ssl.key-store-password=${KEYSTORE_PASSWORD} server.ssl.key-al

我们的服务正在kubernetes集群中运行。 我正试图使我们的服务受到SSL的保护

为此,我在application.properties中添加了以下内容:

security.require-ssl=true 
server.ssl.key-store-type=JKS
server.ssl.key-store=serviceCertificates.jks
server.ssl.key-store-password=${KEYSTORE_PASSWORD}
server.ssl.key-alias=certificate
我想从集群中定义的kubernetes secret获取的密钥库密码。
当服务开始运行时,我收到一个错误
密码验证失败

“org.apache.catalina.LifecycleException:无法启动组件[Connector[HTTP/1.1-8080]\n\t org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)\n\t org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)\n\tat org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviouslyRemovedConnectors(TomcatWebServer.java:256)\n\tat org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:198)\n\tat org.springframework.boot.web.servlet.context.servletwebserverapplicationtext.startWebServer(ServletWebServerApplicationContext.java:300)\n\t org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)\n\t org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)\n\tat org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)\n\tat org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)\n\tat org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:327)\n\tat org.springframework.boot.SpringApplication.run(SpringApplication.java:1243)\n\tat com.ibm.securityservices.cryptoutils.Application.main(Application.java:9)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)\n\tat sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\n\tat sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.lang.reflect.Method.invoke(Method.java:498)\n\tat org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)\n\tat org.springframework.boot.loader.Launcher.Launcher(Launcher.java:87)\n\tat org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)\nCauseby:org.apache.catalina.LifecycleException:协议处理程序启动失败\n\tat org.apache.catalina.connector.connector.startInternal(connector.java:1020)\n\tat org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)\n\t…省略了21个公共帧\n原因:java.lang.IllegalArgumentException:密钥库被篡改,或密码不正确\n\t org.apache.tomcat.util.net.AbstractJsseEndpoint.CreateSLContext(AbstractJsseEndpoint.java:116)\n\t org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:87)\n\tat org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)\n\tat org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1150)\n\tat org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:591)\n\tat org.apache.catalina.connector.connector.startInternal(connector.java:1018)\n\t…22个公共帧被忽略\n原因是:java.io.IOException:Keystore被篡改或密码不正确\n\t sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:780)\n\t sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56)\n\t sun.security.provider.keysterelegator.engineLoad(KeyStoreDelegator.java:224)\n\tat sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70)\n\tat java.security.KeyStore.load(KeyStore.java:1445)\n\tat org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:139)\n\tat org.apache.tomcat.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:204)\n\tat org.apache.tomcat.util.net.jsse.JSSEUtil.getKeyManagers(JSSEUtil.java:184)\n\tat org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:114)\n\t…省略了27个公共帧\n原因:java.security.UnrecoverableKeyException:密码验证失败\n\t sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:778)\n\t…省略了35个公共帧\n“}

我的调查:
1.如果我打印代码

    System.out.println("KEYSTORE_PASSWORD: "+ System.getenv("KEYSTORE_PASSWORD"));   
我看到了它的正确值。
2.若我在应用程序属性中设置了硬编码的常量密码值,那个么它就工作了,服务就启动并运行了

因此,我想问题在于将secret值设置为application属性。

您的帮助和建议将不胜感激。

我认为您的机密描述符中存在键入错误或隐藏字符。您可以执行pod,验证系统属性,还可以尝试使用命令行工具解密密码。

谢谢您的回答。我多次检查了机密名称,并按图所示打印了它。机密名称和值是正确的。如果机密名称错误,我将得到一个错误
无法将“server.ssl.key store password”下的属性绑定到java.lang.String
。我尝试了。您可以在交互模式下进入pod(希望您使用的图像具有shell)并查看系统属性(printenv)吗并验证该值。您是对的!我发现该机密包含结尾处带有\n的密码。我用引号打印了密码,并看到:`KEYSTORE\u password:123456`(下一行引号)谢谢!