网络配置 - AWS ParallelCluster

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

网络配置

AWS ParallelCluster 使用 Amazon 虚拟私有云 (VPC) 进行联网。VPC 提供了一个灵活且可配置的网络平台,您可以在其中部署集群。

VPC 必须有 DNS Resolution = yesDNS Hostnames = yes 和 DHCP 选项以及该区域的正确域名。默认 DHCP 选项集已经指定了所需的 AmazonProvidedDNS。如果指定多个域名服务器,请参阅 Amazon VPC 用户指南 中的 DHCP 选项集

AWS ParallelCluster 支持以下高级配置:

  • 适用于头节点和计算节点的一个子网。

  • 两个子网,头节点位于一个公有子网中,计算节点位于私有子网中。子网可以是新的子网,也可以是现有子网。

所有这些配置都可以在有或没有公有 IP 地址的情况下运行。AWS ParallelCluster 也可以部署为对所有 AWS 请求使用 HTTP 代理。这些配置的组合会产生许多部署方案。例如,您可以配置一个公有子网,允许所有人通过 Internet 进行访问。或者,您可以配置一个完全私有的网络,对所有流量使用 AWS Direct Connect 和 HTTP 代理。

从 AWS ParallelCluster 3.0.0 开始,可以为每个队列配置不同的 SecurityGroupsAdditionalSecurityGroupsPlacementGroup 设置。有关更多信息,请参阅 HeadNode/NetworkingSlurmQueues/NetworkingAwsBatchQueues/Networking

有关一些网络场景的插图,请参阅以下架构图。

AWS ParallelCluster 位于单个公有子网中

此架构的配置需要以下设置:

# Note that all values are only provided as examples HeadNode: ... Networking: SubnetId: subnet-12345678 # subnet with internet gateway #ElasticIp: true | false | eip-12345678 Scheduling: Scheduler: slurm SlurmQueues: - ... Networking: SubnetIds: - subnet-12345678 # subnet with internet gateway #AssignPublicIp: true

在此配置中,必须为集群的所有实例分配一个公有 IP 才能访问互联网。为此,请执行以下操作:

  • 通过为 HeadNode/Networking/SubnetId 中使用的子网开启“启用自动分配公有 IPv4 地址”设置,或者通过在 HeadNode/Networking/ElasticIp 中指定弹性 IP,确保为头节点分配公有 IP 地址。

  • 通过为 Scheduling/SlurmQueues/Networking/SubnetIds 中使用的子网开启“启用自动分配公有 IPv4 地址”设置,或者通过在 Scheduling/SlurmQueues/Networking 中将 AssignPublicIp 设置为 true,确保为计算节点分配公有 IP 地址。

  • 如果您为头节点定义 p4d 实例类型或定义具有多个网络接口或使用网络接口卡的其他实例类型,则必须将 HeadNode/Networking/ElasticIp 设置为 true 以提供公有访问权限。只能将 AWS 公有 IP 分配给使用单个网络接口启动的实例。对于这种情况,我们建议您使用 NAT 网关为集群计算节点提供公有访问权限。有关 IP 地址的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的在实例启动期间分配公有 IPv4 地址

  • 您不能为计算节点定义 p4d 或 hp6id 实例类型,也不能定义具有多个网络接口或使用网络接口卡的其他实例类型,因为只能将 AWS 公有 IP 分配给使用单个网络接口启动的实例。有关 IP 地址的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的在实例启动期间分配公有 IPv4 地址

有关更多信息,请参阅 Amazon VPC 用户指南 中的启用互联网访问

使用两个子网的 AWS ParallelCluster

对计算实例使用现有私有子网的配置需要以下设置:

# Note that all values are only provided as examples HeadNode: ... Networking: SubnetId: subnet-12345678 # subnet with internet gateway #ElasticIp: true | false | eip-12345678 Scheduling: Scheduler: slurm SlurmQueues: - ... Networking: SubnetIds: - subnet-23456789 # subnet with NAT gateway #AssignPublicIp: false

