【问题标题】:How to prevent direct access to deployed API services exposed by nginx ingress controller如何防止直接访问 nginx 入口控制器暴露的已部署 API 服务
【发布时间】:2019-05-09 10:58:58
【问题描述】:

我已经使用 kops 和 ingress nginx 控制器在 aws 上部署了一个应用程序。

据我了解,入口控制器似乎允许公开部署在集群中的每个服务。所以这让我对安全性和身份验证感到好奇。

我的项目的架构是什么? 我在一个集群中部署了 3 个服务:

  1. -client-ui(前端)

  2. -authentication-api(创建/生成/验证 JWT 令牌并调用其他服务,如 data-api)

  3. -data-api(在数据库中创建/读取/更新/删除敏感数据的 API)

所以问题是:如果 Ingress 控制器暴露了所有服务,如果不允许用户访问,你如何限制对特定服务的访问?

在这种情况下,data-api 应该只能从 authentication-api 访问。所以如果在我的浏览器中我输入 www.client-ui.com/data/getXXX 显然我应该无法访问该端点。如果他的 jwt 令牌已经过验证,我应该只能从 authentication-api 做到这一点。

所以我猜有些 api 应该只能从集群内部访问,有些应该是公开的!?

你能解释一下我该怎么做吗?

谢谢

【问题讨论】:

    标签: amazon-ec2 kubernetes kops nginx-ingress


    【解决方案1】:

    根据云提供商的不同,入口服务上有不同的注释。您想要的是特定入口资源的内部负载均衡器。 在您的情况下(AWS),这应该是:

    annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true"

    见:

    【讨论】:

    • 部署一个入口控制器不会自动暴露所有服务;只是您为其创建 Ingress 的那些。所以我可以为我的客户端和身份验证 API 创建入口,并为 data-api 创建一个 clusterIP 服务,因为 clusterIP 只能在内部访问?
    • 你的入口定义所做的是:它配置你的入口控制器 pod。在您的情况下,入口控制器 pod 是一个 nginx 应用程序。这个 pod 需要一个负载均衡器才能从外部网络使用。在您的入口控制器 pod 和此服务之间,您有 1:1 的关系。如果您想拥有不同类型的可访问性,您通常会部署多个具有不同类型(入口类)的入口控制器。在您的入口定义中,您可以指定此入口类(内部/外部/等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多