应用程序之间的mTLS的最佳多集群配置

时间:2020-01-28 18:47:31

标签: istio mtls

我想用Istio multicluster配置2个Kubernetes集群,我在考虑这2个选项:

  1. 复制的控制平面(https://istio.io/docs/setup/install/multicluster/gateways/
  2. 共享控制平面(单个网络)(https://istio.io/docs/setup/install/multicluster/shared-vpn/

出于可用性的原因,我宁愿使用复制的控制平面,但是我想到了以下问题:在这种情况下,应用程序之间的mTLS如何工作?

如果同一集群中的2个应用程序互相通信,并且启用了mTLS,我可以创建一个类似这样的AuthorizationPolicy:

apiVersion: "security.istio.io/v1beta1"
kind: "AuthorizationPolicy"
metadata:
  name: "allow-app-a"
  namespace: app-b
spec:
  rules:
  - from:
    - source:
        principals: ["cluster.local/ns/app-a/sa/default"]
    to:
    - operation:
        methods: ["GET"]

app-a由mTLS提供的主体标识。

如果我们要使用复制的控制平面(版本1)部署多集群,我们将有以下内容:

multicluster with replicated control planes

如何识别不同群集(cluster.global)中的应用程序?所有流量都通过网关,我猜是永远不会从原始调用方读取主体,而是从网关读取主体。是这样吗?

总有办法解决吗? 我可以复制控制平面但没有部署网关吗?

1 个答案:

答案 0 :(得分:0)

您应该根据自己的需求选择多集群模型,而不是相反。据istio documentation

共享控制平面(单网络)模型是最简单的,并且主要用作跨多个群集的一个网格。


对于复制的控制平面模型,它主要用于可用性和冗余故障转移,在这种情况下,您在多个区域中都有集群和网格的副本。这样,您可以在两个群集上实现相同的配置和策略。也可以像here中那样以高级方式使用它。

Istio documentation使用以下内容总结了复制的控制平面:

使用Istio网关,公共根CA和服务条目,可以在多个Kubernetes群集之间配置单个Istio服务网格。一旦以这种方式配置,流量就可以透明地路由到远程群集,而无需任何应用程序的参与。尽管此方法需要一定数量的手动配置才能进行远程服务访问,但是可以自动创建服务条目。

关于根据documentation的跨集群通信和mTLS:

跨集群通信需要服务之间的相互TLS连接。为了在群集之间实现相互TLS通信,将为每个群集的城堡配置由共享根CA生成的中间CA凭据。出于说明目的,您使用Istio安装中samples / certs目录下可用的示例根CA证书。


如何识别不同群集(cluster.global)中的应用程序?

使用host名称将应用程序引入服务网格注册表。您可以使用ServiceEntry对象来配置服务的全局可见性。您可以找到示例here

multi-mesh deployment feature中的一个是:

默认情况下,网格中的任何服务都不公开,网格所有者必须明确指定要公开的服务。


所有流量都通过网关,我想它永远不会从原始调用者中读取主体,而是从网关中读取主体。是这样吗?

这取决于您的Gateway配置。您可以使用Ingress Gateway without TLS Termination来指示网关按原样传递入口流量,而不终止TLS。这样,将保留源地址。

我能否获得复制的控制平面但没有部署网关?

否,对于具有复制控制平面的多集群模型,每个集群仍具有其Gateways用于路由。

希望这会有所帮助。

相关问题