【问题标题】:Good way to whitelist ingress traffic for JHub on EKS (AWS kubernetes)?将 EKS(AWS kubernetes)上 JHub 的入口流量列入白名单的好方法?
【发布时间】:2020-02-01 01:42:07
【问题描述】:

背景: 我有一个 EKS 集群(EKS 是 AWS 的托管 kubernetes 服务)。 我通过 helm 将应用程序部署到此 EKS 集群 (JupyterHub)。 我有一个 VPN 服务器。 我的应用程序(EKS 上的 JupyterHub)的用户在访问应用程序之前必须先连接到 VPN 服务器。 我通过删除弹性负载均衡器上的 0.0.0.0/0“全部允许”入口规则并添加仅允许来自 VPN 服务器的流量的入口规则来强制执行此操作。 上面引用的弹性负载均衡器由 JupyterHub 应用程序隐式创建,该应用程序通过 helm 部署到 EKS。

问题: 当我将更改部署到 EKS 中正在运行的 JuypyterHub 应用程序时,有时 [取决于更改] ELB 会被删除并重新创建。 这会导致与 ELB 关联的安全组以及入口规则也被重新创建。 这并不理想,因为在将更改部署到 JupyterHub/EKS 时很容易忽略这一点,并且开发人员可能会忘记验证安全组规则是否仍然存在。

问题: 有没有更强大的地方可以强制执行此入口网络规则(仅允许来自 VPN 服务器的流量)?

我有两个想法,但并不理想:

  • 使用 NACL。这实际上行不通,因为 NACL 是有状态的并且在子网级别运行,因此会增加管理 CIDR 的大量开销。
  • 我想改为将我的入口规则添加到与 EKS 工作程序节点关联的安全组,但由于同样的问题,这将不起作用。当您对 Jupyterhub/EKS 进行更新时,如果 ELB 被替换,则会将“允许所有流量”入口规则隐式添加到 EKS 工作节点安全组(允许来自 ELB 的所有流量)。这将覆盖我的入口规则。

【问题讨论】:

    标签: amazon-web-services networking kubernetes jupyterhub amazon-eks


    【解决方案1】:

    听起来您正在为 JupyterHub 使用 LoadBalanced 服务。处理集群入口的更好方法是使用单个入口控制器(如 nginx 入口控制器) - 通过不同的 helm chart 部署。

    然后,部署 JupyterHub 的 helm 图表,但使用带有 --set 参数的自定义值传递到版本中,告诉它使用 ClusterIP 服务而不是 LoadBalancer 类型。这样一来,可能会重新创建 ClusterIP 服务的 JupyterHub 版本的更改将无关紧要 - 因为您现在将使用 Ingress Controller 的 Ingress Rules 来管理 JupyterHub 的入口。

    使用 JupyterHub helm chart 的入口规则功能为您的 nginx 入口控制器配置入口规则:see docs here

    Nginx Ingress Controller 生成的 LoadBalancer 将保持持久/稳定,您可以单独定义安全组入口规则。

    通过使用入口控制器 + 入口规则访问模式,您可以有效地将入口从 JupyterHub 应用程序分离到 EKS 应用程序。

    关于入口和负载平衡器的主题

    使用 EKS/Helm 和负载平衡服务,默认情况下创建面向 Internet 的弹性负载平衡器。

    您可以将一些额外的注释添加到服务定义中,从而将其创建为面向内部的 LoadBalancer。

    这对于您的入口控制器(或您想使用 LoadBalancer 服务的任何其他地方)可能更适合您,因为它不会立即将应用程序暴露给开放的互联网。您提到您已经可以通过 VPN 访问您的 VPC 网络,因此用户仍然可以通过 VPN 进入,然后点击 LoadBalancer 主机名。

    我写了一个guide a while back on installing the nginx ingress controller here。它谈到了使用 DigitalOcean Kubernetes 执行此操作,但仍与 EKS 相关,因为它只是一个掌舵图。

    我在另一篇文章中讨论了一些额外的配置注释,您可以添加到入口控制器服务中,该服务会在负载均衡器的同时自动创建特定端口范围入口安全组规则。 (如果您发现每次创建它时都必须手动更新安全组上的入口规则,这是您的另一个选择)。请参阅有关自定义 Ingress Controller 负载均衡器和入口端口范围的帖子here

    您想要自动配置 LoadBalancer 入口源范围并将其设置为内部的配置值可以设置为:

    1. controller.service.loadBalancerSourceRanges
    2. service.beta.kubernetes.io/aws-load-balancer-internal:0.0.0.0/0

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-14
      • 2020-06-23
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多