【问题标题】:Spring boot application into Kubernetes将 Spring Boot 应用程序导入 Kubernetes
【发布时间】:2018-09-07 18:48:00
【问题描述】:

我有一个 Spring Boot 应用程序,它配置了 https 并具有以下属性。

server.ssl.keyStore=/users/admin/certs/appcert.jks
server.ssl.keyStorePassword=certpwd
server.ssl.trustStore=/users/admin/certs/trustcert
server.ssl.trustStorePassword=trustpwd

这些应用程序在 VM 中运行,并且证书被放置在定义的路径中。现在,尝试将此应用程序部署到 Kubernetes 中,但不知道如何实现。

我已经在 configMap 中为 application.properties 创建了挂载。 在我的 dockerFile 中,

--spring.config.location=file:/conf/application.properties

在 deployments.yaml 中,如下所示。

"spec": {
    "volumes": [
      {
        "name": "app-prop",
        "configMap": {
          "name": "app-config",
          "items": [
            {
              "key": "application.properties",
              "path": "application.properties"
            }
          ]
        }
      }
    ],
    "containers": [
      {
        "name": "app-service",
        "image": "docker.com/app-service",
        "volumeMounts": [
          {
            "name": "app-prop",
            "mountPath": "/conf"
          }
        ],
        "imagePullPolicy": "IfNotPresent"
      }
    ],

属性 server.ssl.keyStore 在 application.properties 中。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    由于这些密钥库受密码保护,可以说您可以将它们捆绑到 docker 映像中并相对于映像的根目录引用它们,然后通过从 Secrets 设置的环境变量注入密码:

    apiVersion: v1
    kind: Secret
    metadata:
      name: spring-ssl
    data:
      keyPass: bAsE64TxT
    ---
    kind: Pod
    # etc
    containers:
    - env:
      - name: SERVER_SSL_KEY_STORE_PASSWORD
        valueFrom:
          secretKeyRef:
            key: spring-ssl
            name: keyPass
    

    Spring Boot 将获取那些格式正确的环境变量并将它们应用到任何其他配置值之上,从而产生(希望)正确的分配,而无需在任何容易访问的地方硬编码密码

    但是,如果您更愿意将 jks 排除在 docker 映像之外,那么可以随意将 jks 存放在同一个 Secret 中,甚至可以单独存放在一个 volumeMount jks 中地点

    【讨论】:

    • 很好,但传统上 ConfigMap 和朋友是用于您不希望受 RBAC 角色保护的值,而 Secrets 是您实际上只需要少量 ClusterRole 的值s 能够阅读——但是是的,没有什么技术上阻止你把所有东西都放在ConfigMap
    • 我猜,在将 jks 存储在 Secret 之后,上面的示例也可以用于 jks。为什么我们还需要volumeMount?任何示例请...
    • 为什么我们还需要volumeMount 正如我提到的,我实际上不会为安装jks而烦恼,因为它已经受到密码保护;我只是将它们存储在 docker 映像中。在工作中,我们将所有配置 yamls 放在 docker 镜像中,然后通过环境仅注入秘密或覆盖的值
    • 知道了。因此,如果我将 jks 文件添加到 Secrets 数据中并且可以如上所述使用,则不需要挂载选项。
    • 如果我将 jks 文件添加到 Secrets 中,我不需要挂载选项,不,这与我所说的 100% 相反
    猜你喜欢
    • 2017-04-20
    • 2017-03-15
    • 2019-07-20
    • 2020-04-07
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    相关资源
    最近更新 更多