【问题标题】:How to provide mutual TLS (mTLS) with Spring application in Kubernetes?如何在 Kubernetes 中为 Spring 应用程序提供双向 TLS(mTLS)?
【发布时间】:2022-02-01 17:21:56
【问题描述】:

我有一个有趣的问题,也许你可以帮帮我。

两个 spring 应用程序,分别称为 app1 和 app2。这两个服务都发生了大量的 REST 调用。我需要实现一个安全解决方案,它们都可以在 REST 上相互通信,但它受 mutual TLS 保护(mTLS,其中两个应用程序都有自己的证书其他)

以标准方式实现它并不难,Spring 有解决方案(使用密钥库等),但问题是,我必须在 Kubernetes 环境中创建它。 这两个应用程序不在同一个集群中,因此 app1 在我们的集群中,但 app2 部署在我们合作伙伴的系统之一中。
我对 k8s 很陌生,不确定实现这一目标的最佳方法是什么。我应该将证书或密钥库存储为秘密吗?以某种方式使用和配置 nginx 入口,也许 Istio 会有用?我真的很想找到最佳解决方案,但我不知道正确的方法。 我真的很想在我的应用程序之外配置它并让 k8s 处理它,但我不确定这是否是正确的做法。

我们将不胜感激任何帮助,一些寻找正确道路的指导或某种现实生活中的例子。
感谢您的帮助!

【问题讨论】:

  • 您是说这些服务上已经配置了 mTLS 还是要求之一?
  • @suren 我们正试图找出应该是什么方式。这是一个 poc,遗憾的是没有配置任何东西。 :(
  • 如果您仍处于 PoC 阶段,请注意有几种方法可以实现您想要的。例如,Istio 将是一种有效的方式。您可以在 ServiceEntry 中拥有其他服务,启用 mTLS 即可。您甚至不必管理此特定场景的秘密,因为它是自动的。但还有其他方法。即使使用 Istio,也有其他方法。如果您使用任何云提供商,您可能也有一些托管服务。

标签: spring ssl kubernetes spring-security kubernetes-ingress


【解决方案1】:

Mikolaj 可能已经涵盖了所有内容,但仍然让我加分

我没有太多使用 Istio 的经验,但我也建议查看 Linkerd service mesh

第 1 步。

考虑到如果您使用多设备,GKE 和 EKS 还是可以的。

Multicluster guide详情及安装详情

Linkerd 将在集群之间使用信任锚,因此流量可以加密流动,而不是向公共互联网开放。

您必须生成证书,这将在集群之间形成一个共同的信任基础。

每个代理都会获得证书的副本并将其用于验证。

【讨论】:

  • 谢谢你的想法,我也去看看 Linkerd!
【解决方案2】:

您的问题的答案会更加复杂,因为没有一种万能的解决方案会被证明是最好的。这完全取决于您到底想做什么以及您拥有什么工具。 suren在评论中提到的很好:

如果您仍处于 PoC 阶段,请注意有几种方法可以实现您想要的。例如,Istio 将是一种有效的方式。您可以在 ServiceEntry 中拥有其他服务,启用 mTLS 即可。您甚至不必管理此特定场景的秘密,因为它是自动的。但还有其他方法。即使使用 Istio,也有其他方法。如果您使用任何云提供商,您可能也有一些托管服务

这是一个非常好的评论,我也会向您推荐基于 istio 的解决方案。首先先查官方mTLS documentation for istio。您还可以在那里找到具体的使用示例和示例配置文件。

您在问题中还提到您的应用程序将在两个集群之间运行。看看this tutorial,它准确地展示了如何解决这种情况:

Istio 向每个 pod 注入一个 envoy sidecar,并确保所有流量都通过 envoy 代理。 Envoy 代理组成数据平面。控制平面管理 Envoy 边车。在以前的 Istio 版本中,控制平面曾经有其他组件,例如 Pilot、Citadel 和 Galley。这些组件被合并到一个名为“istiod”的二进制文件中。控制平面还处理配置、证书、机密和健康检查。

更多信息请查看related problem on stackoverflowanother tutorial

考虑到除了 istio 本身之外,您还可以使用现成的云解决方案,例如 GKE 提供的,即Configuring TLS and mTLS on the Istio ingress

另一种方法可能是使用工具Anthos Service Mesh by example: mTLS

【讨论】:

  • 感谢您的想法和链接,这正是我所寻找的。我知道我可以通过多种方式实现这一目标,但我真的不知道标准,我正在寻求某种确认我在正确的轨道上。我只知道我不想在应用程序上管理证书,而是在平台级别。 Istio 是一种流行的网格,我认为值得花几个小时来试用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 2018-01-18
  • 1970-01-01
  • 2022-06-21
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
相关资源
最近更新 更多