我应该使用 API 网关还是服务网格?

Should I use an API Gateway or Service Mesh?

假设您正在使用带有 Docker 容器和 Kubernetes 的微服务。

如果您在微服务前面使用 API 网关(例如 Azure API 网关)来处理复合 UI 和身份验证,您是否还需要服务网格来处理服务发现和断路器? Azure API 网关中是否有任何功能可以应对此类挑战?如何?

API 网关仅处理进入 Kubernetes 集群的入口点,例如它向您的前端微服务发送请求。但是,在请求进入您的集群后,它什么也做不了。微服务之间可能仍然存在多次调用。您仍然想验证这些请求的身份验证,您仍然想确保服务之间有断路器等。理论上,您可以确保所有微服务都通过 API 网关相互调用,但是我不认为那是你想要的。

简而言之:不,因为 API 网关只是一个入口点,任何服务到服务的通信最好用服务网格处理。

您可以使用 API 网关来处理服务发现和断路器 - 但这会使它成为您部署的中心点,即所有外部和内部调用都必须通过网关进行路由。

服务网格在每个服务旁边部署一个额外的边缘组件("sidecar"),使整体行为分布式(但也更复杂)

根据您的具体要求,您可以使用一个、另一个、两者或 none

API 网关应用于 OSI 模型的第 7 层,或者您可以说管理来自外部网络的流量(有时也称为 north/south 流量),而服务网格应用于第 4 层OSI 模型或管理服务间通信(有时也称为 east/west 流量)。 API 网关功能的一些示例包括反向代理、负载平衡、身份验证和授权、IP 列表、速率限制等。

另一方面,Service Mesh 的工作方式类似于代理或 Sidecar 模式,它分离了服务的通信责任并处理其他问题,例如断路器、超时、重试、服务发现等.

如果您碰巧使用 Kubernetes 和微服务,那么您可能想探索其他解决方案,例如 Ambassador + Istio Or Kong 既可用作网关又可用作服务网格。

上面的 fatcook 解释得很好。请参阅 Azure-Frontdoor

因为这是试图在 Azure 上做与 Kong 相同的事情。 API 网关 + 处理控制平面级别的功能