首页 > 解决方案 > Kubernetes环境中的API网关

问题描述

我仍在学习微服务架构,并不清楚如何解决给定的问题。

假设我有一个 k8s 集群,其中部署了一些 BE 微服务、FE 应用程序或任何其他服务。我还有一个入口控制器,它确实消耗流量和路由到服务。

我想在该设置中的某个地方放置 API 网关,它会对请求执行一些额外的(可定制的)操作,例如身份验证、日志记录、添加标头等。我们可以将此功能包装为整个集群的反向代理。我找到了三种可能的解决方案:

Ingress前面的AGW外部集群:

方法一

AGW 作为入口控制器:

方法二

Ingress 后集群内的 AGW:

方法 3

在第一种方法中,AGW 将所有流量路由到入口,但是我们需要有一个“私有域”,入口将被暴露在下面。AGW 将暴露在公共域下并将流量路由到这个私有域。这不是很好,因为 Ingress 没有暴露在公共领域。例如,当 Ingress 进行一些重定向并在 Location 标头中使用它的私有域而不是公共域时,我们遇到了一个问题。

在第二种方法中,AGW 功能嵌入在 Ingress Controller 中,但是我还没有找到适合我们需要的控制器。构建自定义入口控制器听起来不太好。

在第三个 AGW 中,在集群内部,但是 Ingress 没有做任何路由。所有路由(和负载平衡)都将在 AGW 中发生。

还有其他解决方案吗?如果不是,您会推荐其中的哪一个?或者也许有一种不同的方法来包含提到的反向代理功能?

标签: kubernetesmicroservicesreverse-proxykubernetes-ingressapi-gateway

解决方案


第二种和第三种解决方案通常效果最好。Ingress 不进行负载均衡,它是配置负载均衡规则的服务对象。

如果您可以设法使用 Api Gateway 作为 Ingress Controller,例如 Ambassador 或 Istio(我所知道的就是这些),那就更好了。您将删除一个额外的额外网络跃点。
因为ambassador 和 Istio 都是 kubernetes 思想,所以使用 kubernetes 资源对象,您可以使用这些 Ingress Controller 控制任何您喜欢的东西。


推荐阅读