配置 SoftLayer 组件以用于 Account Defined Network

SoftLayer 的新 Account Defined Network (ADN) 特性有助于完全控制私有网络中托管的服务器。借助它,可以将新的裸机和虚拟服务器配备到所选的 IP 地址范围内。然后可以使用 IP 编号将服务器划分为逻辑组,以便建立集群、分发任务、实现灾难恢复、本地化服务等。

但是,在可以使用 ADN 之前,必须配备和配置一些必要的基础架构组件。在本教程中,将学习如何使用 SoftLayer RESTful API 为 ADN 配备所需的 SoftLayer 基础架构组件。通过使用 SoftLayer,门户用户可以查看所需组件的详细信息以及它们的定价细节。SoftLayer API 可以执行 SoftLayer 门户的大部分功能。通过使用 SoftLayer API,可以在基础架构组件上配备和执行管理操作。这使您能够自动化可重复的任务。

基础架构设置和配置是一个耗时的过程……SoftLayer 提供了一个统一且标准的 API 库,该库可通过各种方法和工具进行访问,而且对 SoftLayer 门户透明。

与其他 API 访问方法相比,RESTful API 拥有许多优势。例如,它们不依赖于编程语言,容易理解,需要的编码技能最少,而且方便从任何 Linux 终端使用 CURL 实用程序执行。

开始讨论之前,先来了解一下本教程中将会使用的一些关键术语:

关键术语

  • API 用户和 API 密钥

API 用户 专门在 SoftLayer 客户门户帐户中为调用 API 而创建。该用户有一个关联的 API 密钥 ,该密钥是为调用 API 而保留的身份验证令牌。

  • REST API URL

REST API 使用 URL 通过 HTTPS 调用 API。URL 表示 SoftLayer 对象分层结构,该结构很容易理解。

URL 的格式如下:

https://[username]:[apiKey]@api.[service.]softlayer.com/rest/v3/[serviceName]/[initializationParameter].[returnDatatype]

下面是一个用于下单的示例 URL:

https://[userid]:[apikey]@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder
  • JSON 对象

JSON (JavaScript 对象表示法)是一种人类可读的简单对象表示法,专为存储键值对而构造。SoftLayer API 在 JSON 格式的文本中接受和返回 API 调用细节。下单所需的数据 —比如服务类型、数量和相关属性— 采用 JSON 格式并保存在文本文件中。然后,CURL 实用程序使用该文件来执行 API 调用。

  • CURL

CURL 是一个命令行实用程序,可使用它通过向 SoftLayer 发送 HTTPS 请求来调用 API。

下面是它的用法示例:

curl -H "Content-Type:application/json" --data @Order-data.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

在上面的示例中, @Order-data.json 指定一个包含订单细节的 JSON 格式的文本文件。

REST 调用的工作原理

图 1 演示了 REST 调用流程。

图 1. 该图显示了 REST 调用流程

  • 从终端使用 CURL 实用程序对 SoftLayer API 服务执行 REST 调用。从文本文件加载此调用所需的 JSON 数据。
  • SoftLayer API 服务读取请求和 JSON 数据,并检查它的正确性,然后在 SoftLayer 基础架构中执行所需的操作。
  • 如果操作成功,则返回订单细节;否则返回一条错误消息。
  • 操作的结果返回到执行 REST 调用的终端。

使用 shell 脚本自动化 CURL 命令的执行

Shell 脚本包含自动实例化 REST 调用的 CURL 命令。图 2 演示了如何执行这些脚本。

图 2. 该图显示了脚本的执行过程

  1. 在终端执行包含一条 CURL 命令的 SLObject.sh 脚本(实际脚本名称可能有所不同)。
  2. Order-Data.Json 文件包含 JSON 格式的订单数据,它的名称被传递到 CURL 命令。
  3. 完成脚本执行后,该脚本创建了输出文件 SLObject.Output,其中包含从 SoftLayer API 返回的数据。

shell 脚本和 JSON 文件的位置

本教程中给出的 shell 脚本和所需的 JSON 数据文件可在下面的 GitHub 存储库中找到:

https://github.com/yash-nigam/ADN-REPO

这些脚本可按以下顺序使用。

  1. 创建网络。
  2. 创建子网。
  3. 创建虚拟访客 (vm – web)。
  4. 创建虚拟访客 (vm – App)。
  5. 创建裸机(安装数据库)。
  6. 为虚拟访客创建 Evault 存储。
  7. 创建 Evault 裸机。
  8. 创建对象存储帐户。
  9. 订购块存储。
  10. 将块存储授权给虚拟访客或裸机。
  11. 订购 NetScaler VPX。

