0

我想用 Istio 多集群配置 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)的多集群,我们将拥有如下内容:

具有复制控制平面的多集群

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

有没有办法解决这个问题?我可以获得复制的控制平面但没有网关部署吗?

4

1 回答 1

0

您应该根据您的要求选择多集群模型,而不是相反。根据 istio文档

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


至于复制控制平面模型,它主要用于可用性和冗余故障转移,您在多个区域中拥有集群和网格的某种副本。通过这种方式,您可以实现在两个集群上具有相同的配置和策略。它也可以像这里一样以高级方式使用。

Istio文档总结了复制的控制平面,内容如下:

使用 Istio 网关、通用根 CA 和服务条目,您可以跨多个 Kubernetes 集群配置单个 Istio 服务网格。以这种方式配置后,流量可以透明地路由到远程集群,而无需任何应用程序参与。虽然这种方法需要对远程服务访问进行一定量的手动配置,但服务条目创建过程可以自动化。

至于根据文档的跨集群通信和mTLS :

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


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

通过将host应用程序引入服务网格注册表的名称。您可以使用ServiceEntry对象来配置服务的全局可见性。你可以在这里找到一个例子。

多网格部署功能之一是:

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


所有流量都通过网关,我的猜测是它永远不会从原始调用者那里读取主体,它会从网关读取主体。这是正确的吗?

这取决于您的Gateway配置。您可以拥有没有 TLS 终止的入口网关,它指示网关按原样传递入口流量,而不终止 TLS。这样源地址将被保留。

我可以获得复制的控制平面但没有网关部署吗?

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

希望这可以帮助。

于 2020-01-29T16:07:20.133 回答