kuma网络 官网翻译

Service Discovery | Kuma

服务发现

这个页面展示了如何用kuma进行通信处理服务流量。在数据平面(kuma-dp)和控制平面(kuma-cp)以及多实例和数据平面代理之间处理通信。

当数据平面代理连接到控制平面时,他将启动gRPC控制平面的流连接。他从控制平面检索策略并发送诊断信息给控制平面。

在单机模式中kuma-dp(kuma 数据 平面)直接连接到kuma-cp实例。

再多区域部署中,kuma-dp进程将连接到控制平面平面,而区域控制平面将在我们构建的名为KDS的xDS的扩展上连接到到全局控制平面。(Kuma Discovery Serrvice)。再多区域模式中,数据平面代理从不连接全局控制平面,而仅连接到区域代理。

数据平面和控制平面之间的连接不在服务请求执行的路径上.这意味着如果数据平面暂时失去和控制平面的连接服务通信不会受影响

与此同时,数据平面同样还是将通告每个服务的IP地址.检索IP地址:

  • 在kubernetes上查看Pod的地址
  • 再Universal模式数据平面规范的入站属性)中配置入站监听器

每一个数据平面向控制面通告的IP地址也将用于服务流量从一个kuma dp路由到另一个kuma dp.这意味着Kuma在任何给定时间都知道每个服务的每个副本相关联的所有IP是什么.

kuma已经提供了自己的DNS.

网络连接经过kuma-dp实例可以通过俩种方式实现:

  • 在单机模式中kuma-dp进程在平面网络拓扑中相互通信,这意味着每一个数据平面必须直接向其IP地址发送请求来消费另一个数据平面.再这个模式中,每个kuma-dp都必须能够在特定的端口上发送请求到其他kuma-dp才能管理服务流量.
  • 在多区域模式中,kuma自动连接解析为运行在同一区域中的数据平面,或者通过另一个区域中的区域出口代理(如果存在)和区域入口代理的地址进行跨区域连接.这意味着可以使用多区域连接来连接不同集群,平台或者云中运行的服务.kuma还通过其他本地DNS解析程序创建了一个.mesh区域.自动创建的kuma.io/zone标签可以与kuma策略一起使用已确定流量如何在多区域设置中流动.

默认情况下,跨区域连接要求在具有适当流量权限的网格上启用mTLS,以启用流量,否则,不安全的通信不允许在每个区域之外.

DNS

kuma 附带了DNS解析器,用于服务命名.将主机名映射到在kuma注册的服务的虚拟IP.

kuma DNS的使用仅在透明代理时才相关.

如何工作

Kuma DNS服务器响应类型A和AAAA DNS请求,并用A或AAAAA记录回答,

虚拟IP由控制平面从配置的CIDR中分配(默认 240.0.0.0/4),通过不断扫描kuma网格中可用的服务.当服务被删除了,他的虚拟ip也将被释放.并且Kuma DNS没有用A和AAAA DNS记录对其进行响应.虚拟IP在控制平面和数据平面代理的实例之间是文档的(复制的)

一旦分配了新的VIP或释放了旧的VIP,控制平面就用这个改变来配置数据平面代理。

数据平面代理的所有名称查找都在本地进行处理,而不是数据平面中.这种方法允许对名称解析进行更稳健的处理。举个例子,当控制平面下线,数据平面代理仍然可以解析DNS。

数据平面代理DNS包括:

  • Envoy DNS管理器为DNS记录提供来自网格的响应。
  • kumaDP启动的COreDNS实例。该实例在Envoy DNS过滤器和原始主机DNS之间发送请求。
  • iptable规则将原始DNS流量重定向到本地CoreDNS实例。

DNS请求首先发送到Envoy的DNS过滤器。网格中存在的任何DNS名称最终将被解析为mesh地址。这样在实践中意味着网格中存在的DNS名称将遮蔽网格外存在的等效名称。

Kuma DNS不是服务发现机制,他不返回示例的真实IP地址。相反,它总是返回一个分配给网格中相关服务的VIP。这使得可以统一查看单个区域内多个区域之间的所有服务。

默认的TTL是60秒,以确保客户端与KumaDNS同步,并考虑到任何再其中的更改。

  1. TTL(Time to Live)记录:在域名系统(DNS)中,TTL 时间指的是 DNS 记录在缓存中存活的时间。当一个 DNS 查询被解析并返回一个结果时,该结果通常会被缓存在本地系统或其他 DNS 服务器的缓存中。TTL 记录指定了这个缓存中的 DNS 记录可以保留多长时间。在 TTL 记录的过期之前,请求相同的 DNS 记录将直接从缓存中获取,而不需要再次进行完整的 DNS 查询。

非网格流量

入站

GPT生成

MTLS 是 "Mutual Transport Layer Security" 的缩写,也称为双向传输层安全性。它是一种用于建立安全通信连接的协议,常用于网络通信中,特别是在客户端和服务器之间进行双向身份验证和数据加密。

MTLS 是在传输层(Transport Layer)上实施安全性的一种机制。它基于传输层安全协议(TLS)的基本原理,但引入了双向身份验证的要素。传统的 TLS 只提供服务器身份验证,而 MTLS 要求客户端和服务器之间互相验证对方的身份。

在 MTLS 中,客户端和服务器都有自己的数字证书。当建立连接时,客户端会向服务器发送自己的证书,证明自己的身份。服务器会验证客户端的证书,并发送自己的证书给客户端。客户端则会验证服务器的证书。只有在双方都验证通过的情况下,连接才会建立,并且后续的通信会使用加密算法进行保护。

MTLS 提供了更高级别的安全性,因为它要求双方进行身份验证,防止中间人攻击和伪造身份。它常被用于保护敏感数据的传输,例如在网络服务、API 通信和微服务架构中。

当启用了mTLS,来自网格外部的客户端无法访问网格内部的应用程序。如果想让外部的客户端访问服务,请参照Permissive mTLS 模式

没有透明代理 可以绕过Envoy上的TLS检查。应该采取措施保护应用程序端口的安全。

出站

在默认设置中,Kuma允许任何非网格流量通过Envoy,而无需应用任何策略。列如,如果服务需要向http://example.com发送请求,即使在部署服务的网格中启用了流量日志,也不会记录所有请求。可以通过在网格资源中设置networking.outbound.passthrough来更改此行为。

Last modification:January 31, 2024
如果觉得我的文章对你有用,请随意赞赏