为了方便用户使用,已将这些文件组织成以下分层结构:

  • /ADN/src/Script :此文件夹包含所有 shell 脚本文件。
  • /ADN/src/Json :此文件夹包含所有 JSON 数据文件。
  • /ADN/src/Output: 此文件夹将包含执行 shell 脚本的输出。

从上面提到的 Git 存储库下载 ADN 文件夹,并在本地机器上执行 shell 脚本。

前提条件

执行脚本之前,一定要检查并安装 CURL:

  • 使用 root 用户身份登录到系统,并运行以下命令。
    curl –V
  • 如果已安装 CURL,则会呈现以下输出:
    curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.19.1 Basic ECC zlib/1.2.3 libidn/1.18 libssh2/1.4.2
  • 如果未安装 CURL,请使用以下命令安装它:
    yum install curl

REST 调用中使用的服务和方法

每个 SoftLayer 对象都与某个特定服务相关。一个服务有各种各样与其关联的方法,调用这些方法时,它们会在该服务的对象上执行特定操作。SoftLayer 中的每个对象都通过一个需要包含在 REST 调用中的唯一 ID 进行标识。下表列出了与每个 REST 调用相关的服务和方法:

SoftLayer 对象 使用的服务 使用的方法
创建网络 SoftLayer_Network createObject
创建子网 SoftLayer_Network/
<NetworkID>
createSubnet/createObject
创建虚拟访客 SoftLayer_Virtual_Guest createObject
创建裸机服务器 SoftLayer_Product_Order placeOrder
创建 Evault 存储 SoftLayer_Product_Order placeOrder
创建对象存储帐户 SoftLayer_Product_Order placeOrder
创建块存储 SoftLayer_Product_Order placeOrder
授权块存储 SoftLayer_Network_Storage
_Iscsi/<BlockStorageID/
allowAccessFromVirtualGuest
订购 NetScaler SoftLayer_Product_Order placeOrder

包和价格 ID

除了服务、对象 ID 和方法细节之外,还需要使用 REST 调用传递其他一些细节来配备对象。包和价格 ID 可用于计费,所有使用 placeOrder 方法的 REST 调用都需要它们。

如何找到包 ID 和价格 ID

使用以下 REST 调用找到包 ID:

curl https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Package/getAllObjects

使用此 REST 调用找到特定包 ID 的价格 ID:

curl https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Package/222/getItemPrices

也可以通过在 Firefox 浏览器中使用 Firebug 扩展,从 SoftLayer 门户显示包和价格 ID:

  1. 在 SoftLayer 产品页上,转到 Order devices 并选择要订购的设备。
  2. 在 Order 窗口中启用 Firebug 扩展。
  3. 在 Firebug 窗口中,转到 NET 选项卡。选择 PersistAll 按钮。
  4. 在 Order 窗口中,前进到 Add to Order 页面。
  5. Firebug 窗口中会出现一个 POST 条目,其中包含包和价格 ID 的细节。

每个对象的 REST 调用细节和 JSON 参数

要成功创建 SoftLayer 对象,请执行带正确参数的正确 CURL 命令。以下示例将展示可用于 CURL 命令的参数,比如标头、包含 JSON 数据的文件名、REST API URL,以及键值对描述(描述每个对象的唯一属性)。CURL 命令中提及的名为 @Network.json 的文件名包含创建此对象所需的 JSON 数据。

1

创建网络

创建网络是设置 ADN 的第一步。所有 SoftLayer 组件都需要连接到该网络,以便相互通信。

REST 调用:

curl -H "Content-Type: application/json" --data @Network.json https://<userid>:<password>@api.softlayer.com/rest/v3.1/SoftLayer_Network/createObject

表 1. Network.json 中使用的参数

参数 说明
名称 网络的名称
Notes 有关该网络的任何备注
Networkidentifier IP 地址
CIDR 16/24

2

创建子网

子网在网络内创建一个地址空间(一组 IP 地址)。从地址空间为虚拟访客分配一个 IP 地址。可在一个网络中创建多个子网,以实现地址空间的逻辑分离。

REST 调用:

curl -k -u '<userid>:<apikey>' -X POST -d @Subnet.json https://api.softlayer.com/rest/v3/SoftLayer_Network/<NetworkID>/createSubnet/createObject.json –i

<NetworkID> 是 URL 中使用的参数。这是在其中创建子网的网络的 ID。