在此配置中,只需要为集群的头节点分配公有 IP。为此,您可为 HeadNode/Networking/SubnetId 中使用的子网开启“启用自动分配公有 IPv4 地址”设置,或者在 HeadNode/Networking/ElasticIp 中指定弹性 IP。

如果您为头节点定义 p4d 实例类型或定义具有多个网络接口或使用网络接口卡的其他实例类型,则必须将 HeadNode/Networking/ElasticIp 设置为 true 以提供公有访问权限。只能将 AWS 公有 IP 分配给使用单个网络接口启动的实例。有关 IP 地址的更多信息,请参阅 Amazon EC2 用户指南(适用于 Linux 实例)中的在实例启动期间分配公有 IPv4 地址

此配置中用于队列的子网需要 NAT 网关或内部代理,以便为计算实例授予互联网访问权限。

AWS ParallelCluster 位于使用 AWS Direct Connect 连接的单个私有子网中

此架构的配置需要以下设置:

# Note that all values are only provided as examples HeadNode: ... Networking: SubnetId: subnet-34567890 # subnet with proxy Proxy: HttpProxyAddress: http://proxy-address:port Ssh: KeyName: ec2-key-name Scheduling: Scheduler: slurm SlurmQueues: - ... Networking: SubnetIds: - subnet-34567890 # subnet with proxy AssignPublicIp: false Proxy: HttpProxyAddress: http://proxy-address:port

Scheduling/SlurmQueues/Networking/AssignPublicIp 设置为 false 时,必须正确设置子网以便对所有流量使用代理。头节点和计算节点都需要 Web 访问权限。

使用 AWS Batch 调度器的 AWS ParallelCluster

当使用 awsbatch 作为调度器类型时,AWS ParallelCluster 会创建一个 AWS Batch 托管计算环境。AWS Batch 环境管理 Amazon Elastic Container Service (Amazon ECS) 容器实例。这些实例在 AwsBatchQueues/Networking/SubnetIds 参数中配置的子网中启动。为了使 AWS Batch 正常工作,Amazon ECS 容器实例需要外部网络访问权限以便与 Amazon ECS 服务端点进行通信。这会转换为以下情形:

  • 为队列指定的子网 ID 使用 NAT 网关访问互联网。我们建议采用此方法。

  • 在队列子网中启动的实例具有公有 IP 地址,并可通过互联网网关访问互联网。

此外,如果您对多节点并行作业感兴趣(来自 AWS Batch 文档):

AWS Batch 多节点并行作业使用 Amazon ECS awsvpc 网络模式。这将使您的多节点并行作业容器具有与 Amazon EC2 实例相同的网络属性。每个多节点并行作业容器都可获得自己的弹性网络接口、主要私有 IP 地址以及内部 DNS 主机名。在同一 Amazon VPC 子网中创建网络接口,作为其主机计算资源。适用于计算资源的任何安全组,也适用于该主机计算资源。

当使用 Amazon ECS 任务联网时,awsvpc 网络模式不为使用 Amazon EC2 启动类型的任务提供具有公有 IP 地址的弹性网络接口。要访问互联网,必须在配置为使用 NAT 网关的私有子网中启动使用 Amazon EC2 启动类型的任务。

要使集群能够运行多节点并行作业,必须配置 NAT 网关

之前的所有配置和考虑因素也适用于 AWS Batch。以下是 AWS Batch 联网配置的示例:

# Note that all values are only provided as examples HeadNode: ... Networking: SubnetId: subnet-12345678 # subnet with internet gateway, NAT gateway or proxy #ElasticIp: true | false | eip-12345678 #Proxy: #HttpProxyAddress: http://proxy-address:port Ssh: KeyName: ec2-key-name Scheduling: Scheduler: awsbatch AwsBatchQueues: - ... Networking: SubnetIds: - subnet-23456789 # subnet with internet gateway, NAT gateway or proxy #AssignPublicIp: true | false

Scheduling/AwsBatchQueues/Networking 部分中,SubnetIds 是列表类型,但目前仅支持一个子网。

