AKS 中的 Ocelot API 网关实现

Posted

技术标签:

【中文标题】AKS 中的 Ocelot API 网关实现【英文标题】:Ocelot API Gateway implementation in AKS 【发布时间】:2021-02-25 22:18:42 【问题描述】:

我正在创建 AKS 集群,我想使用 API 网关 (Ocelot) 来路由,并对网关后面的容器(微服务)的请求进行身份验证。我的问题是如何实现这一目标?我知道我必须在节点内部署 ocelot API 网关,但我不知道如何配置所有流量以通过 API 网关。找不到可以帮助我的示例或方向。我需要采取哪些步骤?或者是否有更好的方法来完成所需的场景?

【问题讨论】:

“找不到可以帮助我的示例或方向”一个简单的 Google 搜索将带您到 docs.microsoft.com/en-us/dotnet/architecture/microservices/… 和这个 ocelot.readthedocs.io/en/latest/features/kubernetes.html @CSharpRocks 我已经读过了。目前还不是 100% 清楚如何做到这一点,例如,我问我应该使用 Ingress 还是使用 Network Policy 就足够了 我希望除了通过 API 网关外,没有任何微服务可以直接访问 【参考方案1】:

如果您使用 Ocelot 作为 API 网关,您必须创建一个 .NET 项目,其中包含您要使用的路由的配置文件。然后,您可以在集群中使用 Deployment 以及运行 API 的容器来部署它,并在 API 网关前面使用 ClusterIP 服务。此时,您应该在内部测试调用是否从 ClusterIP 正确路由到 API Gateway 和您的 API。然后,您可以使用负载均衡器服务、入口控制器或 Azure 应用程序网关在 Internet 上公开您的 API 网关。

另一种方法是完全不使用 Ocelot API 网关,而是使用 Ingress 控制器并直接在其中配置路由。

【讨论】:

感谢您的帮助,我已经准备好了 Ocelot 应用程序,只是不知道如何在 Kubernetes 集群中实现它。默认情况下,所有 pod 都可以从 Internet 访问,对吧?所以我只想公开 Ocelot API Gateway。为此,我需要使用网络策略 Calico 或 Azure,我做对了吗? (或将整个集群设为私有 - 但从网络方面来看这看起来太复杂了) "默认情况下,所有 pod 都可以从 Internet 访问,对吗?"不,恰恰相反。 你确定吗?默认情况下,pod 是非隔离的;他们接受来自任何来源的流量/kubernetes.io/docs/concepts/services-networking/… 看看这个:youtube.com/watch?v=131_TIa_ftI&feature=youtu.be&t=38 K8s 网络是一个扁平网络,所以是的,在内部,默认情况下所有 pod 都可以互相看到。

以上是关于AKS 中的 Ocelot API 网关实现的主要内容,如果未能解决你的问题,请参考以下文章

Ocelot一款.NET下的API网关介绍

Ocelot API网关的实现剖析

azure api 网关与 AKS 502 集成 - Web 服务器在充当网关或代理服务器时收到无效响应

Ocelot Api网关教程- QoS

Ocelot.JwtAuthorize:一个基于网关的Jwt验证包

.NET Core开源API网关 – Ocelot中文文档