如何在 Kubernetes pod 中分离内部(服务到服务)和外部(公共)API?

问题描述 投票:0回答:1

我有一个 Node.JS 服务器在 Kubernetes 集群内运行。我想了解是否有适当的方法可以通过 Kubernetes 将某些 API 端点设为私有,将某些 API 端点设为公共。

为了简化这一点,请考虑以下情况:

  • API 1:
    /products/:id
    (需要从外部访问)
  • API 2:
    /prices
    (仅需要由同一 Kubernetes 集群中的其他内部微服务或 pod 访问)

注意:我正在使用 Ingress Nginx 通过服务将流量路由到此 pod

目前,我通过在映射到 2 个 Kubernetes 服务的不同端口运行 2 个 Node.js Express 服务器实例来实现这一目标。 Ingress 中提到了其中一个(公共),而另一个(私有)则没有。

我不太喜欢这种方法,因为我必须运行 2 台服务器并在服务中维护如此多的细节。有没有更好的方法来实现这一点,也许是 Istio(有人用它来实现这个目的)吗?

过去我使用 AWS API Gateway 来处理这个问题,但是这次我没有这个选项,并且想知道 Kubernetes 中的某些东西是否可以处理这个问题。

如果我遗漏了什么,很乐意提供更多详细信息。

node.js kubernetes istio
1个回答
0
投票

入口是一个成熟的 API 网关,因此您可以使用 NGINX、Istio 等功能来限制访问。您不需要仅仅为了避免暴露特定端点而分割代码库。

从逻辑上讲,在您的用例中,您只需要定义白名单路径的路由 - 这个 nginx 答案 提供了一个示例。 Istio 在其VirtualService 资源中提供了类似的选项,包括表达路由规则的能力。

您甚至可以编写自己的入口插件以获取更多信息 复杂的逻辑。在这种情况下,请选择以高级语言支持此功能的入口控制器。其中不少,包括 Istio,都支持 LUA 脚本语言,这非常容易学习。

不过从简单的角度来看,这也是一个 API 设计问题。例如,对于不应公开的端点采用诸如

/internal
之类的路径将使 API 路由随着时间的推移易于维护。

© www.soinside.com 2019 - 2024. All rights reserved.