有关更多信息,请参阅以下主题:

无互联网访问权限的单个子网中的 AWS ParallelCluster


        使用一个子网且没有互联网的 AWS ParallelCluster

没有互联网访问权限的子网不允许使用入站或出站互联网连接。此 AWS ParallelCluster 配置可以帮助关注安全的客户进一步增强其 AWS ParallelCluster 资源的安全性。AWS ParallelCluster 节点基于 AWS ParallelCluster AMI 构建,这些 AMI 包含运行无互联网访问权限的集群所需的所有软件。通过这种方式,AWS ParallelCluster 可以创建和管理包含无互联网访问权限的节点的集群。

在本节中,您将了解如何配置集群。您还将了解运行无互联网访问权限的集群时的限制。

配置 VPC 端点

为确保集群正常运行,集群节点必须能够与多项 AWS 服务进行交互。

请创建并配置以下 VPC 端点,以便集群节点可以在没有互联网访问权限的情况下与 AWS 服务进行交互:

Commercial and AWS GovCloud (US) partitions
服务 服务名称 类型

Amazon CloudWatch

com.amazonaws.region-id.logs

接口

AWS CloudFormation

com.amazonaws.region-id.cloudformation

接口

Amazon EC2

com.amazonaws.region-id.ec2

接口

Amazon S3

com.amazonaws.region-id.s3

网关

Amazon DynamoDB

com.amazonaws.region-id.dynamodb

网关

AWS Secrets Manager**

com.amazonaws.region-id.secretsmanager

接口

China partition
服务 服务名称 类型

Amazon CloudWatch

com.amazonaws.region-id.logs

接口

AWS CloudFormation

cn.com.amazonaws.region-id.cloudformation

接口

Amazon EC2

cn.com.amazonaws.region-id.ec2

接口

Amazon S3

com.amazonaws.region-id.s3

网关

Amazon DynamoDB

com.amazonaws.region-id.dynamodb

网关

AWS Secrets Manager**

com.amazonaws.region-id.secretsmanager

接口

** 只有在启用了 DirectoryService 时才需要此端点,否则它是可选的。

VPC 中的所有实例都必须具有适当的安全组才能与端点通信。您可以通过将安全组添加到 HeadNode 配置下面的 AdditionalSecurityGroupsSlurmQueues 配置下面的 AdditionalSecurityGroups 来实现这一目的。例如,如果创建了 VPC 端点而未显式指定安全组,则默认安全组将与端点关联。通过将默认安全组添加到 AdditionalSecurityGroups,即可启用集群与端点之间的通信。

注意

当您使用 IAM 策略限制对 VPC 端点的访问时,必须将以下内容添加到 Amazon S3 VPC 端点:

PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Principal: "*" Action: - "s3:PutObject" Resource: - !Sub "arn:${AWS::Partition}:s3:::cloudformation-waitcondition-${AWS::Region}/*"

禁用 Route 53 并使用 EC2 主机名

创建 Slurm 集群时,AWS ParallelCluster 会创建一个用于解析自定义计算节点主机名(例如 {queue_name}-{st|dy}-{compute_resource}-{N})的私有 Route 53 托管区。由于 Route 53 不支持 VPC 端点,因此必须禁用此功能。此外,AWS ParallelCluster 必须配置为使用默认 EC2 主机名,例如 ip-1-2-3-4。将以下设置应用于您的集群配置:

... Scheduling: ... SlurmSettings: Dns: DisableManagedDns: true UseEc2Hostnames: true
警告

对于在 SlurmSettings/Dns/DisableManagedDnsUseEc2Hostnames 设置为 true 的情况下创建的集群,DNS 无法解析 Slurm NodeName。请改用 Slurm NodeHostName

注意

从 AWS ParallelCluster 版本 3.3.0 开始,此备注不相关。

对于 3.3.0 之前的 AWS ParallelCluster 支持版本:

UseEc2Hostnames 设置为 true 时,使用 AWS ParallelCluster prologepilog 脚本设置 Slurm 配置文件:

  • 分配了每个作业后,prolog 用于向计算节点上的 /etc/hosts 中添加节点信息。

  • epilog 用于清理 prolog 写入的内容。

