我有一个春季启动应用图片,需要以下属性。
server.ssl.keyStore = /证书/ keystore.jks
我使用bewloe命令将密钥库文件加载到秘密。
kubectl创建秘密通用ssl-keystore-cert --from-file =。/ server-ssl.jks
我在deployment.yaml
中使用以下秘密引用 {
"name": "SERVER_SSL_KEYSTORE",
"valueFrom": {
"secretKeyRef": {
"name": "ssl-keystore-cert",
"key": "server-ssl.jks"
}
}
}
根据上述参考,我收到以下错误。
错误:无法启动容器“app-service”:错误响应来自 守护进程:oci运行时错误:container_linux.go:265:启动容器 进程导致“process_linux.go:368:容器init导致”setenv: 无效参数\“”退回重启失败的容器
如果我使用音量安装选项,
"spec": {
"volumes": [
{
"name": "keystore-cert",
"secret": {
"secretName": "ssl-keystore-cert",
"items": [
{
"key": "server-ssl.jks",
"path": "keycerts"
}
]
}
}
],
"containers": [
{
"env": [
{
"name": "JAVA_OPTS",
"value": "-Dserver.ssl.keyStore=/certs/keystore/keycerts"
}
],
"name": "app-service",
"ports": [
{
"containerPort": 8080,
"protocol": "TCP"
}
],
"volumeMounts": [
{
"name": "keystore-cert",
"mountPath": "/certs/keystore"
}
],
"imagePullPolicy": "IfNotPresent"
}
]
我使用上述方法得到以下错误。
引起:java.lang.IllegalArgumentException:资源位置必须 不要为空 org.springframework.util.Assert.notNull(Assert.java:134) 〜[spring-core-4.3.7.RELEASE.jar!/:4.3.7.RELEASE] at org.springframework.util.ResourceUtils.getURL(ResourceUtils.java:131) 〜[spring-core-4.3.7.RELEASE.jar!/:4.3.7.RELEASE] at org.springframework.boot.context.embedded.jetty.JettyEmbeddedServletContainerFactory.configureSslKeyStore(JettyEmbeddedServletContainerFactory.java:301) 〜[弹簧引导1.4.5.RELEASE.jar /:1.4.5.RELEASE]
我也尝试使用以下选项,而不是JAVA_OPTS,
{
"name": "SERVER_SSL_KEYSTORE",
"value": "/certs/keystore/keycerts"
}
仍然是错误。
不确定什么是正确的方法。
答案 0 :(得分:2)
我尝试用你的配置重复这种情况。我创建了一个秘密使用命令:
kubectl create secret generic ssl-keystore-cert --from-file=./server-ssl.jks
我将此YAML用作测试环境:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- image: busybox
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
name: busybox
env:
- name: JAVA_OPTS
value: "-Dserver.ssl.keyStore=/certs/keystore/server-ssl.jks"
ports:
- containerPort: 8080
protocol: TCP
volumeMounts:
- name: secret-volume
readOnly: true
mountPath: "/cert/keystore"
volumes:
- name: secret-volume
secret:
secretName: ssl-keystore-cert
如您所见,我在变量中使用了“server-ssl.jks”文件名。如果您从文件中创建密钥,Kubernetes会将此文件存储在密码中。当您将此秘密安装到任何地方时,您只需存储该文件。您尝试使用/certs/keystore/keycerts
但它不存在,您可以在日志中看到:
org.springframework.util.Assert.notNull
的资源位置不能为空
因为您安装的密码在/certs/keystore/keycerts/server-ssl.jks
它应该可以工作,但只需修复路径