Amazon EKS 安全组注意事项 - Amazon EKS

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Amazon EKS 安全组注意事项

以下部分介绍了集群、控制层面和集群的节点安全组的建议或所需的最低安全组设置。这些注意事项取决于您使用的 Kubernetes 版本和Amazon EKS平台版本。

集群安全组

Amazon EKS 集群(从 Kubernetes 版本 1.14 和平台版本 开始eks.3)在创建集群安全组时创建集群安全组。当早期版本的集群升级到此 Kubernetes 版本和平台版本时,也会发生这种情况。集群安全组旨在允许来自控制层面和托管节点组的所有流量在彼此之间自由流动。通过将集群安全组分配给由 创建的弹性网络接口以允许 Amazon EKS 控制层面与托管节点组实例进行通信,您无需配置复杂的安全组规则以允许此通信。分配到此安全组的任何实例或网络接口都可以与此安全组的其他资源自由通信。

您可以在 中的集群AWS 管理控制台的 Networking (联网) 部分下检查集群的集群安全组,或者使用AWS CLI以下命令:

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.clusterSecurityGroupId

我们建议您将集群安全组添加到所有现有和将来的节点组。有关更多信息,请参阅 中的您的 VPC Amazon VPC 用户指南的安全组。 Amazon EKS 托管节点组将自动配置为使用集群安全组。

协议 端口 Source (源) 目的地

推荐入站流量

全部

全部

自身

推荐出站流量

全部

全部

0.0.0.0/0

限制集群流量

如果您需要限制控制层面和节点之间的开放端口,则可以修改默认的集群安全组以仅允许以下必需的最小端口。所需的最小端口数与早期Amazon EKS版本中相同。

协议 端口 Source (源) 目的地
最小入站流量 TCP

443

集群安全组
最小入站流量* TCP

10250

集群安全组
最小出站流量 TCP

443

集群安全组

最小出站流量* TCP

10250

集群安全组

*如果需要,应包含您希望节点用于节点间通信的任何协议和端口。节点还需要对 Amazon EKS APIs 进行出站 Internet 访问,以便在启动时进行集群自检和节点注册,或者您已在 中实施了所需的必要设置私有集群。要拉取容器映像,它们需要访问 Amazon S3、 Amazon ECR APIs 以及需要从中拉取映像的任何其他容器注册表,例如 DockerHub。 有关更多信息,请参阅 AWS 一般参考 中的 AWS IP 地址范围

控制层面和节点安全组

对于在 Kubernetes 版本 1.14 之前创建的Amazon EKS集群和平台版本 eks.3,通过手动创建控制层面安全组并在创建集群时指定该安全组,配置了节点通信的控制层面。在创建集群时,此安全组附加到由 创建的网络接口Amazon EKS,这些接口允许控制层面和节点之间的通信。这些网络接口的描述Amazon EKS <cluster name>中包含 。

注意

如果您直接使用 API 或 等工具AWS CloudFormation来创建集群,但未指定安全组,则 VPC 的默认安全组将应用于控制层面跨账户网络接口。

您可以在 中集群的 AWS 管理控制台Networking (联网) 部分(作为 Additional security groups (其他安全组) 列出)下或使用以下命令检查集群的控制层面安全组AWS CLI:

aws eks describe-cluster --name <cluster_name> --query cluster.resourcesVpcConfig.securityGroupIds

如果您使用AWS CloudFormation演练中的开始使用 Amazon EKS模板启动节点, 将AWS CloudFormation修改控制层面安全组以允许与节点通信。 Amazon EKS 强烈建议您为每个控制层面使用专用安全组(每个集群一个)。如果您与其他 Amazon EKS 集群或资源共享控制层面安全组,您可以阻止或中断与这些资源的连接。

节点的安全组和控制层面与节点的通信的安全组已设置为阻止与节点中的特权端口的通信。如果您的应用程序需要从控制层面或节点添加的入站或出站访问,则必须将这些规则添加到与您的集群关联的安全组。有关更多信息,请参阅 Amazon VPC 用户指南 中的您的 VPC 的安全组.

注意

要允许特权端口上的代理功能或自行运行 CNCF 一致性测试,您必须编辑控制层面和节点的安全组。节点侧的安全组需要允许从控制层面对端口 0-65535 进行入站访问,控制层面侧需要允许对端口 0-65535 上的节点进行出站访问。

控制层面安全组
协议 端口范围 Source (源) 目的地
最小入站流量

TCP

443

所有节点安全组

集群终端节点私有访问启用时:生成 API 服务器客户端流量的任何安全组(如集群的 VPC 内堡垒主机上的 kubectl 命令)

推荐入站流量

TCP

443

所有节点安全组

集群终端节点私有访问启用时:生成 API 服务器客户端流量的任何安全组(如集群的 VPC 内堡垒主机上的 kubectl 命令)

最小出站流量

TCP

10250

所有节点安全组

推荐出站流量

TCP

1025-65535

所有节点安全组

节点安全组
协议 端口范围 Source (源) 目的地
最小入站流量 (来自其他节点)

您希望节点用于节点间通信的任何协议

您希望节点用于节点间通信的任何端口

所有节点安全组

最小入站流量 (来自控制层面)

TCP

10250

控制层面安全组

推荐入站流量

全部

TCP

全部

443,1025-65535

所有节点安全组

控制层面安全组

最小出站流量*

TCP

443

控制层面安全组

推荐出站流量

全部

全部

0.0.0.0/0

*节点还需要通过 Internet 或 VPC 终端节点访问 Amazon EKS APIs ,以便在启动时进行集群自检和节点注册。要拉取容器映像,它们需要访问 Amazon S3 和 Amazon ECR APIs (以及任何其他容器注册表,例如 DockerHub)。有关更多信息,请参阅 中的 AWS IP 地址范围AWS General Reference私有集群

与您的节点关联的一个(且只有一个)安全组应应用以下标签:有关标记的更多信息,请参阅通过控制台使用标签

密钥

kubernetes.io/cluster/<cluster-name>

owned