Docker 化 Spring boot 应用程序以进行 Kubernetes 部署

2024-03-08

我有一个 Spring Boot 应用程序,在我的 application.properties 中具有如下一些属性。

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 世界中是未知的。

我有一个 docker 文件,如下所示。

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 中的卷挂载选项来放置 application.proerties。

如何在 application.properties 中为证书文件实现同样的效果?

在这里,cert 属性对于少数应用程序是可选的,而对于少数应用程序是必需的。

我需要在 docker 镜像中集成的选项,并将证书文件放在 docker 镜像之外。

方法一。在 docker 镜像内

从 application.properties 中删除属性“server.ssl.keyStore”并将其作为环境变量传递,如下所示。

CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location=文件:/conf/application.properties -Dlogging.config=/conf/logback.xml -Dserver.ssl.keyStore=/certs/appcert.jks

现在,证书应该保密,并使用 kubernetes 的卷安装选项。

方法2。无需在 docker 文件中包含 -Dserver.ssl.keyStore=/certs/appcert.jks,但仍从 application.properties 中删除属性“server.ssl.keyStore”并执行以下操作。

A。创造秘密

kubectl 创建秘密通用 svc-truststore-cert --from-file=./cacerts

b.创建一个环境变量,如下所示。

{ “名称”:“JAVA_OPTS”, “值”:“-Dserver.ssl.trustStore=/certs/truststore/cacerts” }

C。在容器下为 pod 创建 Volume 挂载。

“卷安装”:[ { “名称”:“信任库证书”, “挂载路径”:“/证书/信任库” } ]

d.根据规格创建一个卷。

{ “名称”:“信任库证书”, “秘密”: { "secretName": "svc-truststore-cert", “项目”: [ { “密钥”:“证书”, “路径”:“证书” } ] } }

方法3.

使用 Kubernetes 持久卷。

在 Kubernetes 上创建持久卷。

将卷挂载到每个微服务的 Pod(Pod 脚本文件中的更改)。可通过“/shared/folder/certs”路径访问已安装的文件系统。

CMD java -jar /opt/docker/svc/weather-service.war --spring.config.location=文件:/conf/application.properties -Dlogging.config=/conf/logback.xml -Dserver.ssl.keyStore=/certs/appcert.jks

我采取了第二种方法。它是否正确?还有其他更好的方法吗?

Thanks


是的,第二种方法是最好的方法,如果您要存储一些敏感数据(如证书、密钥等),这是唯一的方法。该主题包含在文档 https://kubernetes.io/docs/concepts/configuration/secret/#overview-of-secrets.

此外,您还可以encrypt https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/您的秘密,增加另一级保护。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 化 Spring boot 应用程序以进行 Kubernetes 部署 的相关文章

