您可以下载 Horizon Edge 网关并将其部署到 Amazon Web Services (AWS) 中的 Horizon 8 联合部署中,以便与 Horizon Cloud Service - next-gen 配对。

前提条件

请按以下步骤为使用联合架构在 VMware Cloud on AWS 中部署的容器下载并部署 Horizon Edge 网关 设备。在联合架构中,必须在 Horizon Cloud Service - next-gen 中将 Horizon Edge 网关部署到容器环境内的本机 Amazon Elastic Computer Cloud (EC2) 基础架构中。

  • 确认您满足Horizon 8 Edge 部署中所述的 Horizon Edge 网关 相关必备条件。
  • 确认您满足使相应目标 URL 可访问以在 Horizon 8 环境中部署 Horizon Edge 网关中的要求,以使用 Horizon Edge 网关Horizon 8 容器与 Horizon Cloud Service 配对。
  • Horizon Edge 网关 虚拟设备必须访问 Internet 才能与 Horizon Cloud 控制平面进行通信。如果您的环境要求对要访问 Internet 的已部署设备使用代理服务器和代理配置,则在对 Horizon Edge 网关设备使用代理设置时,请确认您已查看与代理相关的信息、已知限制以及已知问题。
  • 如果想要在运行 pair-edge 脚本时使用代理,必须先运行以下命令,若 ProxySSL 已启用,则指定为 true,否则指定为 false
    /opt/vmware/bin/pair-edge-with-proxy.sh -i 'IP_or FQDN_of Proxy' -o 'Proxy_Port' -u 'Proxy_User_Name' -p 'Proxy_Password' -s 'true_or_false' -c 'Connection_String'
    请参阅以下注释中的代理相关信息。
    注: 更新 Edge 中的代理配置
    /opt/vmware/bin/configure-edge-webproxy.py --proxyHost 127.0.0.1 --proxyPort 3128 --proxyUsername 'exampleUsername' --proxyPassword 'examplePassword'
    
    要了解更多选项,请使用 -h 选项运行该脚本,如下所示。
    /opt/vmware/bin/configure-edge-webproxy.py -h
  • 许多步骤都必须使用命令行来执行。但是,有些部署步骤既可以使用 AWS 管理控制台来执行,也可以使用 AWS 命令行界面 (CLI) 来执行。有关使用 Amazon EC2 环境的详细信息,请参阅 Amazon Elastic Compute Cloud 文档,网址为 https://docs.aws.amazon.com/ec2/index.html。在后续步骤中,通常会建议需要参考的特定类型的 Amazon Elastic Compute Cloud 文档。

