Kubernetes在pod

时间:2018-04-08 22:37:03

标签: kubernetes

我有一个春季启动应用图片,需要以下属性。

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"
              }

仍然是错误。

不确定什么是正确的方法。

1 个答案:

答案 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

它应该可以工作,但只需修复路径