随机推荐

  • httpRuntime shutdownTimeout 和 IIS 设置

    我在 ASP Net 中遇到了一个问题 在任何 Web 应用程序配置 Web config 文件中 都有一个名为 httpRuntime 的部分 它有一个属性 shutdownTimeout 根据 MSDN 文档 该属性指定在 ASP Ne
  • 检测 Swing 中单击生成的 MouseEvent 上的 Shift 修饰符

    我正在使用 Java Swing 处理 GUI 应用程序中的一些 MouseEvent 从现在开始我正在分析 mousePressed 方法中的鼠标事件 只是为了确定是否 发生左键或右键单击 我的代码是 public void mouseP
  • React,未捕获的引用错误:ReactDOM 未定义

    我在做这个路由器教程 http www tutorialspoint com reactjs reactjs router htm 我的 App jsx 文件 import React from react import ReactDOM
  • int 和 char 数组有什么区别?

    下面 int 和 char 数组有什么区别 int main int numbers 2 1 3 char letter a b 0 cout lt lt numbers lt
  • C语言中的大整数?

    在 C 中处理大量数字的最简单方法是什么 我需要在区域中存储值1000 900 或者以更人类可读的形式10 2700 有谁知道一个简单的方法来做到这一点 任何帮助将不胜感激 Use libgmp http gmplib org GMP 是一
  • 从 ADO.NET 执行 T-Sql 视图

    是否可以从 C 代码执行视图 如果是的话我想知道参数化视图是否存在以及我应该如何使用它们 参数化意味着我们在存储过程中使用相同的参数来声明 where 条件 不执行视图 一个执行查询 如果查询从视图或表中选择行 ADO NET 不知道也不关
  • Ruby on Rails / Paperclip / AWS::S3::NoSuchBucket 错误

    我安装了回形针插件并能够在本地使用它 当我将其配置为与 amazon S3 一起使用时 我不断收到 NoSuchBucket 指定的存储桶不存在 错误 回形针文档指出 如果存储桶不存在 则会创建该存储桶 但很明显 我的情况出了问题 我首先安
  • Mysql中如何将数据合并到临时表中

    我有一张非常大的桌子 叫做paypal ipn orders 在这个表中 我有 2 个重要的信息 一行称为item name和一行称为sort num 我想使用某些参数从中提取记录paypal ipn orders并将它们放入一个名为的临时
  • MS Access SQL 中是否有与 SUBSTRING 函数等效的函数?

    我想在 MS Access 查询中执行类似的操作 但 SUBSTRING 是一个未定义的函数 SELECT DISTINCT SUBSTRING LastName 1 1 FROM Authors 您可以使用 VBA 字符串函数 正如 on
  • Django静态媒体不显示图片

    在寻找解决方案几个小时后未能解决我的问题后 我发布了此内容 我的媒体根目录中的图像没有显示在我的 html 上 在 chrome 的控制台中我得到一个404 file not found 尽管图像就在那里 我在 Pycharm 中使用 Py
  • Google 日历 feed timeMin timeMax 不起作用

    我从搜索中推断 限制日期范围的 Google 日历提要的 URI 应包括 timeMin 和 timeMax 还应包括 singleEvents 和 orderBy 这是我构建的 URI 无论我在投影值后放置什么查询参数 我仍然会获取从 8
  • 以编程方式使下载停靠栏图标弹起

    如何以编程方式使 Dock 下载 图标弹起 请注意 我不希望我的应用程序图标弹起 而只希望下载图标弹起 特别是 我正在将文件从我的应用程序下载到 下载 文件夹 这没问题 但我希望下载图标在下载完成时弹起 就像 Safari 完成下载时发生的
  • 通过右值引用返回是否更有效?

    例如 Beta ab Beta toAB const return move Beta ab 1 1 Beta ab Beta toAB const return move Beta ab 1 1 这会返回一个悬空引用 就像左值引用的情况一
  • 多个鼠标/鼠标/光标?

    如何为多个鼠标显示另一个光标 我有两个 TMemo 两个可以输入各自 TMemo 的键盘 2 个鼠标 我需要 2 个光标 如果假设的话 我已经可以检测出哪只老鼠是哪只 我怎样才能让我自己的光标跟着它一起走 使用德尔福 可能沿着多点 http
  • 使用 bootstrap-datepicker 禁用日期范围?

    如何禁用多个日期范围 使用bootstrap datepicker 目前 这是我关于如何专门禁用日期的代码 div class input group input daterange div
  • Linux shell 编程字符串比较语法

    有什么区别 and 在Linux shell编程中比较字符串 也许下面的代码可以工作 if NAME user then echo your name is user fi 但我认为这不是正确的语法 它将用于比较字符串 陈述 什么是正确的
  • webpack --env.product 和 --mode="product" 之间有什么区别

    如果我错了 请纠正我 但据我从文档中了解到 env option https webpack js org guides environment variables 用来ONLY为了能够在webpack config js如果它导出一个函数
  • 插入表视图并添加按钮或空行时最好的是什么?

    当呈现一个简单的表格视图 或者我想甚至是列表视图 时 您输入新数据的首选方法是什么 With add delete buttons like this Or with a blank line indicating a new record
  • UIAlertViewDelegate 方法 didDismissWithButtonIndex 在手机睡眠/锁定时被调用

    我有一个 UIAlertView 它的 didDismissWithButtonIndex 委托方法调用会弹出视图控制器 同一类 它是 AlertView 委托和视图控制器 以使用户返回到上一个屏幕 问题是 当您在 警报显示 之前锁定手机时
  • Docker 化 Spring boot 应用程序以进行 Kubernetes 部署

    我有一个 Spring Boot 应用程序 在我的 application properties 中具有如下一些属性 server ssl keyStore users admin certs appcert jks server ssl