简介
在 亚马逊云科技,我们让您能够使用 安全组 和
安全组规则
配置对流入和流出 亚马逊云科技 资源(如亚马逊弹性计算云 ( Amazon
EC2
) 实例、AW
S 数据库
、
应用程序负载均衡
器和容器)的流量的精细控制,从而从一开始就提供安全性。
8 月 10 日,我们宣布安全组支持
网络负载均衡器 (NLB)
,这是我们最受欢迎的功能之一。借助这项新功能,您可以将安全组连接到网络负载均衡器,从而过滤负载均衡器接受的流量并转发到您的后端应用程序。通过使用安全组,您可以配置规则,确保网络负载均衡器仅接受来自可信 IP 的流量,并集中执行访问控制策略,从而增强环境的安全状况。
通过此次启动,您可以向网络负载均衡器分配多个安全组。您可以使用默认的亚马逊虚拟私有云 (A
mazon VPC
) 安全组,也可以连接现有安全组,或者为 NLB 创建新的安全组。在此版本之前,云管理员通过在实例级别添加安全组规则来管理对应用程序的访问。由于这些规则计入每个实例的安全组规则配额,因此它们可能会限制客户可以在其 亚马逊云科技 账户中部署的 NLB 数量。通过在网络负载均衡器中使用安全组和入站规则,应用程序所有者可以限制对资源的访问,确保客户端只能通过负载均衡器访问这些资源。如需更多信息,请参阅
入门指南
。该指南包括使用安全组创建新 NLB 的所有步骤。
亚马逊弹性 Kubernetes 服务 (
Amazon EKS
) 是一项托管服务,可用于在 亚马逊云科技 上运行容器化应用程序。亚马逊 EKS 本地集成了许多 亚马逊云科技 服务,包括亚马逊弹性负载均衡器 (ELB),这些服务用于在 Kubernetes 集群之外公开应用程序。客户经常使用
亚马逊云科技 负载均衡器控制器
来管理 Amazon EKS 集群的 亚马逊云科技 弹性负载均衡器。 当您创建 LoadBalancer 类型的 Kubernetes 服务时,控制器会预置 NLB。
在 2.6.0 及更高版本中,控制器会自动为网络负载均衡器、EC2 实例和配置为使用 Pod 安全组功能的 Pod 创建和/或应用安全组。使用控制器配置/应用网络负载均衡器安全组可以通过多种方式增强节点的安全性。首先,可以通过引用负载均衡器的安全组来简化入口规则。其次,控制器为每个集群保留恒定数量的安全组规则,以防止出现扩展问题。
在这篇文章中,我们将演示当 Kubernetes 应用程序被 NLB 暴露时,Amazon EKS 如何处理安全组,从而增强端到端的安全态势。
解决方案概述
在 Kubernetes 中,容器是最小的部署单元。这些 pod 可以作为 Kubernetes 服务公开,这使集群内部和外部的其他应用程序可以访问这些容器。 负载均衡器
类型的 Kubernetes 服务 是暴露在 Kubernetes 集群中运行的应用程序的常用方法。
亚马逊 EKS 支持 亚马逊云科技 负载均衡器控制器,该控制器为 Kubernetes 集群管理 亚马逊云科技 弹性负载均衡器。 当您创建 LoadBalancer 类型的 Kubernetes 服务时,控制器负责创建网络负载均衡器。
控制器会监视 Pod 的任何更改,并将通过更新负载均衡器的配置来协调这些更改。
在此版本之前,必须在部署 Kubernetes Pod 的实例上配置应用程序的网络访问规则。随着网络负载均衡器数量的增加,在达到每个账户允许的最大安全组规则数量之前,您必须管理的规则数量也会增加。这影响了可以在 亚马逊云科技 账户中创建的 NLB 的数量。
在 亚马逊云科技 负载均衡器控制器的 2.6.0 版本中,创建负载均衡器类型的服务时,安全组会自动连接到您的前端和后端。前端安全组允许您控制可以路由到负载均衡器的流量。
控制器允许你通过名为 service.beta.kubernetes.io/aws-load-balancer-security-groups 的 Kubernetes 注释来指定现有的安全组。
将此注释添加到服务时,控制器会附加注释所引用的安全组。这实际上允许您的安全团队管理分配给负载均衡器的安全组。另一方面,省略注释时,控制器会自动创建安全组并将其附加到负载均衡器。此外,控制器将 入站 cidr 和 侦听端口的规则添加到前端
安全组
。
亚马逊云科技 负载均衡器控制器还创建共享的后端安全组,以控制网络负载均衡器与其后端目标(例如属于安全组的实例或 Pod)之间的流量。
注意:负载均衡器控制器不会为 Pod 创建安全组。为了让控制器将安全组连接到一组 Pod,需要使用 Pod
安全组 功能创建 Pod
。
当服务中省略安全组注释时,控制器会自动添加实例组规则,允许来自负载均衡器后端安全组的出口流量。当安全组注释 服务.beta.kubernetes.
io/aws-load-balancer-manage-backend-security-group-rules 引用安全组时,自动规则管理将被禁用。
草率排练
在进入下一节之前,您必须确保 Amazon EKS 集群已启动并正在运行。否则,您可以使用 Amazon EKS 集群创建
指南
中提到的方法之一创建集群 。要在您的集群上安装 亚马逊云科技 负载均衡器控制器,请按照 Amazon
EKS 用户指南中的说明进行操作。
如果控制器已经安装,则必须将其更新到最新版本(v2.6.0 或更高版本)。亚马逊云科技 负载均衡器控制器使用
服务账户 的 亚马逊云科技 IA M 角色 (IRSA)
来访问亚马逊弹性负载均衡器 API。在使用 IRSA 之前,请务必 为集群创建
亚马逊云科技 IAM OIDC 身份提供商
。将 OIDC 提供商与您的集群关联后,请按照
此处
的步骤创建策略和服务帐号。
helm update aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=<cluster-name> \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
在部署 Kubernetes 应用程序之前,请确保控制器 Pod 处于活动状态。
kubectl get deploy -n kube-system aws-load-balancer-controller
现在让我们部署一个示例 Web 应用程序。
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample-app
labels:
role: webserver
spec:
replicas: 4
selector:
matchLabels:
role: webserver
template:
metadata:
labels:
role: webserver
spec:
containers:
- name: frontend
image: httpd
ports:
- containerPort: 80
command: [ "/bin/sh" ]
args: ["-c", "echo '<html> <head> <title>Amazon EKS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon EKS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on Amazon EKS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground"]
---
apiVersion: v1
kind: Service
metadata:
name: webserver
namespace: default
labels:
role: webserver
annotations:
service.beta.kubernetes.io/aws-load-balancer-type: "external"
service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing"
service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "instance"
spec:
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
selector:
role: webserver
type: LoadBalancer
EOF
现在,
从新创建的 Kubernetes 服务中找到负载均衡器的名称。
注意:您可能需要等待几分钟才能成功配置负载均衡器。
kubectl 获取服务示例应用程序
接下来,登录
亚马逊云科技 EC2 控制台
并找到 负载均衡器 。您可以在 “安全 ” 选项卡下找到创建 的安全 组。
最新版本的 亚马逊云科技 负载均衡器控制器向后兼容以前的版本,并继续支持现有的网络负载均衡器。控制器仅为 Lo ad
Balancer 类型的新服务配置带有安全组的 NLB。您可以将安全组应用到具有 实例
和 IP
目标类型以及内部和外部方案的 NLB。控制器提供了一个功能标志,允许您停用 NLB 安全组的自动创建。 在安装或更新控制器时,你可以使用--feature-gates 选项提供 nlbsecurityGroup=
False。
Amazon EKS 强烈建议您使用适用于 NLB 的安全组来改善应用程序的安全状况。
结论
在这篇文章中,我们向您展示了如何创建 LoadBalancer 类型的服务,并观察了 亚马逊云科技 负载均衡器控制器如何自动创建安全组并将其分配给前端,即网络负载均衡器及其后端目标。
在网络负载均衡器安全组的支持下,您可以控制对应用程序的访问并改善其安全状况。此功能可在所有 亚马逊云科技 商业区域使用,无需额外付费。有关使用安全组和推荐的安全组规则 的说明,请参阅网络负载均衡器
用户指南
。亚马逊弹性负载均衡器和亚马逊 EKS 长期以来一直支持应用程序负载均衡器 (ALB) 的安全组。随着此功能的推出,您在使用ALB和NLB时可以获得一致的用户体验。
作为本次更新的一部分,我们还发布了新版本的 AWS 负载均衡器控制器 (v2.6.0),它允许您在创建 LoadBalancer 类型的 Kubernetes 服务时将安全组应用于 NLB。
安全组的自动创建通过直接控制负载均衡器级别而不是实例级别的访问来增强在 Kubernetes 集群中运行的容器化工作负载的端到端安全性。有关注释和示例的完整列表,请参阅
亚马逊云科技 负载均衡器控制器
指南。
如果您在 亚马逊云科技 上运行 Kubernetes 并想开始使用带有网络负载均衡器的安全组,请立即升级到 亚马逊云科技 负载均衡器控制器的 v2.6.0。有关更多详细信息 ,请参阅
安装指南
。一如既往,我们欢迎您的反馈。
如果你遇到问题或有建议,请考虑在
GitHub
中打开问题 ,在
Re:
Post 上发布问题 ,或者在容器路线图中创建问题或为问题投赞票。