

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

# AWS ParallelCluster 在无法访问互联网的单个子网中
<a name="aws-parallelcluster-in-a-single-public-subnet-no-internet-v3"></a>

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

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

![\[AWS ParallelCluster 使用一个子网但没有互联网\]](http://docs.aws.amazon.com/zh_cn/parallelcluster/latest/ug/images/networking_single_subnet_no_internet.png)


**配置 VPC 端点**

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

创建并配置以下 [VPC 终端](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints.html)节点，以便集群节点无需访问互联网即可与 AWS 服务进行交互：

------
#### [ Commercial and AWS GovCloud (US) partitions ]


| 服务 | 服务名称 | Type | 
| --- | --- | --- | 
|  Amazon CloudWatch  |  com.amazonaws。 *region-id*.logs  |  接口  | 
|  CloudFormation  |  com.amazonaws。 *region-id*.cloudfor  |  接口  | 
|  Amazon EC2   |  com.amazonaws。 *region-id*.ec2  |  接口  | 
|  Amazon S3  |  com.amazonaws。 *region-id*.s3  |  网关  | 
|  Amazon DynamoDB  |  com.amazonaws。 *region-id*.dynamodb  |  网关  | 
|  AWS Secrets Manager\$1\$1  |  com.amazonaws。 *region-id*.secretsManag  |  接口  | 
|  AWS 弹性负载平衡\$1\$1\$1  |  com.amazonaws。 *region-id*.elasticload bal  |  接口  | 
|  AWS 自动缩放\$1\$1\$1  |  com.amazonaws。 *region-id*. 自动缩放  |  接口  | 

------
#### [ China partition ]


| 服务 | 服务名称 | Type | 
| --- | --- | --- | 
|  Amazon CloudWatch  |  com.amazonaws。 *region-id*.logs  |  接口  | 
|  CloudFormation  |  cn.com.amazonaws。 *region-id*.cloudfor  |  接口  | 
|  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\$1\$1  |  com.amazonaws。 *region-id*.secretsManag  |  接口  | 
|  AWS 弹性负载平衡\$1\$1\$1  |  com.amazonaws。 *region-id*.elasticload bal  |  接口  | 
|  AWS 自动缩放\$1\$1\$1  |  cn.com.amazonaws。 *region-id*. 自动缩放  |  接口  | 

------

\$1\$1 只有在启用了 [`DirectoryService`](DirectoryService-v3.md#DirectoryService-v3.properties) 时才需要此端点，否则它是可选的。

\$1\$1\$1 只有在启用时[LoginNodes](LoginNodes-v3.md)才需要这些端点，否则它们是可选的。

VPC 中的所有实例都必须具有适当的安全组才能与端点通信。您可以通过将安全组添加到 [`HeadNode`](HeadNode-v3.md) 配置下面的 [`AdditionalSecurityGroups`](HeadNode-v3.md#yaml-HeadNode-Networking-AdditionalSecurityGroups) 和 [`SlurmQueues`](Scheduling-v3.md#Scheduling-v3-SlurmQueues) 配置下面的 [`AdditionalSecurityGroups`](Scheduling-v3.md#yaml-Scheduling-SlurmQueues-Networking-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 并使用 Amazon EC2 主机名**

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

```
...
Scheduling:
  ...
  SlurmSettings:
    Dns:
      DisableManagedDns: true
      UseEc2Hostnames: true
```

**警告**  
对于在 [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)/[`Dns`](Scheduling-v3.md#Scheduling-v3-SlurmSettings-Dns)/[`DisableManagedDns`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Dns-DisableManagedDns) 和 [`UseEc2Hostnames`](Scheduling-v3.md#yaml-Scheduling-SlurmSettings-Dns-UseEc2Hostnames) 设置为 `true` 的情况下创建的集群，DNS 无法解析 Slurm `NodeName`。可改用 Slurm `NodeHostName`。

**注意**  
**从 3.3.0 AWS ParallelCluster 版本开始，本说明不相关。**  
对于 3.3.0 之前的 AWS ParallelCluster 支持版本：  
如果设置`UseEc2Hostnames`为`true`，则使用 AWS ParallelCluster `prolog`和`epilog`脚本设置Slurm配置文件：  
分配了每个作业后，`prolog` 用于向计算节点上的 `/etc/hosts` 中添加节点信息。
`epilog` 用于清理 `prolog` 写入的内容。
要添加自定义 `epilog` 或 `prolog` 脚本，请分别将其添加到 `/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
LoginNodes: # optional, if enabled, requires creation and configuration of VPC endpoints for AWS Elastic Load Balancing (ELB) and Auto Scaling services
  Pools:
    - ...
      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
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)`](HeadNode-v3.md#yaml-HeadNode-Networking-SubnetId)：无互联网访问权限的子网。

  要启用 AWS ParallelCluster 和 AWS 服务之间的通信，子网的 VPC 必须连接 VPC 终端节点。在创建集群之前，请确认子网中[已禁用自动分配公有 IPv4 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)，以确保`pcluster`命令可以访问集群。
+ [`AdditionalSecurityGroups`](HeadNode-v3.md#yaml-HeadNode-Networking-AdditionalSecurityGroups)：启用集群和 VPC 端点之间通信的安全组。

  可选：
  + 如果创建了 VPC 端点而未显式指定安全组，则会关联 VPC 的默认安全组。因此，请将默认安全组提供给 `AdditionalSecurityGroups`。
  + 如果在创建集群 and/or 时使用自定义安全组，`AdditionalSecurityGroups`则无需使用 VPC 终端节点，只要自定义安全组支持集群和 VPC 终端节点之间的通信。
+ [`Scheduler`](Scheduling-v3.md#yaml-Scheduling-Scheduler)：集群调度器。

  `slurm` 是唯一的有效值。只有 Slurm 调度器支持没有互联网访问权限的子网中的集群。
+ [`SlurmSettings`](Scheduling-v3.md#Scheduling-v3-SlurmSettings)：Slurm 设置。

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

**限制**
+ *通过 SSH 或 Amazon DCV 连接到头节点：*连接到集群时，请确保连接客户端可以通过私有 IP 地址访问集群的头节点。如果客户端与头节点不在同一 VPC 中，请在该 VPC 的公有子网中使用代理实例。此要求适用于 SSH 和 DCV 连接。如果子网没有互联网访问权限，则无法访问头节点的公有 IP。`pcluster ssh` 和 `dcv-connect` 命令使用公有 IP（如果存在）或私有 IP。在创建集群之前，请确认子网中[已禁用自动分配公有 IPv4 地址](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)，以确保`pcluster`命令可以访问集群。

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

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

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

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

  1. 将 AWS ParallelCluster 用户策略附加到代理 Amazon EC2 实例。有关更多信息，请参阅 [AWS ParallelCluster `pcluster`用户策略示例](iam-roles-in-parallelcluster-v3.md#iam-roles-in-parallelcluster-v3-example-user-policies)。

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

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

  1. 在代理实例上使用 `pcluster dcv-connect` 命令即可连接到没有互联网访问权限的子网中的集群。
+ *与其他 AWS 服务互动：*上面仅列出了严格要求 AWS ParallelCluster 的服务。如果您的集群必须与其他服务交互，请创建相应的 VPC 端点。