【问题标题】:deploying Spring Boot Rest Service with https enabled, in kubernetes在 kubernetes 中部署启用 https 的 Spring Boot Rest 服务
【发布时间】:2018-12-28 01:10:22
【问题描述】:

我开发了一个基于 Spring Boot 的 REST API 服务,并通过使用自签名证书密钥库(在本地测试)在其上启用了 https,它运行良好。

server.ssl.key-store=classpath:certs/keystore.jks
server.ssl.key-store-password=keystore
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

现在,我想打包一个 docker 镜像并将该服务部署在 Kubernetes 集群中。我知道我可以将服务公开为 NodePort 并从外部访问它。

我想知道的是,我怀疑我在本地机器上生成的自签名证书在部署到 kubernetes 集群时是否可以工作。我研究并找到了一些使用 kubernetes 入口、kubernetes 机密等的解决方案。我很困惑什么是最好的方法,这样我就可以通过 https 访问在 kubernetes 中运行的服务。我需要对我的 REST API 代码进行哪些更改?

更新说明:虽然我已将自签名证书用于测试目的,但我可以从我的公司获得 CA 签名证书并将其用于生产。我的问题更多的是,对于已经使用基于 SSL/TLS 的连接的 REST API 服务,在 kubernetes 集群中部署和访问证书的更好方法是什么,例如:在应用程序本身中打包,使用秘密,或废弃应用程序的 SSL 配置并改用 Ingres 等。希望我的问题有意义:)

感谢您的任何建议。

【问题讨论】:

  • 你试过letsencrypt.org 吗?
  • 是的,我已经调查过了。但是,我的公司有自己的 CA。我的问题更多的是,如果我有一个签名的证书,我应该如何在证书的上下文中部署和访问 kubernetes 中现有的 https REST 服务。

标签: docker spring-boot kubernetes


【解决方案1】:

这取决于您想要公开服务的方式。基本上,您有一个入口、一个外部负载均衡器(仅在某些可用的云环境中)或一个路由到端口(通过 NodePort 或 HostPort)的服务作为选项。

注意:我们的 K8S 集群是自托管的,因此我没有关于 K8S 中外部负载均衡器的可靠信息,因此将省略该选项。

如果您想在端口 80(例如https://app.myorg.org)上的某个域后面直接公开您的服务,您将需要使用 ingress。但是,如果您不需要它并且您可以使用特定端口,那么 NodePort 方法应该可以解决问题(例如https://one.ofyourcluster.servers:30000/)。

假设您想尝试入口方法,而不是需要将证书添加到 K8S 中的入口定义而不是 Spring Boot 应用程序,或者您必须另外指定该服务可通过入口中的 https 本身访问。执行此操作的方式可能因入口控制器而异。

对于 NodePort/HostPort,您只需在应用程序中启用 SSL。

尽管您还需要有效的证书,例如由https://letsencrypt.org/发布 实际上,对于 K8S,如果您使用入口,有些项目可以自动为您获取 letencrypt 证书。 (例如https://github.com/jetstack/cert-manager/

【讨论】:

  • 感谢您的回复。我认为我的团队采用 NodePort 方法。我们还获得了公司证书颁发机构颁发的签名证书。现在,将证书与应用程序打包并部署到 kubernetes 是要走的路吗?或安装为 Secrets 文件并指向应用程序以更好的方式访问它?如果可能的话,我想对这些选项或任何其他选项发表意见。此外,如果它是秘密方式,如果您可以分享有关如何进行此操作的链接或教程,将会很有帮助。谢谢!
  • 您始终可以将证书与应用程序打包在一起,但这意味着您必须跟踪证书是否有效,并且如果您需要更新证书,则必须重新部署应用程序。另一种方法是在以这种方式访问​​它们的容器中安装一个包含证书作为卷的 k8s 机密(例如,如此处所述kubernetes.io/docs/concepts/configuration/secret)。这使得秘密可以作为容器中的文件访问。
猜你喜欢
  • 2016-12-13
  • 2018-06-10
  • 2020-01-16
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2019-08-24
相关资源
最近更新 更多