两个kubernetes集群之间的mTLS

时间:2020-02-29 09:32:18

标签: kubernetes istio mesh-network linkerd mtls

我试图在两个kubernetes集群中的两个应用程序之间获取mTLS,而Istio却没有这样做(使用其入口网关),我想知道以下方法是否可行(对于Istio,Likerd,Consul。 )。

假设我们有一个k8s集群A和一个应用A.A.和具有应用B.B.的集群B,我希望他们与mTLS通信。

  • 集群A具有用于nginx入口控制器的letEncrypt证书,以及用于其应用程序的网格(任意)。
  • 集群B具有来自我们的根CA的自签名证书。
  • A组和B组服务网格具有由我们的根CA签名的不同证书。
  • 流量从互联网到群集A入口控制器(HTTPS),再从那里到应用程序A.A。
  • 流量到达应用A.A.之后,该应用想要与应用B.B对话。
  • 应用A.A.和B.B.的端点通过入口(使用入口控制器)暴露。
  • TLS证书在端点中终止并且是通配符。

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

2 个答案:

答案 0 :(得分:2)

基本上,来自portshift的blog会回答您的问题。

答案取决于集群的构建方式,因为

Istio提供了几种在多个kubernetes集群中部署服务网格的选项,更多关于here

因此,如果您具有Single Mesh部署

Istio extension post

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


BUT


如果您进行了多网格部署

A multi service mesh deployment over multiple clusters

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


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

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

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

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

基于以上信息

  • 如果您具有单网格部署

    应该没有任何问题。

  • 如果您具有多网格部署

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

希望它能回答您的问题。让我知道您是否还有其他问题。

答案 1 :(得分:0)

您需要领事的Mesh Gateways。它们在部署在不同数据中心,群集或运行时环境中的联合Consul群集之间建立了mTLS服务到服务的连接。