

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

# 在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere
<a name="eksa-configuration"></a>

按照以下步骤在您的 Snowball Edge 设备上配置和启动 Amazon EKS Anywhere。然后，要将 Amazon EKS Anywhere 配置为在断开连接的设备上运行，请在断开这些设备与外部网络的连接之前完成其他步骤。有关更多信息，请参阅 [在 Sno AWS w 上配置 Amazon EKS Anywhere 以实现断开连接](configure-disconnected.md)。

**Topics**
+ [Snowball EDge 上亚马逊 EKS Anywhere 的初始设置](#initial-setup)
+ [自动在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere](#auto-eksa-configuration)
+ [手动在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere](#manual-eksa-configuration)

## Snowball EDge 上亚马逊 EKS Anywhere 的初始设置
<a name="initial-setup"></a>

通过将设备连接到本地网络、下载 Snowball Edge 客户端、获取凭证和解锁设备来在每台 Snowball Edge 设备上执行初始设置。

**执行初始设置**

1. 下载并安装 Snowball Edge 客户端。有关更多信息，请参阅 [下载并安装 Snowball Edge 客户端](using-client-commands.md#download-the-client)。

1. 将设备连接到您的本地网络。有关更多信息，请参阅 [将 Snowball Edge 连接到您的本地网络](getting-started.md#getting-started-connect)。

1. 获取用于解锁设备的凭证。有关更多信息，请参阅 [获取访问 Snowball Edge 的凭证](getting-started.md#get-credentials)。

1. 解锁设备。有关更多信息，请参阅 [解锁 Snowball Edge](unlockdevice.md)。您还可以使用脚本工具代替手动解锁设备。请参阅[Unlock devices](https://github.com/aws-samples/aws-snow-tools-for-eks-anywhere/tree/main/setup-tools#Unlock-devices)。

## 自动在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere
<a name="auto-eksa-configuration"></a>

您可以使用示例脚本工具来设置环境并运行 Amazon EKS Anywhere 管理实例，也可以手动执行此操作。要使用脚本工具，请参阅 [Unlock devices and setup environment for Amazon EKS Anywhere](https://github.com/aws-samples/aws-snow-tools-for-eks-anywhere/tree/main/setup-tools#Unlock-devices-and-setup-envorinment-for-EKS-Anywhere)。设置完环境并开始运行 Amazon EKS Anywhere 管理实例后，如果您需要将 Amazon EKS Anywhere 配置为在断开网络连接的情况下在 Snowball Edge 设备上运行，请参阅[在 Sno AWS w 上配置 Amazon EKS Anywhere 以实现断开连接](configure-disconnected.md)。否则，请参阅[在 Snowball Edge 设备上创建和维护集群](maintain-eks-a-clusters-snow.md)。

要手动设置环境并运行 Amazon EKS Anywhere 管理实例，请参阅[手动在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere](#manual-eksa-configuration)。

## 手动在 Snowball Edge 设备上配置和运行 Amazon EKS Anywhere
<a name="manual-eksa-configuration"></a>

在 Snowball Edge 设备上配置 Amazon EKS Anywhere 之前，为 Snowball Edge 客户端设置一个配置文件。有关更多信息，请参阅 [配置和使用 Snowball Edge 客户端](using-client-commands.md)。

**Topics**
+ [创建 Amazon EKS Anywhere IAM 本地用户](#create-role)
+ [（可选）在 Snowball Edge 上创建和导入安全外壳密钥](#create-ssh-key)
+ [在 Snowball Edge 上运行 Amazon EKS Anywhere 管理实例，然后向其传输证书和证书文件](#start-config-eksa-admin-instance)

### 创建 Amazon EKS Anywhere IAM 本地用户
<a name="create-role"></a>

要实现最佳安全实操，请在 Snowball Edge 设备上为 Amazon EKS Anywhere 创建本地 IAM 用户。您可以使用步骤程序手动实现这一点。

**注意**  
对您使用的每台 Snowball Edge 设备执行此操作。

#### 在 Snowball Edge 上创建本地用户
<a name="create-eksa-iam-user"></a>

使用 `create-user` 命令创建 Amazon EKS Anywhere IAM 用户。

```
aws iam create-user --user-name user-name --endpoint http://snowball-ip:6078 --profile profile-name
    {
        "User": {
            "Path": "/",
            "UserName": "eks-a-user",
            "UserId": "AIDACKCEVSQ6C2EXAMPLE",
            "Arn": "arn:aws:iam::123456789012:user/eks-a-user",
            "CreateDate": "2022-04-06T00:13:35.665000+00:00"
        }
    }
```

#### 在 Snowball Edge 上为本地用户创建策略
<a name="create-eksa-iam-user-policy"></a>

创建策略文档，用其创建 IAM 策略，并将该策略附加到 Amazon EKS Anywhere 本地用户。

**要创建策略文档并将其附加到 Amazon EKS Anywhere 本地用户，请执行以下操作**

1. 创建策略文档并将其保存到您的计算机。将以下策略复制到文档中。

------
#### [ JSON ]

****  

   ```
   {
     "Version": "2012-10-17",
     "Statement": [
       {
         "Effect": "Allow",
         "Action": [
           "snowball-device:DescribeDevice",
           "snowball-device:CreateDirectNetworkInterface",
           "snowball-device:DeleteDirectNetworkInterface",
           "snowball-device:DescribeDirectNetworkInterfaces",
           "snowball-device:DescribeDeviceSoftware"
         ],
         "Resource": ["*"]
       },
       {
         "Effect": "Allow",
         "Action": [
           "ec2:RunInstances",
           "ec2:DescribeInstances",
           "ec2:TerminateInstances",
           "ec2:ImportKeyPair",
           "ec2:DescribeKeyPairs",
           "ec2:DescribeInstanceTypes",
           "ec2:DescribeImages",
           "ec2:DeleteTags"
         ],
         "Resource": ["*"]
       }
     ]
   }
   ```

------

1. 使用 `create-policy` 命令根据策略文档创建 IAM 策略。`--policy-document` 参数的值应使用策略文件的绝对路径。例如，`file:///home/user/policy-name.json`

   ```
   aws iam create-policy --policy-name policy-name --policy-document file:///home/user/policy-name.json --endpoint http://snowball-ip:6078 --profile profile-name
   {
       "Policy": {
           "PolicyName": "policy-name",
           "PolicyId": "ANPACEMGEZDGNBVGY3TQOJQGEZAAAABP76TE5MKAAAABCCOTR2IJ43NBTJRZBU",
           "Arn": "arn:aws:iam::123456789012:policy/policy-name",
           "Path": "/",
           "DefaultVersionId": "v1",
           "AttachmentCount": 0,
           "IsAttachable": true,
           "CreateDate": "2022-04-06T04:46:56.907000+00:00",
           "UpdateDate": "2022-04-06T04:46:56.907000+00:00"
       }
   }
   ```

1. 使用 `attach-user-policy` 命令将 IAM 策略附加到 Amazon EKS Anywhere 本地用户。

   ```
   aws iam attach-user-policy --policy-arn policy-arn --user-name user-name --endpoint http://snowball-ip:6078 --profile profile-name     
   ```

#### 在 Snowball Edge 上创建访问密钥和凭证文件
<a name="create-eksa-iam-user-access-key"></a>

为 Amazon EKS Anywhere IAM 本地用户创建访问密钥。然后，创建一个凭证文件，并在其中包含为本地用户生成的 `AccessKeyId` 和 `SecretAccessKey` 的值。稍后，Amazon EKS Anywhere 管理实例将使用该凭证文件。

1. 使用 `create-access-key` 命令为 Amazon EKS Anywhere 本地用户创建访问密钥。

   ```
   aws iam create-access-key --user-name user-name --endpoint http://snowball-ip:6078 --profile profile-name
       {
           "AccessKey": {
               "UserName": "eks-a-user",
               "AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
               "Status": "Active",
               "SecretAccessKey": "RTT/wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
               "CreateDate": "2022-04-06T04:23:46.139000+00:00"
           }
       }
   ```

1. 创建凭证文件。在其中，按以下格式保存 `AccessKeyId` 和 `SecretAccessKey` 值。

   ```
   [snowball-ip] 
   aws_access_key_id = ABCDEFGHIJKLMNOPQR2T
   aws_secret_access_key = AfSD7sYz/TBZtzkReBl6PuuISzJ2WtNkeePw+nNzJ
   region = snow
   ```
**注意**  
如果您使用多台 Snowball Edge 设备，则文件中凭证的顺序无关紧要，但所有设备的凭证确实需要放在一个文件中。

#### 在 Snowball Edge 上为管理实例创建证书文件
<a name="create-credentials-for-admin-instance"></a>

Amazon EKS Anywhere 管理实例需要 Snowball Edge 设备的证书才能在这些设备上运行。创建一个证书文件，其中包含用于访问 Snowball Edge 设备的证书，以便在之后供 Amazon EKS Anywhere 管理实例使用。

**要创建证书文件，请执行以下操作**

1. 使用 `list-certificates` 命令获取您计划使用的每台 Snowball Edge 设备的证书。

   ```
   PATH_TO_Snowball_Edge_CLIENT/bin/snowballEdge list-certificates --endpoint https://snowball-ip --manifest-file path-to-manifest-file --unlock-code unlock-code
   {
     "Certificates" : [ {
       "CertificateArn" : "arn:aws:snowball-device:::certificate/xxx",
       "SubjectAlternativeNames" : [ "ID:JID-xxx" ]
     } ]
   }
   ```

1. 使用 `CertificateArn` 的值作为 `get-certificate` 命令的 `--certificate-arn` 参数的值。

   ```
   PATH_TO_Snowball_Edge_CLIENT/bin/snowballEdge get-certificate --certificate-arn ARN --endpoint https://snowball-ip --manifest-file path-to-manifest-file --unlock-code unlock-code            
   ```

1. 创建设备证书文件。将 `get-certificate` 的输出放入证书文件中。下面是如何保存输出的一个示例。
**注意**  
如果您使用多台 Snowball Edge 设备，则文件中凭证的顺序无关紧要，但所有设备的凭证确实需要放在一个文件中。

   ```
   -----BEGIN CERTIFICATE-----
   ZWtzYSBzbm93IHRlc3QgY2VydGlmaWNhdGUgZWtzYSBzbm93IHRlc3QgY2VydGlm  
   aWNhdGVla3NhIHNub3cgdGVzdCBjZXJ0aWZpY2F0ZWVrc2Egc25vdyB0ZXN0IGNl  
   cnRpZmljYXRlZWtzYSBzbm93IHRlc3QgY2VydGlmaWNhdGVla3NhIHNub3cgdGVz  
   dCBjZXJ0aWZpY2F0ZQMIIDXDCCAkSgAwIBAgIJAISM0nTVmbj+MA0GCSqGSIb3DQ  
   ...                                                               
   -----END CERTIFICATE-----
   ```

1. 重复[创建 Amazon EKS Anywhere IAM 本地用户](#create-role)的操作，在所有 Snowball Edge 设备上为 Amazon EKS Anywhere 创建 IAM 本地用户。

### （可选）在 Snowball Edge 上创建和导入安全外壳密钥
<a name="create-ssh-key"></a>

使用此可选过程创建 Secure Shell（SSH）密钥来访问所有 Amazon EKS Anywhere 节点实例，并将公钥导入所有 Snowball Edge 设备。保存并保护此密钥文件。

如果您跳过此过程，Amazon EKS Anywhere 将在必要时自动创建并导入 SSH 密钥。此密钥将存储在 `${PWD}/${CLUSTER_NAME}/eks-a-id_rsa` 中的管理实例上。

**创建 SSH 密钥并将其导入 Amazon EKS Anywhere 实例**

1. 使用 `ssh-keygen` 命令生成 SSH 密钥。

   ```
   ssh-keygen -t rsa -C "key-name" -f path-to-key-file
   ```

1. 使用 `import-key-pair` 命令将密钥从您的计算机导入到 Snowball Edge 设备。
**注意**  
将密钥导入所有设备时，`key-name` 参数的值必须相同。

   ```
   aws ec2 import-key-pair --key-name key-name --public-key-material fileb:///path/to/key-file --endpoint http://snowball-ip:8008 --profile profile-name 
   {
       "KeyFingerprint": "5b:0c:fd:e1:a0:69:05:4c:aa:43:f3:3b:3e:04:7f:51",
       "KeyName": "default",
       "KeyPairId": "s.key-85edb5d820c92a6f8"
   }
   ```

### 在 Snowball Edge 上运行 Amazon EKS Anywhere 管理实例，然后向其传输证书和证书文件
<a name="start-config-eksa-admin-instance"></a>

#### 在 Snowball Edge 上运行 Amazon EKS Anywhere 管理实例
<a name="start-admin-instance"></a>

按照此过程手动运行 Amazon EKS Anywhere 管理实例、为管理实例配置虚拟网络接口（VNI）、检查实例的状态、创建 SSH 密钥，并用其连接到管理实例。您可以使用示例脚本工具自动创建 Amazon EKS Anywhere 管理实例，并将凭证和证书文件传输到该实例。请参见[创建 Amazon EKS Anywhere 管理实例](https://github.com/aws-samples/aws-snow-tools-for-eks-anywhere/tree/main/setup-tools#Create-EKS-Anywhere-admin-instance)。脚本工具完成后，您可以参阅 [在 Snowball Edge 设备上创建和维护集群](maintain-eks-a-clusters-snow.md) 通过 ssh 登录实例并创建集群。如果您想手动设置 Amazon EKS Anywhere 实例，请使用以下步骤。

**注意**  
如果您使用多台 Snowball Edge 设备来预置集群，则可以在任何 Snowball Edge 设备上启动 Amazon EKS Anywhere 管理实例。

**要运行 Amazon EKS Anywhere 管理实例，请执行以下操作**

1. 使用 `create-key-pair` 命令为 Amazon EKS Anywhere 管理实例创建 SSH 密钥。该命令将密钥保存到 `$PWD/key-file-name`。

   ```
   aws ec2 create-key-pair --key-name key-name --query 'KeyMaterial' --output text --endpoint http://snowball ip:8008 > key-file-name --profile profile-name
   ```

1. 使用 `describe-images` 命令从输出中查找以 `eks-anywhere-admin` 开头的映像名称。

   ```
   aws ec2 describe-images --endpoint http://snowball-ip:8008 --profile profile-name
   ```

1. 使用 `run-instance` 命令启动带有 Amazon EKS Anywhere 管理映像的 eks-a 管理实例。

   ```
   aws ec2 run-instances --image-id eks-a-admin-image-id --key-name key-name --instance-type sbe-c.xlarge --endpoint http://snowball-ip:8008 --profile profile-name
   ```

1. 使用 `describe-instances` 命令检查 Amazon EKS Anywhere 实例的状态。等到命令显示实例状态为 `running`，然后再继续。

   ```
   aws ec2 describe-instances --instance-id instance-id --endpoint http://snowball-ip:8008 --profile profile-name
   ```

1. 在 `describe-device` 命令输出中，记下连接到您的网络的物理网络接口的 `PhysicalNetworkInterfaceId` 值。您将使用该值来创建 VNI。

   ```
    
   PATH_TO_Snowball_Edge_CLIENT/bin/snowballEdge describe-device --endpoint https://snowball-ip --manifest-file path-to-manifest-file --unlock-code unlock-code
   ```

1. 为 Amazon EKS Anywhere 管理实例创建 VNI。使用 `PhysicalNetworkInterfaceId` 的值作为 `physical-network-interface-id` 参数的值。

   ```
   PATH_TO_Snowball_Edge_CLIENT/bin/snowballEdge create-virtual-network-interface --ip-address-assignment dhcp --physical-network-interface-id PNI --endpoint https://snowball-ip --manifest-file path-to-manifest-file --unlock-code unlock-code
   ```

1. 使用 `associate-address` 命令的 `public-ip` 参数的 `IpAddress` 值，将共有地址与 Amazon EKS Anywhere 管理实例相关联。

   ```
   aws ec2 associate-address --instance-id instance-id --public-ip VNI-IP --endpoint http://snowball-ip:8008 --profile profile-name 
   ```

1. 通过 SSH 连接到 Amazon EKS Anywhere 管理实例。

   ```
   ssh -i path-to-key ec2-user@VNI-IP      
   ```

#### 将证书和凭据文件传输到 Snowball Edge 上的管理实例
<a name="transfer-cred-cert-files"></a>

在 Amazon EKS Anywhere 管理实例开始运行后，将 Snowball Edge 设备的凭证和证书转移到管理实例。根据您在[在 Snowball Edge 上创建访问密钥和凭证文件](#create-eksa-iam-user-access-key)和[在 Snowball Edge 上为管理实例创建证书文件](#create-credentials-for-admin-instance)中保存凭证和证书文件的目录，在相同的目录中运行以下命令：

```
scp -i path-to-key path-to-credentials-file path-to-certificates-file ec2-user@eks-admin-instance-ip:~        
```

验证 Amazon EKS Anywhere 管理实例上的文件内容。以下是凭证和证书文件的示例。

```
[192.168.1.1] 
aws_access_key_id = EMGEZDGNBVGY3TQOJQGEZB5ULEAAIWHWUJDXEXAMPLE 
aws_secret_access_key = AUHpqjO0GZQHEYXDbN0neLNlfR0gEXAMPLE 
region = snow 

[192.168.1.2] 
aws_access_key_id = EMGEZDGNBVGY3TQOJQGEZG5O7F3FJUCMYRMI4KPIEXAMPLE 
aws_secret_access_key = kY4Cl8+RJAwq/bu28Y8fUJepwqhDEXAMPLE 
region = snow
```

```
-----BEGIN CERTIFICATE-----                                      
ZWtzYSBzbm93IHRlc3QgY2VydGlmaWNhdGUgZWtzYSBzbm93IHRlc3QgY2VydGlm  
aWNhdGVla3NhIHNub3cgdGVzdCBjZXJ0aWZpY2F0ZWVrc2Egc25vdyB0ZXN0IGNl  
cnRpZmljYXRlZWtzYSBzbm93IHRlc3QgY2VydGlmaWNhdGVla3NhIHNub3cgdGVz  
dCBjZXJ0aWZpY2F0ZQMIIDXDCCAkSgAwIBAgIJAISM0nTVmbj+MA0GCSqGSIb3DQ  
...                                                               
-----END CERTIFICATE-----                                         

-----BEGIN CERTIFICATE-----                                       
KJ0FPl2PAYPEjxr81/PoCXfZeARBzN9WLUH5yz1ta+sYUJouzhzWuLJYA1xqcCPY  
mhVlkRsN4hVdlBNRnCCpRF766yjdJeibKVzXQxoXoZBjrOkuGwqRy3d3ndjK77h4  
OR5Fv9mjGf7CjcaSjk/4iwmZvRSaQacb0YG5GVeb4mfUAuVtuFoMeYfnAgMBAAGj  
azBpMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFL/bRcnBRuSM5+FcYFa8HfIBomdF  
...                                                              
-----END CERTIFICATE-----
```