表 2. Subnet.json 中使用的参数

参数 说明
networkIdentifier 这是子网的起始 IP 地址(示例:“10.0.4.0”)。
CIDR 这是子网掩码的 ID。例如, 29 是在子网中设置 8 个 IP 地址的子网掩码。也可以使用 16 或 24。
名称 这是在其中创建子网的 POD 名称(示例:“dal09.pod01”)。

3

创建虚拟访客

虚拟访客是表示虚拟机或虚拟服务器的 SoftLayer 术语。虚拟机是物理工作站计算机的虚拟版本。SoftLayer 虚拟访客在 SoftLayer 数据中心上运行,拥有自己的操作系统和虚拟硬件资源。

REST 调用:

curl -H "Content-Type: application/json" --data @VM-app.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Virtual_Guest/createObject

表 3. VM-app.json 中使用的参数

参数 说明
hostname 这是虚拟访客的主机名。
domain 域名(示例:“ibm.com”)。
startCpus CPU 总数(示例:“1”)。
datacenter 数据中心位置(示例:“dal09”)。
hourlyBillingFlag 按小时收费 - true
operatingSystemReferenceCode 操作系统(示例:“UBUNTU_LATEST”)。
primarySubnetId 现有后端子网的子网 ID。
networkVlan 公有 VLAN ID。这允许虚拟访客拥有公有 IP 地址。
maxSpeed 1000
postInstallScriptUri 此参数指向一个配备后脚本的位置,该脚本完成配备后就会在服务器上执行。此脚本的位置 (URL/URI) 必须能从虚拟机进行访问,而且应该是一个安全的 HTTPS (SSL) 位置。

成功执行 CURL 命令后,返回了以下数据:

{
  "accountId": 973639,
  "createDate": "2016-12-21T05:22:28-06:00",
  "domain": "ibm.com",
  "fullyQualifiedDomainName": "ADNTest1.ibm.com",
  "hostname": "ADNTest1",
  "id": 26954963,
  "lastPowerStateId": null,
  "lastVerifiedDate": null,
  "maxCpu": 1,
  "maxCpuUnits": "CORE",
  "maxMemory": 2048,
  "metricPollDate": null,
  "modifyDate": null,
  "provisionDate": null,
  "startCpus": 1,
  "statusId": 1001,
  "uuid": "f5225283-2f7b-4ab7-bab5-6ed0d064ccbb",
  "globalIdentifier": "a283bb3f-3aa9-430f-a3b4-f8a3a40feb66"
  }

此外,用户可在“Device List”下检查配备的虚拟访客,以进行验证。

4

创建裸机服务器

SoftLayer 裸机服务器是可像虚拟服务器一样配备的物理服务器。裸机服务器提供了原始服务器的性能,用于处理器或磁盘 I/O 密集型工作负载。

REST 调用:

curl -H "Content-Type: application/json" --data @Baremetal.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

表 4. baremetal.json 中使用的参数

参数 说明
complexType SoftLayer_Container_Product_Order_Hardware_Server
如果使用 verify/placeOrder 方法,此参数是必填参数。
location 数据中心位置:“dallas09”
packageId 值为 257。
这个包 ID 指定使用以下裸机配置:
英特尔至强 E3-1270 v3 - 4 核 - 3.50 GHz - 最多 4 个驱动器 - 8 GB 到最高 32 GB 内存。
包 ID 会依据裸机的位置/类型/配置而更改。
quantity 值为 1 - 要订购一个裸机。
hostname 裸机服务器的主机名。
domain 域名。
networkVlanId 这是后端 VLAN 的 VLAN ID。
primarySubnetId 这是后端 VLAN 内的子网 ID。裸机的 IP 就是从这个子网中分配的。
vlanNumber 值为 2072。
useHourlyPricing 裸机中不使用按时收费(值:0)。

在表 5 中,每个价格 ID 表示在裸机订购过程中选择的一件收费硬件、一种特定配置或一个服务。

表 5. 价格 ID

ID 说明
50357 上限为 500 GB 的公有带宽
49759 磁盘 0
876 磁盘控制器
55 监视主机 Ping
57 通知 – 电子邮件和通知单
44988 操作系统 - CentOS 7.x(64 位)
273 100 Mbps 公有和私有网络上行链路
21 主要 IP 地址
49495 RAM 8 GB
906 远程管理
58 响应 - 自动化通知
49515 服务器
420 VPN 管理
418 漏洞扫描器

备注:如果给定了错误的价格 ID,REST 调用会失败。