过程

  1. 按照部署 Horizon Edge 以用于 Horizon 8 部署和 Horizon Cloud Service - next-gen 控制平面页面上相应过程中的“步骤 7. 使用‘下载’获取 Horizon Edge 网关设备二进制文件”。说明,下载 Horizon Edge 网关磁盘映像,并对所有屏幕上的提示做出响应。

    Horizon Edge 网关磁盘映像以 VMDK 文件形式提供。将 VMDK 文件下载到本地系统。

    注: 请下载 2.3.3.0 或更高版本的 Horizon Edge 网关磁盘映像,例如 edge-gw-2.3.3.0-22720582.ec2.vmdk

    将下载的二进制文件保存到要将二进制文件部署到所需虚拟化平台的位置,然后返回到此步骤序列以继续执行所需的配对过程。

    将磁盘映像文件上载到 Amazon EC2 环境之前,必须先创建一个 Amazon S3 存储桶。
  2. 在 Amazon EC2 环境中创建 Amazon S3 存储桶。有关详细说明,请参阅 Amazon Elastic Compute Cloud 文档。
  3. 将下载的 VMDK 文件上载到 Amazon S3 存储桶。您可以使用 AWS 管理控制台或 AWS 命令行界面 (CLI) 执行此步骤。
    • (AWS 管理控制台)登录到 AWS 管理控制台以访问 Amazon EC2 环境。转到 S3 服务,选择之前创建的桶,然后将 VMDK 文件上载到该桶。
    • (AWS CLI)访问 AWS CLI 并运行以下命令。
      aws s3 cp <file-path-to-VMDK-file> <S3URI>

      有关运行 cp 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

    在 AWS 管理控制台中,VMDK 文件列在 对象选项卡中。
  4. 创建一个服务角色和一个策略,并将该策略连接到该角色。
    1. 创建此过程所需的三个新 JSON 文件中的第一个文件。
      此特定 JSON 文件用于存储服务角色信息。根据需要命名此文件。在此过程中,此文件的示例文件名为 trust-policy.json
      以下文本是 JSON 文件内容的示例。
      {
          "Version":"2012-10-17",
          "Statement":[
              {
                  "Sid":"",
                  "Effect":"Allow",
                  "Principal":{
                      "Service":"vmie.amazonaws.com"
                  },
                  "Action":"sts:AssumeRole",
                  "Condition":{
                      "StringEquals":{
                          "sts:ExternalId":"vmimport"
                      }
                  }
              }
          ]
      }
    2. 创建一个服务角色并为其指定您选择的名称,然后将此角色信息存储在新的 JSON 文件中。
      例如,使用 CLI 运行如下命令。
      以下命令是一个一般示例。
      aws iam create-role --role-name <role-name> --assume-role-policy-document <file-path>

      以下示例命令会将占位符 <role-name> 替换为具体的示例角色 vmimport,并将占位符 <file-path> 替换为具体的示例文件 trust-policy.json

      aws iam create-role --role-name vmimport --assume-role-policy-document file://trust-policy.json

      有关运行 create-role 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

    3. 创建此过程所需的三个新 JSON 文件中的第二个文件。
      提供要将 VMDK 文件上载到的存储桶的名称,例如 <bucket-name>,即下面的示例中使用的名称。
      此特定 JSON 文件用于将新策略与新角色相连接。根据需要命名此文件。在此过程中,此文件的示例文件名为 role-policy.json
      以下文本是示例 role-policy.json 文件的内容示例。
      {
          "Version":"2012-10-17",
          "Statement":[
              {
                  "Effect":"Allow",
                  "Action":[
                      "s3:ListBucket",
                      "s3:GetBucketLocation"
                  ],
                  "Resource":[
                      "arn:aws:s3:::<bucket-name>"
                  ]
              },
              {
                  "Effect":"Allow",
                  "Action":[
                      "s3:GetObject"
                  ],
                  "Resource":[
                      "arn:aws:s3:::<bucket-name>/*"
                  ]
              },
              {
                  "Effect":"Allow",
                  "Action":[
                      "ec2:ModifySnapshotAttribute",
                      "ec2:CopySnapshot",
                      "ec2:RegisterImage",
                      "ec2:Describe*"
                  ],
                  "Resource":"*"
              }
          ]
      }
    4. 创建一个策略,将该策略连接到新角色,并将它们存储到新创建的 JSON 文件中。

      例如,使用 CLI 运行如下命令。

      以下命令是一个一般示例。
      aws iam put-role-policy --role-name <role-name> --policy-name <policy-name> --policy-document <file-path>

      以下具体示例会将占位符 <role-name> 替换为一个名为 vmimport 的特定策略示例,将占位符 <policy-name> 替换为先前命名的特定角色示例(名称也为 vmimport),并将占位符 <file-path> 替换为先前命名的特定 JSON 文件示例,即 role-policy.json

      aws iam put-role-policy --role-name vmimport --policy-name vmimport --policy-document file://role-policy.json

      有关运行 put-role-policy 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

  5. 从导入的 VMDK 文件导入快照。
    1. 创建此过程所需的三个新 JSON 文件中的第三个文件。
      在此文件中包含以下信息。
      • 存储桶名称,如下面的示例中使用的 <bucket-name>
      • 上载到 Amazon S3 存储桶的 VMDK 文件的文件名,如下面的示例中使用的 <vmdk-file-name-uploaded-to-S3>
      此特定 JSON 文件用于存储导入的 VMDK 文件的快照。根据需要命名此文件。在此过程中,此文件的示例文件名为 container.json
      以下文本是 container.json 文件内容的示例。
      {
          "Description": "Adapter-VM",
          "Format": "vmdk",
          "UserBucket": {
              "S3Bucket": "<bucket-name>",
              "S3Key": "<vmdk-file-name-uploaded-to-S3>"
          }
      }
    2. 运行相应命令,以将快照从导入的 VMDK 文件导入到新创建的 JSON 文件中。
      使用 CLI 运行以下类型的命令。
      aws ec2 import-snapshot --role-name <role-name> --description <description> --disk-container <file-path>

      有关运行 import-snapshot 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

      以下命令是 import-snapshot 命令的具体示例,其中, role-name 参数是可选的且未使用,描述为 "Adapter-VM",容器文件名为 container.json
      aws ec2 import-snapshot --description "Adapter-VM" --disk-container file://container.json
      import-snapshot 命令可能需要几分钟才能完成。但是,在运行该命令后,该命令会创建输出,其中包含可用于跟踪任务进度的 ImportTaskId 行。下面是一个示例输出。
      {
          "ImportTaskId": "import-snap-05b4c84af4xxxxxxx",
          "Description": "Adapter-VM",
          "SnapshotTaskDetail": {
              "StatusMessage": "pending",
              "UserBucket": {
                    "S3Bucket": "awsbucket",
                   "S3Key": "edge-gw-2.3.3.0-22720582.ec2.vmdk"
               },
             "Progress": "0",
             "Status": "active",
              "Description": "Adapter-VM",
              "DiskImageSize": 0.0
          }
      
      }
    3. 记下 import-snapshot 命令输出中的 ImportTaskId 值。
  6. 要跟踪 import-snapshot 任务的进度并获取快照 ID,请运行以下命令。
    aws ec2 describe-import-snapshot-tasks --import-task-ids <import-task-id>

    <import-task-id> 占位符替换为 import-snapshot 命令输出中列出的值。上述示例输出中列出的示例值为 import-snap-05b4c84af4xxxxxxx。有关运行 describe-import-snapshot-tasks 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

    describe-import-snapshot-tasks 命令会提供可指示 import-snapshot 任务进度的输出,并在任务完成时提供注册映像所需的快照 ID。例如:
    • "Progress": "43"。输出中的行,此行指示 import-snapshot 任务的进度百分比。在此示例中,任务已完成 43%。
    • "Status": "completed"。输出中的行,此行指示 import-snapshot 任务已完成。
    • "SnapshotId": "snap-06d42e043bxxxxxxx"。输出中的行,任务完成后将包含此行。对于此示例,快照 ID 为 snap-06d42e043bxxxxxxx
  7. 记下 describe-import-snapshot-tasks 命令输出中的快照 ID。
  8. 要注册快照映像,请运行 register-image 命令。
    aws ec2 register-image --region us-west-2 --name <image-name> --architecture x86_64 --root-device-name '/dev/sda1' --virtualization-type hvm --ena-support --block-device-mappings DeviceName=/dev/sda1,Ebs={SnapshotId=<SnapshotId>} 
    其中,必须为每个选项(例如, --region--architecture 等)提供特定于您部署的响应。有关运行 register-image 命令的详细信息,请参阅 Amazon Elastic Compute Cloud 文档。

    以下信息特定于 --name 选项和 SnapshotId 参数。

    • --name - 根据字符串限制提供映像名称。
    • SnapshotId - 提供 describe-import-snapshot-tasks 命令输出中的快照 ID。
    register-image 命令提供的输出中包含 Amazon 计算机映像 (AMI) 的 ID。下面是一个典型的 register-image 输出示例。
     {
            "ImageId": "ami-0721ee000321c4685"
        }
    register-image 命令输出中指示的 AMI 也会显示在 AWS 管理控制台的 AMI 列表中。
  9. 要支持创建和配置 Horizon Edge 网关 AMI 实例,请准备类似于以下示例的启动脚本。
    #! /bin/bash
    /usr/bin/python3 /opt/vmware/bin/configure-adapter.py --sshEnable
    sudo useradd ccadmin
    echo -e 'password\npassword' | passwd ccadmin
    echo 'cs_ip cs_fqdn' >> /etc/hosts
    在该示例中,启动脚本支持以下配置:
    • 启用对 Horizon Edge 网关 设备的 SSH 访问。
    • 在设备上创建具有指定密码 (<Mypassword>\n<Mypassword>) 的 ccadmin 用户帐户。确保您定义了强密码。强密码至少为 8 个字符,并且必须包含一个或多个数字、大写和小写字母以及特殊字符。
    • 将连接服务器主机名 (cs_fqdn) 解析为连接服务器 IP 地址 (cs_ip)。

    您必须在下一步中启动 Horizon Edge 网关 AMI 实例时将此脚本添加到 user-data 中。

  10. 启动 Horizon Edge 网关 的 AMI 实例。
    注: 要确保实例提供足够的功能,请使用 c5.2xlarge 或更高型号。

    您可以使用 AWS 管理控制台或 CLI 启动实例。不论使用哪种方式启动实例,都需使用 register-image 命令输出中提供的 Amazon 计算机映像 (AMI) 的 ID,并将您在上一步中准备的启动脚本添加到 user-data 中。

    注: 您必须在此时添加启动脚本,因为 user-data 仅在 AMI 实例的首次引导序列中执行。

    要使用 CLI,请参阅 Amazon Elastic Compute Cloud 文档以了解有关运行 run-instances 命令的详细信息。

    要使用 AWS 管理控制台,请参阅 Amazon Elastic Compute Cloud 文档以了解相关详细信息,例如有关如何使用“启动实例”向导启动实例的信息。

    如果选择使用 AWS 管理控制台启动实例,请按映像 ID 找到新的 AMI,选择该 AMI,然后单击启动。接下来,您可以继续按照向导提供部署的详细信息。

  11. Horizon Edge 网关 AMI 启动后,编辑该 AMI 实例的配置并移除启动脚本。
  12. 通过 SSH 连接到 Horizon Edge 网关虚拟机 AWS 实例。

    要使用 CLI 或 AWS 管理控制台,请参见 Amazon Elastic Compute Cloud 文档,了解有关连接到 实例的详细信息。我们建议使用 SSH 以便可以复制粘贴配对密钥。

    有关相关信息,请参见 为 Horizon Edge 启用 SSH 访问

    有关信息,另请参阅 AWS 产品文档中的连接到您的 Linux 实例使用 EC2 Instance Connect 连接到您的 Linux 实例

  13. 使用以下命令格式运行配对 Edge 脚本,其中,pairing_code 是从部署 Horizon Edge 以用于 Horizon 8 部署和 Horizon Cloud Service - next-gen 控制平面中所述步骤 9 屏幕截图中复制的配对代码:

    sudo /opt/vmware/sbin/pair-edge.sh 'pairing_code'

  14. 为了提高安全性,请考虑在完成这些步骤后停用 SSH。
  15. 返回到 Horizon Universal Console 以完成Horizon Connection Server详细信息的配置。请参阅部署 Horizon Edge 以用于 Horizon 8 部署和 Horizon Cloud Service - next-gen 控制平面