如何理解 Istio Ingress, 它与 API Gateway 有什么区别?

服务网格与 API 网关之间是什么关系?是不是使用了 Istio 就可以替代了 API 网关?Istio 的 API 网关是如何运作的?有哪些方式暴露 Istio mesh 中的服务?这篇文章给为你解答。

API 网关作为客户端访问后端的入口,已经存在很长时间了,它主要是用来管理”南北向“的流量;近几年服务网格开始流行,它主要是管理系统内部,即“东西向”流量,而像 Istio 这样的服务网格还内置了网关,从而将系统内外部的流量纳入了统一管控。这经常给初次接触 Istio 的人带来困惑——服务网格与 API 网关之间是什么关系?是不是使用了 Istio 就可以替代了 API 网关?Istio 的 API 网关是如何运作的?有哪些方式暴露 Istio mesh 中的服务?这篇文章给为你解答。

主要观点

  • 服务网格诞生的初衷是为了解决分布式应用的内部流量的管理问题,而在此之前 API 网关已存在很久了。
  • 虽然 Istio 中内置了Gateway,但是你仍可以使用自定义的 Ingress Controller 来代理外部流量。
  • API 网关和服务网格正朝着融合的方向发展。

    如何暴露 Istio mesh 中的服务?

    下图展示了使用 Istio Gateway、Kubernetes Ingress、API Gateway 及 NodePort/LB 暴露 Istio mesh 中服务的四种方式。

file
暴露 Kubernetes 中服务的几种方式

其中阴影表示的是 Istio mesh,mesh 中的的流量属于集群内部(东西向)流量,而客户端访问 Kubernetes 集群内服务的流量属于外部(南北向)流量。不过因为 Ingress、Gateway 也是部署在 Kubernetes 集群内的,这些节点访问集群内其他服务的流量就难以归属了。

file

由于 NodePort/LoadBalancer 是 Kubernetes 内置的基本的暴露服务的方式,本文就不讨论这种方式了。下文将对其他三种方式分别作出说明。

使用 Kubernetes Ingress 暴露服务

我们都知道 Kubernetes 集群的客户端是无法直接访问 Pod 的 IP 地址的,因为 Pod 是处于 Kubernetes 内置的一个网络平面中。我们可以将 Kubernetes 内的服务使用 NodePort 或者 LoadBlancer 的方式暴露到集群以外。同时为了支持虚拟主机、隐藏和节省 IP 地址,可以使用 Ingress 来暴露 Kubernetes 中的服务。Kubernetes Ingress 原理如下图所示。

file


相关文章:
如何理解 Istio Ingress, 它与 API Gateway 有什么区别?

为者常成,行者常至