Submariner-Lighthouse
Submariner 架构
Submariner 主要组件
Broker
Gateway
-
Gateway 是每个集群中负责处理跨集群流量的核心组件,负责在集群之间建立和管理加密隧道(通常使用 IPSec 或 WireGuard)以传输数据包,并处理跨集群的流量转发。
-
它在每个集群的边界节点(通常是主节点或专用节点)上运行,确保从本地集群到远程集群的网络流量能够安全、可靠地传输。
Gateway Engine 部署在每个集群中,负责建立到其他集群的隧道。隧道可以由以下方式实现:
- IPsec,使用 Libreswan 实现。这是当前的默认设置。
- WireGuard,使用 wgctrl 库实现。
- VXLAN,不加密。
Cable Driver
- Cable Driver 是一个插件化的组件,负责实际的数据包封装和隧道管理。Submariner 支持多种 Cable Driver,如 IPSec 和 WireGuard,每种驱动都有不同的性能和加密特性。
- 它在 Gateway 中运行,确保数据包在发送到隧道之前进行适当的封装,并在接收数据包时正确解封装。
- 提供不同隧道技术的支持和切换(IPSec 和 WireGuard)。
- 管理隧道的生命周期和配置。
Route Agent
- Route Agent 负责配置集群节点的路由,将跨集群的流量路由到 active Gateway Node,以确保流量能够正确地通过隧道在集群之间传输。
- 管理各节点的路由表,使跨集群的流量能够找到正确的出口(Gateway)。
- 配置网络规则以确保流量的高效和安全传输。
Service Discovery
- 提供跨集群的 DNS 服务发现,同步 ServiceExport 和 ServiceImport 资源。
- 监听一个集群中的 ServiceExport 资源,然后确保在所有连接的集群中创建相应的 ServiceImport 资源
GlobalNet
- GlobalNet 是一个可选的组件,用于解决不同集群之间 IP 地址冲突的问题,提供全局唯一的 IP 地址分配。当多个集群使用相同的内部网络地址时,GlobalNet 会分配全局唯一的 IP 地址给每个集群的服务和 Pod。
- 分配和管理全局 IP 地址,避免 IP 地址冲突。
- 确保跨集群的服务和 Pod 能够无冲突地互相访问。
Submariner Operator
- Submariner Operator 是一个 Kubernetes Operator,用于简化 Submariner 的部署和管理,它自动化了 Submariner 的安装、配置和升级等任务。负责在 Kubernetes 集群中安装 Submariner 组件,例如 Broker, Gateway Engine, Route Agent 等等。
- 部署和配置 Submariner 组件。
- 监控 Submariner 的运行状态并自动进行修复或升级。
NAT Discovery (NAT-T)
- NAT Discovery 组件用于检测集群节点是否位于 NAT 后面,并调整隧道连接的配置,以确保隧道可以跨 NAT 环境工作
- 检测并配置 NAT-Traversal 以确保集群间的连接不受 NAT 影响。
- 处理 NAT 环境中的 IP 映射和隧道配置。
IPAM(IP地址管理)
- IPAM负责管理跨集群通信中使用的IP地址和CIDR
- 它分配唯一的IP范围给集群,确保没有重叠,并管理这些范围内的IP分配。
Datastore Syncer
- Datastore Syncer 负责在集群之间同步网络资源的状态信息,如 Gateway 的健康状况、隧道的状态等。
- 它帮助多个集群保持一致的网络视图,使得跨集群的路由和隧道管理更加可靠。
1. 服务发现
- Lighthouse & Service Discovery Controller
- Lighthouse 负责在不同的 Kubernetes 集群间进行服务发现和同步。服务发现控制器监控和同步资源。Lighthouse 使用
ServiceExport
和 ServiceImport
CRD 来处理服务的跨集群导出和导入。
- 创建ServiceExport:在集群A中,用户创建了一个服务(例如
my-service
),并且希望这个服务能够被其他集群访问。为此,用户定义了一个ServiceExport
资源。 - 监控ServiceExport:Lighthouse Agent 会监测到集群A中的
ServiceExport
资源,并将该服务的详细信息(如服务的 IP、端口等)发布到 Submariner 的 Broker。 - 创建ServiceImport:在其他集群 B 中,Lighthouse Agent 会接收到集群 A 导出的
my-service
服务信息,并在集群B中创建一个对应的ServiceImport
资源,ServiceImport
对象包含服务的 IP 地址、端口等信息,允许本地集群中的 Pods 通过 ClusterIP 或 DNS 名称访问该服务 - DNS解析:集群B中的 Pod 可以通过DNS查询到
my-service
,而DNS的解析结果将是指向集群A中的实际服务。
2. DNS 解析
- Lighthouse DNS Server
- Lighthouse 提供一个跨集群 DNS 解析服务,使得 Pod 可以使用服务名来访问跨集群的服务,负责解析跨集群服务的DNS请求。
- DNS查询:集群 B 中的Pod(例如
podB
)希望访问my-service
。它向通过服务名(例如 my-service.namespace.svc.cluster.local
)发出DNS查询请求,解析my-service
的服务名。 - DNS解析:Lighthouse DNS 服务器拦截 DNS 请求,利用先前创建的
ServiceImport
资源,解析出my-service
对应的IP地址。这个IP地址指向集群A中的网关,或者使用GlobalNet时指向转换后的IP地址。
3. 流量转发
- Submariner Route Agent & Gateway:
- Route Agent 管理集群内的路由规则,确保跨集群流量能够正确路由到本地的Submariner网关。
- 流量转发:DNS 解析后,
podB
获取了my-service
的IP地址后,开始向这个地址发送请求。 - Route Agent 监控到该流量需要被转发到另一个集群,并根据预先配置的路由规则将所有指向外部集群的流量定向到本地网关 Submariner Gateway。
4. 封装与传输
- Gateway & Cable Engine:
- 封装流量:集群B的 Gateway 收到流量后,会利用 Cable Engine 建立的隧道(如IPsec 或 WireGuard 隧道)对流量进行封装。封装过程包括在流量包上添加隧道头信息(如源网关和目标网关IP),并加密包的内容。
- 隧道传输:封装后的流量通过隧道被传输到 集群A 的 Gateway 。隧道是通过 Cable Engine 管理的,并确保了跨集群通信的安全性和完整性。
5. 解封装与交付
- Submariner Gateway & Route Agent:
- 集群 A 中的 Gateway 和 Route Agent 接收并解封装来自其他集群的流量,然后将流量交付给目标服务或Pod。
- 接收流量:集群A的 Gateway 接收到来自集群B的封装流量后,首先解密并解封隧道包,恢复原始的流量包。
- 流量交付:Gateway 将解封装后的流量转发给集群 A 的 Route Agent,Route Agent 根据流量的目标地址路由到集群A的目标服务(
my-service
),并最终到达实际的Pod(例如podA
)。
6. 响应处理
- Gateway & Cable Engine:
- 响应流量:集群 A 中的
podA
处理请求并生成响应数据。响应数据会按照相同的路径返回。 - 封装响应:响应数据包再次经过集群 A 的 Route Agent 和 Gateway,由 Gateway 封装后通过隧道发回集群 B。
- 解封与传递:集群 B 的 Gateway 接收到响应后,将其解封装,并通过 Route Agent 将响应流量返回给发出请求的
podB
。
7. 网络
- GlobalNet
- 在跨集群通信中进行IP地址的转换,以避免集群间的IP冲突。
- IP地址转换:在使用GlobalNet的场景下,GlobalNet会在流量进入隧道之前对源IP和目标IP进行转换,确保不同集群使用的IP地址不会冲突
Lighthouse
Lighthouse
- Lighthouse 是 Submariner 的服务发现组件,它通过 Kubernetes 的
ServiceExport
和 ServiceImport
CRD 实现跨集群的服务发现。
- 监控和管理跨集群的服务导出和导入。
- 提供跨集群的 DNS 服务,使得集群内部的 Pod 可以通过 DNS 名称访问其他集群的服务。
Lighthouse Agent:
Lighthouse CoreDNS:
- 拦截 DNS 查询:当集群中的 Pod 查询某个服务的 DNS 记录时,CoreDNS 插件会拦截这些请求,并检查它们是否指向跨集群的服务。
- 请求转发:如果查询的服务在本地集群中不存在但存在于其他集群中,CoreDNS 插件会将这些请求转发到 Lighthouse DNS Server 进行解析。
- 结果返回:一旦 Lighthouse DNS Server 返回了解析结果,CoreDNS 插件将其返回给 Pod。
Lighthouse DNS Server:
- DNS 记录管理:Lighthouse DNS Server 根据 ServiceImport 资源进行 DNS 解析, 维护了跨集群服务的 DNS 记录。它收集并存储所有相关集群的服务信息,使得在需要时能够快速响应查询请求。
- 跨集群 DNS 查询解析:当 CoreDNS 插件转发 DNS 查询时,Lighthouse DNS Server 会根据它所维护的跨集群服务记录进行解析,并返回正确的 IP 地址或其他相关信息。
- 数据同步:Lighthouse DNS Server 同步来自多个集群的服务信息,以确保它拥有最新的跨集群服务信息。
ServiceImport/ServiceExport CRD(自定义资源定义)
Lighthouse Controller是一个集群级别的控制器,管理 ServiceExport
和 ServiceImport
对象的生命周期。
-
ServiceExport 在源集群中定义,标识需要跨集群暴露的服务。当用户在集群 A 中想要将某个服务暴露给其他集群时,会在集群 A 中创建一个 ServiceExport
对象。这个对象包含了要导出的服务的信息,例如服务的名称、命名空间等
-
ServiceImport 在目标集群中创建,表示跨集群服务信息已经被导入接收。当一个服务被导出后,控制器会在所有集群根据 ServiceExport 自动生成一个与之对应的 ServiceImport 资源。
-
这些 CRD 被 Lighthouse Agent 使用,用于在各个集群之间传递和同步服务信息。
-
ServiceImport 在目标集群中创建,表示跨集群服务信息已经被导入接收。当一个服务被导出后,控制器会在所有集群根据 ServiceExport 自动生成一个与之对应的 ServiceImport 资源。
-
这些 CRD 被 Lighthouse Agent 使用,用于在各个集群之间传递和同步服务信息。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!