假设我们有以下设置:
-
服务A由Kubernetes集群中的一个pod组成,该集群包含两个容器Api A和Sidecar Api A通过Sidecar Aidecar A已注册为消费者。
-
服务B由Kubernetes集群中的一个pod组成,该集群包含两个容器Api Bidecar BApi B通过Sidecar Bidecar B已注册为生产商。
服务A和服务器B可能有多个实例。
服务通过一个中央机构向服务网格注册,我们称之为服务发现,它知道每个服务的特定实例及其公开的端点服务A还可以通过服务发现中央机构订阅服务B的特定端点。(中央机构也处理安全、代币和证书,但我想简化(
Sidecar A和Sidecar B定期与服务发现进行沟通,以确认可用性。
服务A应如何调用业务B的端点:
- 直接通过特定url,因为Sidecar a应该通过服务发现了解Service B的实例,并且应该选择一个健康的实例
- 或者通过调用服务发现的通用api间接调用,该api应该知道可以调用哪些健康实例,并相应地将请求重定向到其中一个实例
- 还是以其他方式
我发现推荐的方法是服务A通过特定的URL直接调用端点B,因为Sidecar A应该通过服务发现了解服务B的实例,并且应该选择一个健康的实例。服务发现的目的只是:允许服务被发现。它不应充当调用之间的代理。