istio - 应用程序之间 mTLS 的最佳多集群配置
问题描述
我想用 Istio 多集群配置 2 个 Kubernetes 集群,我正在考虑以下 2 个选项:
- 复制的控制平面 ( https://istio.io/docs/setup/install/multicluster/gateways/ )
- 共享控制平面(单网络)(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)中的应用程序?所有流量都通过网关,我的猜测是它永远不会从原始调用者那里读取主体,它会从网关中读取主体。这是正确的吗?
有没有办法解决这个问题?我可以获得复制的控制平面但没有网关部署吗?
解决方案
您应该根据您的要求选择多集群模型,而不是相反。根据 istio文档:
共享控制平面(单网络)模型是最简单的,主要用作跨越多个集群的一个网格。
至于复制控制平面模型,它主要用于可用性和冗余故障转移,您在多个区域中拥有集群和网格的某种副本。通过这种方式,您可以实现在两个集群上具有相同的配置和策略。它也可以像这里一样以高级方式使用。
Istio文档总结了复制的控制平面,内容如下:
使用 Istio 网关、通用根 CA 和服务条目,您可以跨多个 Kubernetes 集群配置单个 Istio 服务网格。以这种方式配置后,流量可以透明地路由到远程集群,而无需任何应用程序参与。虽然这种方法需要对远程服务访问进行一定量的手动配置,但服务条目创建过程可以自动化。
至于根据文档的跨集群通信和mTLS :
跨集群通信需要服务之间的相互 TLS 连接。为了启用跨集群的双向 TLS 通信,每个集群的 Citadel 都将配置有由共享根 CA 生成的中间 CA 凭据。出于说明目的,您使用 Istio 安装中 samples/certs 目录下提供的示例根 CA 证书。
如何识别不同集群(cluster.global)中的应用程序?
通过将host
应用程序引入服务网格注册表的名称。您可以使用ServiceEntry
对象来配置服务的全局可见性。你可以在这里找到一个例子。
多网格部署功能之一是:
默认情况下,网格中的任何服务都不会公开,网格所有者必须明确指定公开哪些服务。
所有流量都通过网关,我的猜测是它永远不会从原始调用者那里读取主体,它会从网关读取主体。这是正确的吗?
这取决于您的Gateway
配置。您可以拥有没有 TLS 终止的入口网关,它指示网关按原样传递入口流量,而不终止 TLS。这样源地址将被保留。
我可以获得复制的控制平面但没有网关部署吗?
不,对于具有复制控制平面的多集群模型,每个集群仍然有其Gateways
用于路由的。
希望这可以帮助。
推荐阅读
- tensorflow - Keras 模型在 1 个 epoch 后有很好的损失,但在更多 epoch 后并没有真正变得更好
- c# - 无法使具有标识符 cell_id 的单元出列 - 必须为标识符注册一个 nib 或一个类
- python - 你如何遍历 Python 中的类对象列表
- tableau-api - Tableau - 添加行而不使其成为前一行的子集
- sorting - 根据值的出现次数对切片进行排序
- xamarin.forms - 在 Xamarin.Forms 中设置 FormsVideoLibrary.VideoPlayer 的来源
- python - 使用 Scipy 在 Python 中将 Weibull 分布转换为直线
- java - SpringBoot RequestMapping 方法未调用
- mysql - 使用 SQL 将列数据转换为基于一列中的公共 ID 的行
- dialogflow-es - Dialogflow:根据用户的年龄将用户引导到特定的流程