3

我试图在两个 kubernetes 集群中的两个应用程序之间获取 mTLS,而不是 Istio 的方式(使用它的入口网关),我想知道以下是否可行(对于 Istio,对于 Likerd,对于 Consul ......)。

假设我们有一个带有应用程序 AA 的 k8s 集群 A 和一个带有应用程序 BB 的集群 B,我希望它们与 mTLS 通信。

  • 集群 A 为 nginx 入口控制器提供了letsEncrypt 证书,并为其应用程序提供了一个网格(无论如何)。
  • 集群 B 具有来自我们的根 CA 的自签名证书。
  • 集群 A 和 B 服务网格具有由我们的根 CA 签名的不同证书。
  • 流量从互联网流向集群 A 入口控制器 (HTTPS),从那里流向应用 AA
  • 流量到达应用 AA 后,此应用想与应用 BB 通话
  • 应用程序 AA 和 BB 具有通过入口暴露的端点(使用它们的入口控制器)。
  • TLS 证书以端点结尾并且是通配符。

您认为 mTLS 会在这种情况下工作吗?

4

2 回答 2

4

基本上这个来自 portshift 的博客回答了你的问题。

答案取决于您的集群是如何构建的,因为

Istio 提供了很少的选项来在多个 kubernetes 集群中部署服务网格,这里有更多关于它的信息。

所以,如果你有 Single Mesh 部署

Istio 扩展帖子

您可以在完全连接的多集群网络上部署单个服务网格(控制平面),并且所有工作负载都可以在没有 Istio 网关的情况下直接相互访问,无论它们在哪个集群上运行。



如果您有多网格部署

多个集群上的多服务网格部署

通过多网格部署,您可以获得更高程度的隔离性和可用性,但会增加设置的复杂性。原本独立的网格使用 ServiceEntries、Ingress Gateway 松散耦合在一起,并使用公共根 CA 作为安全通信的基础。从网络的角度来看,唯一的要求是入口网关可以相互访问。需要访问不同网格中的服务的给定网格中的每个服务都需要远程网格中的 ServiceEntry 配置。


在多网格部署中,随着环境的增长和多样化,安全性会变得复杂。在集群之间对服务进行身份验证和授权时存在安全挑战。本地Mixer(服务策略和遥测)需要使用相邻集群中服务的属性进行更新。否则,当这些服务到达其集群时,它将无法授权这些服务。为此,每个 Mixer 都需要了解相邻集群中的工作负载身份及其属性。每个Citadel都需要使用相邻集群的证书进行更新,以允许集群之间的 mTLS 连接。

跨多网格控制平面的细粒度工作负载身份(mTLS 证书)和服务属性的联合可以通过以下方式完成:

  • Kubernetes Ingress:将来自集群外部的 HTTP 和 HTTPS 路由暴露给集群 内的服务 。流量路由由 Ingress 资源上定义的规则控制。Ingress 可以终止 SSL / TLS,并提供基于名称的虚拟主机。然而,它需要一个 Ingress 控制器来满足 Ingress 规则
  • 服务网格网关: Istio 服务网格提供了不同的配置模型,即 Istio 网关。网关允许将监控和路由规则等 Istio 功能应用于进入集群的流量。入口网关描述了在网格边缘运行的负载均衡器,用于接收传入的 HTTP/TCP 连接。它配置公开的端口、协议等。入口流量的流量路由是使用 Istio 路由规则配置的,与内部服务请求的方式完全相同。

您认为 mTLS 会在这种情况下工作吗?

基于以上信息

  • 如果您有单网格部署

    应该是可以的,没有任何问题。

  • 如果您有多网格部署

    它应该可以工作,但是由于您不想使用 istio 网关,因此唯一的选择是kubernetes ingress

我希望它能回答你的问题。如果您还有其他问题,请告诉我。

于 2020-03-02T07:46:47.740 回答
0

你想要 Consul 的Mesh Gateways。它们在部署在不同数据中心、集群或运行时环境中的联合 Consul 集群之间实现 mTLS 服务到服务连接。

于 2020-05-01T02:12:22.107 回答