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

Amazon EKS 安全组注意事项

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

集群安全组

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

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

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

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

协议 端口 目的地

推荐入站流量

All

All

自身

推荐出站流量

All

All

0.0.0.0/0

限制集群流量

如果需要限制控制层面与节点之间的开放端口,则将原定设置集群安全组修改为仅允许以下所需的最少端口。所需的最少端口与以前 Amazon EKS 版本中的端口相同。

协议 端口 目的地
最小入站流量 TCP

443

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

10250

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

443

集群安全组

最小出站流量* TCP

10250

集群安全组

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

控制层面和节点安全组

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

注意

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

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

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

如果您使用 开始使用 Amazon EKS 演练中的 AWS CloudFormation 模板启动节点,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

控制层面安全组

推荐入站流量

All

TCP

All

443,1025-65535

所有节点安全组

控制层面安全组

最小出站流量*

TCP

443

控制层面安全组

推荐出站流量

All

All

0.0.0.0/0

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

与节点关联的一个安全组中,只有一个安全组应当应用以下标签:有关标签的详细信息,请参阅 通过控制台使用标签

密钥

kubernetes.io/cluster/<cluster-name>

owned