要添加自定义 epilogprolog 脚本,请分别将其添加到 /opt/slurm/etc/pcluster/prolog.d//opt/slurm/etc/pcluster/epilog.d/ 文件夹。

集群配置

了解如何将集群配置为在没有互联网连接的子网中运行。

此架构的配置需要以下设置:

# Note that all values are only provided as examples ... HeadNode: ... Networking: SubnetId: subnet-1234567890abcdef0 # the VPC of the subnet needs to have VPC endpoints AdditionalSecurityGroups: - sg-abcdef01234567890 # optional, the security group that enables the communication between the cluster and the VPC endpoints Scheduling: Scheduler: slurm # Cluster in a subnet without internet access is supported only when the scheduler is Slurm. SlurmSettings: Dns: DisableManagedDns: true UseEc2Hostnames: true SlurmQueues: - ... Networking: SubnetIds: - subnet-1234567890abcdef0 # the VPC of the subnet needs to have VPC endpoints attached AdditionalSecurityGroups: - sg-1abcdef01234567890 # optional, the security group that enables the communication between the cluster and the VPC endpoints
  • SubnetId(s):无互联网访问权限的子网。

    要启用 AWS ParallelCluster 和 AWS 服务之间的通信,子网的 VPC 必须附加 VPC 端点。在创建集群之前,请验证是否在子网中禁用了自动分配公有 IPv4 地址,以确保 pcluster 命令可以访问集群。

  • AdditionalSecurityGroups:启用集群和 VPC 端点之间通信的安全组。

    可选:

    • 如果创建了 VPC 端点而未显式指定安全组,则会关联 VPC 的默认安全组。因此,请将默认安全组提供给 AdditionalSecurityGroups

    • 如果在创建集群和/或 VPC 端点时使用自定义安全组,则只要自定义安全组能够启用集群和 VPC 端点之间的通信,就没有必要设置 AdditionalSecurityGroups

  • Scheduler:集群调度器。

    slurm 是唯一的有效值。只有 Slurm 调度器支持没有互联网访问权限的子网中的集群。

  • SlurmSettings:Slurm 设置。

    请参阅上一节禁用 Route 53 并使用 EC2 主机名

限制

  • 通过 SSH 或 NICE DCV 连接到头节点:连接到集群时,请确保连接客户端可以通过私有 IP 地址访问集群的头节点。如果客户端与头节点不在同一 VPC 中,请在该 VPC 的公有子网中使用代理实例。此要求适用于 SSH 和 DCV 连接。如果子网没有互联网访问权限,则无法访问头节点的公有 IP。pcluster sshdcv-connect 命令使用公有 IP(如果存在)或私有 IP。在创建集群之前,请验证是否在子网中禁用了自动分配公有 IPv4 地址,以确保 pcluster 命令可以访问集群。

    以下示例显示了如何连接到在集群头节点中运行的 DCV 会话。您可以通过代理 EC2 实例进行连接。该实例用作 PC 的 NICE DCV 服务器,也用作私有子网中头节点的客户端。

    利用公有子网中的代理实例通过 DCV 进行连接:

    1. 在与集群子网位于同一 VPC 中的公有子网中创建一个 EC2 实例。

    2. 确保在您的 EC2 实例上安装 NICE DCV 客户端和服务器。

    3. 将 AWS ParallelCluster 用户策略附加到代理 EC2 实例。有关更多信息,请参阅 AWS ParallelCluster 示例 pcluster 用户策略

    4. 在代理 EC2 实例上安装 AWS ParallelCluster。

    5. 通过 DCV 连接到代理 EC2 实例。

    6. 在代理实例上使用 pcluster dcv-connect 命令即可连接到没有互联网访问权限的子网中的集群。

  • 与其他 AWS 服务交互:上面仅列出了 AWS ParallelCluster 严格要求的服务。如果您的集群必须与其他服务交互,请创建相应的 VPC 端点。