带有 docker 的 API 网关都有哪些选项?

Posted

技术标签:

【中文标题】带有 docker 的 API 网关都有哪些选项?【英文标题】:What are the option to API gateway with docker?带有 docker 的 API 网关有哪些选项? 【发布时间】:2015-10-11 08:30:26 【问题描述】:

我创建了几个 RESTful 微服务并将它们 docker 化。现在我想为他们提供一个基于 Web 的 UI,并能够创建用户并授予他们使用某些 API 的权限。

我知道我需要某种 API 网关。我的第一个想法是我总是可以用蛮力的方式来做:创建一些 django 应用程序,它可以为 UI 提供服务,并手动代理所有对 API 的请求,但这似乎很乏味。也许有一些替代方案?我已经准备好使用 Tyk,但找不到任何有关添加用户和授予用户权限的信息。

我可能可以创建一个用作 API 网关的应用程序,并通过编写一些对其进行建模的代码来自动代理请求。因此,例如,我基本上需要外部 url 到实际 api url 和一些授权逻辑之间的映射。也许已经有类似的东西了?

【问题讨论】:

【参考方案1】:

我一直在寻找类似的东西,包括对速率限制、UI 控制台等的支持。它归结为一些免费增值工具,例如:

apigee mashape apiary 3scale.net

还有一些开源的:

tyk kong ApiAxle WSO2 API Umbrella

我决定使用 tyk,因为它有一个不错的 UI 控制台和可靠的文档。他们都在 Quora 上提到过,当你想去购物时这很好:)

【讨论】:

如何创建用户并授予他们 API 权限? @user1685095 请参阅我关于涉及用户/身份验证/权限的解决方案的新答案。当然,它专注于 AWS - 因此,如果需要对每个 API 网关本身提出更广泛的建议,那么这里的答案会更好(很好的一个 @milan!)。【参考方案2】:

如果您喜欢亲自动手,您可以很容易地实现自己的简化 API 网关。我相信这种方法非常适合微服务范式——实现具有有限功能的简单服务,它只做一件事,但做得很好。

我已经写了一篇关于这个主题的教程(使用 Node.js 为 Dockerized 微服务实现简单的 API 网关)。我的例子是大约 100 行 javascript 代码,它使用 node-docker-monitor 监听 Docker 事件,使用 http-proxy 处理来自客户端的 HTTP 请求。

https://memz.co/api-gateway-microservices-docker-node-js/

或使用 SkyDNS 和 nginx 的替代解决方案

https://memz.co/reverse-proxy-nginx-docker-microservices/

【讨论】:

【参考方案3】:

除非我弄错了(我对容器有点陌生)——我认为所有这些解决方案都来自 Amazon AWS(AWS API Gateway 本身位于其中任何一个前面以供公众访问) 也属于免费增值解决方案,用于在公共 API 网关后面运行/编排 Docker 容器:

AWS ECS - Elastic Container Service AWS EKS - Elastic Kubernetes Service AWS Fargate

以下是有关使用 AWS API Gateway 的 AWS 博客:

Using Amazon API Gateway with microservices deployed on Amazon ECS API Gateway as an Ingress Controller for Amazon EKS

根据您的要求,其中任何一个(也来自亚马逊 AWS)也应该满足用户、账户、权限、授权等方面的要求:

AWS Identity Access Management AWS Cognito

顺便说一句,我不认为任何中间管理/计算/服务器对于使用其中任何一个进行架构都是必要的(尽管仍然可以出于任何目的插入来自AWS EC2 和/或AWS Lambda 的计算),因为它们都是 AWS 服务 [管理其功能] 自己。

【讨论】:

这显然侧重于 AWS - 但在大多数情况下,所有主要云平台肯定都有自己的类似解决方案

以上是关于带有 docker 的 API 网关都有哪些选项?的主要内容,如果未能解决你的问题,请参考以下文章

【分享】啥是API网关?大公司为啥都有API网关?

为什么都有API网关?聊聊API网关的作用

无服务器框架,API 网关 URL 何时更改?

带有 url 回调选项的短信网关

docker中无法通过ZUUL api网关连接微服务

带有 API 网关的微服务