Amazon EKS 安全组注意事项 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

Amazon EKS 安全组注意事项

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

集群安全组

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

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

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

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

协议 端口 目的地

推荐入站流量

全部

全部

自身

推荐出站流量

全部

全部

0.0.0.0/0

限制集群流量

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

协议 端口 目的地
最小入站流量 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 对节点的出站访问。

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

TCP

443

所有节点安全组

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

推荐入站流量

TCP

443

所有节点安全组

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

最小出站流量

TCP

10250

所有节点安全组

推荐出站流量

TCP

1025-65535

所有节点安全组

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

您预期节点用于节点间通信的任何协议

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

所有节点安全组

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

TCP

10250

控制层面安全组

推荐入站流量

全部

TCP

全部

443,1025-65535

所有节点安全组

控制层面安全组

最小出站流量*

TCP

443

控制层面安全组

推荐出站流量

全部

全部

0.0.0.0/0

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

如果您有多个与节点关联的安全组,则其中一个安全组必须应用了以下标签。如果您只有一个与节点关联的安全组,则标签是可选的。有关标记的更多信息,请参阅通过控制台使用标签

Key

kubernetes.io/cluster/<cluster-name>

owned