Amazon web services 将EKS(AWS kubernetes)上JHub的入口流量列入白名单的好方法?

Amazon web services 将EKS(AWS kubernetes)上JHub的入口流量列入白名单的好方法?,amazon-web-services,networking,kubernetes,jupyterhub,amazon-eks,Amazon Web Services,Networking,Kubernetes,Jupyterhub,Amazon Eks,上下文: 我有一个EKS集群(EKS是AWS的托管kubernetes服务)。 我通过helm将一个应用程序部署到这个EKS集群(JupyterHub)。 我有一个VPN服务器。 我的应用程序(EKS上的JupyterHub)的用户必须先连接到VPN服务器,然后才能访问该应用程序。 我通过删除弹性负载平衡器上的0.0.0.0/0“allow all”入口规则,并添加一个只允许来自VPN服务器的流量的入口规则来实现这一点。 上面提到的弹性负载平衡器是由JupyterHub应用程序隐式创建的,该应用

上下文: 我有一个EKS集群(EKS是AWS的托管kubernetes服务)。 我通过helm将一个应用程序部署到这个EKS集群(JupyterHub)。 我有一个VPN服务器。 我的应用程序(EKS上的JupyterHub)的用户必须先连接到VPN服务器,然后才能访问该应用程序。 我通过删除弹性负载平衡器上的0.0.0.0/0“allow all”入口规则,并添加一个只允许来自VPN服务器的流量的入口规则来实现这一点。 上面提到的弹性负载平衡器是由JupyterHub应用程序隐式创建的,该应用程序通过helm部署到EKS

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

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

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

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

听起来您正在为JupyterHub使用负载平衡服务。处理进入集群的入口的更好方法是使用单个入口控制器(如nginx入口控制器)——通过不同的helm图表部署

然后,部署JupyterHub的helm图表,但使用传递到版本中的自定义值以及
--set
参数来告诉它使用ClusterIP服务而不是LoadBalancer类型。这样,对JupyterHub版本的更改(可能会重新创建ClusterIP服务)就无关紧要了,因为您现在将使用入口控制器的入口规则来管理JupyterHub的入口

使用JupyterHub helm图表的入口规则功能为nginx入口控制器配置入口规则:

Nginx入口控制器生成的LoadBalancer将保持持久/稳定,您可以在此基础上单独定义安全组入口规则

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

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

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

您可以向服务定义中添加一些额外的注释,这些注释将创建一个面向内部的LoadBalancer

对于您的入口控制器(或任何其他您想要使用LoadBalancer服务的地方),这可能比您更可取,因为它不会立即将应用公开给开放的internet。您提到您已经有VPN访问您的VPC网络,因此用户仍然可以使用VPN,然后点击LoadBalancer主机名

我写了一封信。它说要用DigitalOcean Kubernetes来做这件事,但它仍然与EKS有关,因为它只是一张舵图

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

自动配置LoadBalancer入口源范围并将其设置为内部所需的配置值可以通过以下设置:

  • controller.service.loadBalancerSourceRanges
  • service.beta.kubernetes.io/aws-load-balancer-internal:0.0.0/0
  • 希望有帮助