访问集群¶
Incus 集群通常的行为与独立的 Incus 服务器非常相似。
客户端可以与集群中的任何服务器通信,并且会获得相同的体验。请求可以通过 API 定向到特定服务器,并且不需要与该服务器直接连接。
注意
通过 API 级别上的 ?target=SERVER
或 CLI 级别上的 --target
来定位特定服务器。
集群对所有服务器使用单个面向客户端的 TLS 证书,这使得向客户端公开有效的 HTTPS 端点变得更容易,避免了手动检查指纹。
您可以使用 incus cluster update-certificate
加载您自己的集群范围的 TLS 证书,或者您可以使用 ACME 在整个集群中自动颁发和部署证书(请参阅TLS 服务器证书)。
身份验证¶
使用 TLS 的 HTTPS¶
处理远程 Incus 集群时的默认身份验证方法。
这在集群中运行良好,但可能会导致某些代理和负载均衡器出现一些问题,这些代理和负载均衡器希望与集群建立自己的 TLS 连接。
有关详细信息,请参阅TLS 客户端证书。
使用 OpenID Connect (OIDC) 的 HTTPS¶
Incus 上的 OpenID Connect 身份验证需要一个外部 OpenID 身份提供商,但随后具有提供对集群的细粒度身份验证的优势,从而使管理和审计访问变得容易。
为了使 OpenID Connect 正确工作,集群需要具有 DNS 记录、有效的证书并能够访问 OpenID 身份提供商。
有关详细信息,请参阅OpenID Connect 身份验证。
本地访问¶
您还可以通过连接到任何集群服务器并与该服务器上运行的本地 Incus 守护程序通信来与集群交互。
高可用性¶
为了在集群上提供高可用的 Incus API,您需要客户端请求始终至少到达一个响应服务器。
以下是一些常见的处理方法。
DNS 轮询¶
DNS 是一种在多个服务器上平衡 API 流量非常简单的方法。只需为集群中的每个服务器创建一个具有 A
或 AAAA
记录的 DNS 记录。
虽然这很容易实现,但只有在服务器快速拒绝连接的情况下才能正确处理回退到另一台服务器。任何卡住的服务器都可能导致某些客户端出现重大延迟,因为它们需要等待完整的连接超时才能联系另一台服务器。
外部负载均衡器¶
一个相当简单的解决方案是运行一个负载均衡器,例如 haproxy
之类的自托管负载均衡器,或由您现有的网络或云基础设施提供的负载均衡器。
这些负载均衡器通常可以监视服务运行状况,并且只将请求发送到当前响应的服务器。Incus 支持 haproxy
代理协议标头,以便在日志和审计消息中报告原始客户端 IP 地址。
注意
TLS 客户端证书身份验证仅适用于在 TCP 级别上起作用的负载均衡器。
终止 TLS 会话然后与 Incus 建立自己的 TLS 连接的负载均衡器只能与 OIDC 身份验证一起使用。
浮动 IP 地址¶
可以使用额外的浮动IP与Incus一起使用,实际上是一个虚拟IP地址,它仅在一个服务器上处于活动状态。这将所有客户端API流量集中到该单个服务器,但在某些环境中可能更容易管理。
为此,您需要确保所有服务器都配置为监听所有接口(例如 core.https_address=:8443
),然后利用本地防火墙仅允许外部客户端连接到虚拟IP地址。
处理虚拟IP地址的常见解决方案是 VRRP
(通过类似 frr
的工具)和 corosync/pacemaker
。
ECMP¶
对于那些运行具有到每个主机的BGP的完整L3网络基础设施的用户,可以发布一个IP地址用于Incus客户端流量。
此IP地址将添加到所有服务器的网络配置中(作为IPv4的 /32
或IPv6的 /128
),然后将其发布到它们的路由器。这将导致路由器对所有集群服务器中的IP地址具有等成本路由(ECMP)。
然后,流量将在所有服务器之间进行平衡,一旦服务器出现故障,其路由将消失,流量将转到剩余的服务器。
注意
为了最大程度地减少回退延迟,可以将BFD与BGP一起使用以获得低于1秒的回退时间。