如果在裸机订购过程中对硬件/配置执行了任何更改,必须在 JSON 文件中更新各自的价格 ID。

5

创建 Evault 存储

Evault 是 SoftLayer 提供的一种企业级备份存储和灾难恢复解决方案。

REST 调用:

curl -H "Content-Type: application/json" --data @Evault_VirtualGuest.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

表 6. Evault_VirtualGuest.json 中使用的参数

参数 说明
virtualGuests ID 将使用此服务的虚拟访客的 ID。

表 7. 价格 ID

价格 ID 说明
1045 20GB Evault 磁盘间企业备份的价格 ID。

为裸机服务器创建 Evault 存储

要为裸机服务器创建 Evault 存储,请使用 Evault_Baremetal.json 文件。

6

创建对象存储帐户

SoftLayer 对象存储基于 OpenStack Swift 对象存储平台。它提供了一个冗余且高度扩展的云存储服务。要使用对象存储,需要先创建一个对象存储帐户。

REST 调用:

curl -H "Content-Type: application/json" --data @ObjectStorage.json https://://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

备注:执行 placeOrder 命令之前,先使用 verifyOrder 验证订单(将命令中的 placeOrder 替换为 verifyOrder )。

表 8. ObjectStorage.json 中使用的参数

参数 说明
PackageId 对象存储的包 ID 为 206。
complexType SoftLayer_Container_Product_Order_Network_Storage_Hub

表 9. 价格 ID

价格 ID 说明
16984 这是云对象存储(标准地区 Swift API)的 ID。

创建对象存储帐户后,您需要:

  • 创建容器
  • 通过在容器上创建文件来利用它们

执行 REST 调用来接收身份验证令牌(仅在 24 小时内有效),后续请求中需要该令牌:

curl -i -H "X-Auth-User:<user id>" -H "X-Auth-Key: <api key >" https://dal05.objectstorage.softlayer.net/auth/v1.0

执行 REST 调用,使用上一步中创建的身份验证令牌创建一个容器:

curl -i -XPUT -H "X-Auth-Token: AUTH_tk7171f7f808cd481a89891b814adc7967" https://dal05.objectstorage.softlayer.net/v1/AUTH_4608a5ea-1df1-4ad2-9b1a-80021aadb625/tempapp

执行 REST 调用,在容器内创建一个文件:

curl -i -XPUT -H "X-Auth-Token: AUTH_tk7171f7f808cd481a89891b814adc7967" --data-binary "Created for testing REST client" https://dal05.objectstorage.softlayer.net/v1/AUTH_4608a5ea-1df1-4ad2-9b1a-80021aadb625/tempapp/tempfile.txt

请参阅“ 通过 REST API 管理 SoftLayer 对象存储 ”,了解对象存储的更多操作。

7

创建块存储

块存储实现了具有 SAN 持久性、耐久性和灵活性的本地磁盘性能。它允许创建存储卷,或者利用 iSCSI 连接性将它们分享和连接到裸机或虚拟服务器。

下单:

curl -H "Content-Type: application/json" --data @BlockStorage.json https://://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

表 10. BlockStorage.json 中使用的参数

参数 说明
PackageId 值为 222。这是 PERFORMANCE_STORAGE_SERVICE 的 ID。
location 值为 449494。这是 Dallas09 位置的 ID。
osFormatType ID 值为 12。这是 Linux 类型的 ID。
complexType SoftLayer_Container_Product_Order_Network_PerformanceStorage_Iscsi。
这是块存储所需的复杂类型。

表 11. 价格 ID

参数 说明
40672 块存储(性能)
40682 20 GB 存储空间的价格 ID
40792 100 IOPS 的价格 ID

如果为存储大小或 IOPS 单元使用了不同数量,则需要更改价格项 ID。

8

将块存储授权给虚拟访客或裸机服务器

必须允许虚拟访客或裸机服务器访问每个块存储。

允许访问虚拟访客的 REST 调用:

curl -H "Content-Type:application/json" --data @BlockStorage_Auth.json https://<userid>:<password>@api.softlayer.com/rest/v3.1/ SoftLayer_Network_Storage_Iscsi/<ISCSI_BlocKStorageID>/allowAccessFromVirtualGuest

URL 中使用的参数 <ISCSI_BlocKStorageID> 是需要访问虚拟访客的 ISCSI 块存储的 ID。

表 12. BlockStorage_Auth.json 中使用的参数

参数 说明
id 允许存储块访问的虚拟访客的 ID。

