两个 kubernetes 集群之间的 mTLS

2024-01-08

我正在尝试在两个 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 在这种情况下会起作用吗?


基本上是这个blog https://www.portshift.io/blog/secure-multi-cluster-connectivity/?fbclid=IwAR22fqPDRaEdNdj8m7G2hNl2Y7S8lpxJDf5G8eBwnDAj3hnh4S1tcp8qBQk来自 portshift 回答你的问题。

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

Istio 提供了一些在多个 kubernetes 集群中部署服务网格的选项,更多相关信息here https://stackoverflow.com/a/60149783/11977760.

因此,如果您有单网格部署

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


BUT


如果您有多重网格部署

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


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

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

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

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

根据以上信息

  • 如果您有单一网格部署

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

  • 如果您有多重网格部署

    它应该可以工作,但是由于您不想使用 istio gateway 那么唯一的选择是Kubernetes 入口 https://kubernetes.io/docs/concepts/services-networking/ingress/.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个 kubernetes 集群之间的 mTLS 的相关文章

随机推荐

  • typescript:使用推断永远不会得到不同的结果

    我做了一些演示来重现我的问题 他们来了 问题1 为什么打字g get 2 1 type f never extends infer S1 infer S2 S1 extends never 1 2 3 why 2 type g never
  • 如何使用 Feign 客户端设置请求头?

    我们正在使用 Spring Cloud 框架开发一套微服务 我们需要做的事情之一就是设置请求标头 我知道我可以传递一个参数 RequestHeader到 Feign 方法 但值需要来自另一个 bean 我不知道 SPEL 是否可以用于 Fe
  • 如何用新数据重绘jstree树?

    那么 我的问题 我用一些数据初始化了我的树 tree jstree core data Simple root node id node 2 text Root node with options state opened true sel
  • Python:将字典的项目除以取决于第一个键的值

    我相信这个问题与将每个Python字典除以总值 https stackoverflow com questions 30964577 divide each python dictionary value by total value 但是
  • Angular4 在构造函数中调用函数

    我试图在 Angular 4 的构造函数中调用模态函数 但该函数被突出显示 该函数未正确调用 并且当加载页面时 日志中不会读取错误 并且模态不会按预期弹出 屏幕变暗了 但模式中的文本没有显示 constructor public formB
  • 无法解析名为“存储”的 Azure 存储连接 - Azure 持久函数

    我的项目 包 json name azure functions version 1 0 0 description scripts start func start test echo No tests yet dependencies
  • C++ 中是否可以重载运算符结合性?

    我正在构建一个具有稍微不对称添加的类 在投诉到来之前 它必然是不对称的 当两个对象相加时 必须发生转换 需要一些时间的操作 并且转换最自然地发生在正确的被加数上 为了具体说明这一点 这里有一个正在发生的事情的通用示例 class Foo c
  • 停止通过疯狂的按钮点击生成的多个视图调用(Django 应用程序)

    我正在基本 Django Web 应用程序中上传图像文件 有一个uploadhtml 模板中的按钮被form标签 一旦upload按钮被按下 底层view接管并处理图像上传 在我同事 Macbook 的 Chrome 浏览器中 按uploa
  • 确定映射是否包含键的值?

    确定 STL 映射是否包含给定键的值的最佳方法是什么 include
  • 使用 jQuery 获取图像 src

    img src img arnold png alt Arnold 如何使用 jQuery 获取该图像的绝对路径 img attr src 给我只是 img 阿诺德 png 应该给出类似 http site com data 2011 im
  • 使用 SSE-KMS 的 S3 分段上传

    我正在尝试使用 aws java sdk 1 11 230 编写一个实用程序 我可以使用 PutObjectRequest 使用 SSE KMS 编写文件 如下所示 PutObjectRequest putRequest new PutOb
  • 无法加载类型“NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle”

    Well 当我阅读并尝试每个类似的主题但都没有成功时 我决定发布我自己的问题 我的解决方案有一个控制台应用程序和一个用于数据访问的类库 Nhibernate 配置位于控制台应用程序中的 appconfig 内 我目前正在使用它进行调试 因为
  • 如何在 OS X 中获取 Bash 版本号

    我正在编写一个需要 Bash 4 x 的安装脚本 此安装脚本也可以在 OSX 上使用 我知道在 Linux 系统上我可以通过检查来获取 Bash 版本echo BASH VERSIONenv 变量 但如何在达尔文中获取 bash 版本 跑步
  • 无法在 Google 应用模拟器中添加 google 帐户

    我正在尝试实现我的第一个 Android C2DM 应用程序 我在添加谷歌帐户时遇到困难 我的机器位于代理后面 但我添加了一个包含代理 端口 用户名 密码详细信息的 APN 我可以使用浏览器进入谷歌帐户页面 我已经尝试过http和https
  • Java 序列化:readObject() 与 readResolve()

    这本书有效的Java和其他来源提供了关于如何以及何时使用的很好的解释readObject 使用可序列化 Java 类时的方法 这readResolve 另一方面 方法仍然有点神秘 基本上我发现的所有文件要么只提到两者之一 要么只单独提到两者
  • 如何在react.js中使用setProps

    我想打电话setProps从外部myComponent能够动态更改数据myComponent 我希望在更改组件的道具后 它将重新渲染自身 我正在尝试以下操作 var myComponent React createClass render
  • AWS Elastic mapreduce 似乎没有正确地将流媒体转换为 jar

    我有一个映射器和减速器 当我在管道版本中运行它们时 它们可以正常工作 cat data csv mapper py sort k1 1 reducer py 我使用了弹性mapreducer向导 加载了输入 输出 引导程序等 引导程序成功
  • Pyspark - 使用collect_list时保留空值

    根据接受的答案 in pysparkcollect set或collect list与groupby https stackoverflow com questions 37580782 pyspark collect set or col
  • 安装valgrind,启动时出现致命错误

    我正在安装 Valgrind 但遇到一些问题 我的平台信息 Linux xx ThinkPad X61 3 2 0 39 generic pae 62 Ubuntu SMP Wed Feb 27 22 25 11 UTC 2013 i686
  • 两个 kubernetes 集群之间的 mTLS

    我正在尝试在两个 kubernetes 集群中的两个应用程序之间获取 mTLS 而无需使用 Istio 的方式 通过其入口网关 我想知道以下内容是否可行 对于 Istio Likerd Consul 假设我们有一个 k8s 集群 A 和一个