允许访问裸机的 REST 调用:

curl -H "Content-Type:application/json" --data @JSON-Payload-file.json https://<userid>:<password>@api.softlayer.com/rest/v3.1/ SoftLayer_Network_Storage_Iscsi/<ISCSI_BlocKStorageID>/allowAccessFromHardware

URL 中使用的参数 <ISCSI_BlocKStorageID> 是需要访问虚拟访客的 ISCSI 块存储的 ID。

表 13. BlockStorage_Auth.json 中使用的参数

参数 说明
id 裸机服务器的 ID。

9

订购 NetScaler VPX 负载平衡器

Citrix NetScaler 是一个强大的 Web 应用程序交付设备和负载平衡器。

REST 调用:

curl -H "Content-Type: application/json" --data @Netscaler.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder

备注:执行 placeOrder 命令之前,先使用 verifyOrder 命令验证订单(将命令中的 placeOrder 替换为 verifyOrder )。

成功执行此命令后,将会返回包含所有订单细节的 JSON 有效负载订单信息。

从 SoftLayer 门户验证是否成功配备了 NetScaler:

  1. 登录到 SoftLayer 门户。
  2. 转到设备列表。此时将会列出已订购的 NetScaler 设备。
  3. 单击打开该设备。(URL 将类似于:https://control.softlayer.com/devices/details/<id>/applicationDeliveryController。)
  4. 选择 Actions > Manage Device 。用户应能管理该设备。
  5. 验证已分配了所请求的私有 IP、正确的公有 VLAN 和正确的 IP 数量。

表 14. JSON 有效负载中使用的参数

参数 说明
location 数据中心位置:“DALLAS09”
packageId NetScaler VPX 的包 ID:192
后端 VLAN 后端 VLAN 用以下 JSON 格式表示:
{"primaryBackendNetworkComponent": {"networkVlan": {"primarySubnet": {"id": <ID>}}}
这是后端网络的后端子网的 ID。
公有 VLAN 公有 VLAN 用以下 JSON 格式表示:
"primaryNetworkComponent": {"networkVlan": {"id": <ID>}}}
这是公有 VLAN 的 ID。

表 15. 价格 ID

参数 说明
44964 Citrix NetScaler VPX 10.5 10Mbps 标准版的价格 ID。
(根据所选的 NetScaler 配置类型,此 ID 将有所不同。)
17238 两个静态公有 IP 地址的价格 ID(根据所选 IP 数量,此值将有所不同)。

问题解答

NetScaler VPX 订购流程要求用户回答与 IP 地址用途相关的问题。可以使用以下命令找到这些问题的详细解释:

curl https://<userid>:<apikey>@api.softlayer.com/rest/v3oftLayer_Product_Item_Category/53/getQuestions

53 是公有辅助静态 IP 地址的类别 ID。)

表 16 给出了这些问题的简单说明。这些问题的答案包含在 NetScaler.json 中的 JSON 有效负载中

表 16. 问题细节

问题 ID 说明
9 联系人姓名。
10 联系人职称。
11 联系人电子邮箱地址。
12 联系人电话号码。
13 该标志表明用户确认联系人信息是最新的和准确的(可以为 0 或 1)。
14 预计在未来 30 天内使用的 IP 地址数量。
15 预计在未来 12 个月内使用的 IP 地址数量。
16 需要更多 IP 的原因的简单说明。

结束语

基础架构设置和配置是一个耗时的过程。SoftLayer API 允许在该流程中采用一定的自动化。SoftLayer 提供了一个统一且标准的 API 库,该库可通过各种方法和工具进行访问,而且对 SoftLayer 门户透明。在本教程中,您了解了创建一个适合应用程序部署的 ADN 网络的步骤。还探索了向 SoftLayer 云发出 REST API 调用的众多方式,并查看了自动化整个 ADN 设置过程的命令和脚本。

此外,我们还展示了 ADN 如何实现两种用途:(1) 它定义了一个根 IP 地址范围,供未来分配私有 IP 地址时使用,(2) 它提供了一个容器,以便对需要使用其私有 IP 相互通信的服务器进行分组。

致谢

特别感谢以下人员给予我们的大力支持和帮助:

Dinakaran Joseph - 杰出工程师,云

Senthilkumar Vimalraj - 基础架构专家,GTS 实验室

Nalini M - 资深开发人员,认知和云

Sudhanva Kulkarni - 应用程序开发人员,云

Vivekanandan Subramanian - 执行架构师,云

我来评几句
登录后评论

已发表评论数()