SoftLayer的新帐户定义网络(ADN)功能可以完全控制专用网络中托管的服务器。 借助它,您可以将新的Bare Metal和虚拟服务器配置到您选择的IP地址范围内。 然后,您可以使用IP编号将服务器组织为逻辑组,以进行集群,任务分配,灾难恢复,服务本地化等。
但是,在使用ADN之前,必须先配置和配置某些必需的基础结构组件。 在本教程中,您将学习如何使用SoftLayer RESTful API为ADN设置必需的SoftLayer基础结构组件。 门户用户可以使用SoftLayer查看有关所需组件的详细信息以及定价细节。 SoftLayer API可以执行SoftLayer门户的大多数功能。 使用SoftLayer API,您可以在基础结构组件上进行配置以及执行管理操作。 这使您可以自动执行可重复的任务。
“基础架构的设置和配置是一个耗时的过程。...SoftLayer提供了统一的标准API库,可以通过各种方法和工具进行访问,并且对SoftLayer门户透明。 ”
与其他API访问方法相比,RESTful API具有各种优势。 例如,它们不依赖于编程语言,它们易于理解,需要最少的编码技能,并且可以使用CURL实用程序从任何Linux终端方便地执行它们。
要开始讨论,以下是我们将在本教程中使用的一些关键术语:
关键条款
- API用户和API密钥
API用户是在SoftLayer客户门户帐户中专门创建的,用于调用API。 该用户有一个关联的API密钥 ,这是一个身份验证令牌,保留用于进行API调用。
- REST API URL
REST API使用URL通过HTTPS进行API调用。 URL代表SoftLayer对象层次结构,这很容易理解。
这是网址的格式:
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是一个命令行实用程序,用于通过向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.显示脚本执行的图
- 在终端中执行包含CURL命令的SLObject.sh脚本(实际的脚本名称不同)。
- Order-Data.Json文件包含JSON格式的订单数据,其名称传递给CURL命令。
- 执行完成后,脚本将创建输出文件SLObject.Output,其中包含SoftLayer API的返回数据。
Shell脚本和JSON文件的位置
本教程中显示的shell脚本和所需的JSON数据文件可在以下GitHub存储库中找到:
https://github.com/yash-nigam/ADN-REPO
可以按以下顺序使用这些脚本。
- 创建网络。
- 创建子网。
- 创建虚拟来宾(vm – Web)。
- 创建虚拟来宾(vm – App)。
- 创建Bare Metal(安装数据库)。
- 为虚拟访客创建Evault存储。
- 创建Evault裸机。
- 创建对象存储帐户。
- 订单块存储。
- 将块存储授权给虚拟来宾或Bare Metal。
- 订购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中的每个对象由唯一的ID标识,该ID需要包含在REST调用中。 下表列出了与每个REST调用关联的服务和方法:
SoftLayer对象 | 服务使用 | 使用方法 |
---|---|---|
建立网络 | SoftLayer_Network | createObject |
创建子网 | SoftLayer_Network / <NetworkID> | createSubnet / createObject |
创建一个虚拟访客 | SoftLayer_Virtual_Guest | createObject |
创建裸机服务器 | SoftLayer_Product_Order | 下订单 |
创建Evault存储 | SoftLayer_Product_Order | 下订单 |
创建对象存储帐户 | SoftLayer_Product_Order | 下订单 |
创建块存储 | SoftLayer_Product_Order | 下订单 |
授权块存储 | SoftLayer_Network_Storage _Iscsi / <BlockStorageID / | allowAccessFromVirtualGuest |
订购NetScaler | SoftLayer_Product_Order | 下订单 |
包裹和价格ID
除了服务,对象ID和方法详细信息之外,还需要将其他某些详细信息与REST调用一起传递以提供对象。 包和价格ID用于计费,对于使用placeOrder
方法的所有REST调用都是必需的。
如何查找包裹和价格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:
- 在SoftLayer产品页面上,转到订购设备,然后选择要订购的设备 。
- 在“订单”窗口中启用Firebug扩展。
- 在Firebug窗口中,转到NET选项卡。 选择“ 持久”和“ 全部”按钮。
- 在“订单”窗口中,进入“ 添加到订单”页面。
- POST条目将出现在Firebug窗口中,其中包含包裹和价格ID的详细信息。
每个对象的REST调用详细信息和JSON参数
要成功创建SoftLayer对象,您需要使用正确的参数执行正确的CURL命令。 以下示例显示了可与CURL命令一起使用的参数,例如标题,包含JSON数据的文件名,REST API URL以及描述每个对象的唯一属性的键值对的描述。 CURL命令中提到的文件名@Network.json
包含创建此对象所需的JSON数据。
建立网络
创建网络是设置ADN的第一步。 所有SoftLayer组件都需要连接到网络才能相互通信。
休息电话:
curl -H "Content-Type: application/json" --data @Network.json https://<userid>:<password>@api.softlayer.com/rest/v3.1/SoftLayer_Network/createObject
表1. Network.json中使用的参数
参数 | 描述 |
---|---|
名称 | 网络名称 |
笔记 | 关于网络的任何注释 |
网络标识符 | IP地址 |
CIDR | 16/24 |
创建子网
子网在网络内部创建一个地址空间(一组IP地址)。 从地址空间为虚拟访客分配了IP地址。 可以在网络内部创建多个子网,以逻辑上分隔地址空间。
休息电话:
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中使用的参数
参数 | 描述 |
---|---|
网络标识符 | 这是子网的起始IP地址(例如:“ 10.0.4.0”)。 |
CIDR | 这是子网掩码的ID。 例如, 29 是子网掩码,可在子网中设置8个IP地址。 您可以使用16或24。 |
名称 | 这是在其中创建子网的POD名称(例如:“ dal09.pod01”)。 |
创建虚拟访客
虚拟来宾是虚拟机或虚拟服务器的SoftLayer术语。 虚拟机是物理工作站计算机的虚拟版本。 SoftLayer虚拟客户机在SoftLayer数据中心上运行,并具有自己的操作系统和虚拟硬件资源。
休息电话:
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中使用的参数
参数 | 描述 |
---|---|
主机名 | 这是虚拟访客的主机名。 |
域 | 域名(例如:“ ibm.com”)。 |
startCpus | CPU总数(例如:“ 1”)。 |
数据中心 | 数据中心位置(例如:“ dal09”)。 |
hourlyBillingFlag | 每小时收费-正确 |
OperatingSystemReferenceCode | 操作系统(例如:“ UBUNTU_LATEST”)。 |
primarySubnetId | 现有后端子网的子网ID。 |
网络VLAN | 公用VLAN ID。 这允许虚拟访客拥有公共IP地址。 |
最大速度 | 1000 |
postInstallScriptUri | 此参数指向发布后脚本的位置,发布后脚本将在服务器上执行。 该脚本的位置(URL / URI)必须可从VM访问,并且应位于安全的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"
}
此外,用户可以在“设备列表”下签入已配置的虚拟访客以进行验证。
创建裸机服务器
SoftLayer Bare Metal服务器是可以像虚拟服务器一样配置的物理服务器。 裸机服务器提供原始的服务器性能,并用于处理器或磁盘I / O密集型工作负载。
休息电话:
curl -H "Content-Type: application/json" --data @Baremetal.json https://<userid>:<apikey>@api.softlayer.com/rest/v3/SoftLayer_Product_Order/placeOrder
表4. nudemetal.json中使用的参数
参数 | 描述 |
---|---|
complexType | SoftLayer_Container_Product_Order_Hardware_Server 如果使用verify / placeOrder方法,则这是必填参数。 |
位置 | 数据中心位置:“ dallas09” |
packageId | 值是257。 该程序包ID指定要使用的以下Bare Metal配置: Intel Xeon E3-1270 v3-4核心-3.50 GHz-最多4个驱动器-8 GB最高32 GB。 包裹ID根据裸机的位置/类型/配置而变化。 |
数量 | 值是1-要订购单个裸机。 |
主机名 | 裸机服务器的主机名。 |
域 | 域名。 |
networkVlanId | 这是后端VLAN的VLAN ID。 |
primarySubnetId | 这是后端VLAN内的子网ID。 从该子网分配到裸机的IP。 |
vlanNumber | 值是2072。 |
useHourlyPricing | 裸机中不使用“每小时”(值:0)。 |
在表5中,每个价格ID表示在裸机订购过程中选择的可收费硬件,特定配置或服务。
表5.价格ID
ID | 描述 |
---|---|
50357 | 公共限制500 GB带宽 |
49759 | 磁盘0 |
876 | disk_controller |
55 | 监控主机Ping |
57 | 通知–电子邮件和票证 |
44988 | 作业系统-CentOS 7.x(64位元) |
273 | 100 Mbps公共和专用网络上行链路 |
21 | 主IP地址 |
49495 | 内存8 GB |
906 | 远程管理 |
58 | 响应-自动通知 |
49515 | 服务器 |
420 | VPN管理 |
418 | 漏洞扫描器 |
注意 :如果给出了错误的价格ID,则剩余呼叫将失败。
对于裸机订购期间硬件/配置的任何更改,必须在JSON文件中更新相应的价格ID。
创建Evault存储
Evault是SoftLayer提供的企业级备份存储和灾难恢复解决方案。
休息电话:
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
价格编号 | 描述 |
---|---|
1045 | 20GB Evault磁盘到磁盘企业备份的价格ID。 |
为Bare Metal服务器创建Evault存储
要为Bare Metal服务器创建Evault存储,请使用Evault_Baremetal.json文件。
创建对象存储帐户
SoftLayer对象存储基于OpenStack Swift对象存储平台。 它提供了冗余且高度可扩展的云存储服务。 要使用对象存储,您需要首先创建一个对象存储帐户。
休息电话:
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 | 206是对象存储的程序包ID。 |
complexType | SoftLayer_Container_Product_Order_Network_Storage_Hub |
表9.价格ID
价格编号 | 描述 |
---|---|
16984 | 这是Cloud Object Storage的ID-标准区域Swift API。 |
创建对象存储帐户后,您需要:
- 创建容器
- 通过在容器上创建文件来利用容器
休息呼叫以接收身份验证令牌(仅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对象存储 ”。
创建块存储
块存储可通过SAN持久性,持久性和灵活性实现本地磁盘性能。 它允许您创建存储卷或共享,并使用iSCSI连接将它们连接到Bare Metal或虚拟服务器。
下订单:
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。此ID用于PERFORMANCE_STORAGE_SERVICE。 |
位置 | 值是449494。此ID用于Dallas09位置。 |
osFormatType ID | 值为12。此ID适用于Linux类型。 |
complexType | SoftLayer_Container_Product_Order_Network_PerformanceStorage_Iscsi。 这是块存储所需的复杂类型。 |
表11.价格ID
参数 | 描述 |
---|---|
40672 | 块存储(性能) |
40682 | 20 GB存储空间的价格ID |
40792 | 100 IOPS的价格ID |
如果存储大小或IOPS单位使用不同的数量,则需要更改价格项目ID。
将块存储授权给虚拟来宾或Bare Metal服务器
必须为每个块存储提供权限,以允许虚拟访客或Bare Metal服务器访问。
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调用以允许访问Bare Metal:
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。 |
订购NetScaler VPX负载均衡器
Citrix NetScaler是功能强大的Web应用程序交付设备和负载平衡器。
休息电话:
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:
- 登录到SoftLayer门户。
- 转到设备列表。 应列出订购的NetScaler设备。
- 单击以打开设备。 (URL如下所示:https://control.softlayer.com/devices/details/<id>/applicationDeliveryController。)
- 选择操作>管理设备 。 用户应该能够管理设备。
- 验证是否已分配了专用IP,正确的公共VLAN和正确的IP数量。
表14. JSON有效负载中使用的参数
参数 | 描述 |
---|---|
位置 | 数据中心位置:“ DALLAS09” |
packageId | NetScaler VPX的软件包ID:192 |
后端VLAN | 后端VLAN由以下JSON格式表示: {"primaryBackendNetworkComponent": {"networkVlan": {"primarySubnet": {"id": <ID>}}} 。 这是后端网络的后端子网的ID。 |
公共VLAN | 以下JSON格式表示公共VLAN: "primaryNetworkComponent": {"networkVlan": {"id": <ID>}}} 这是公共VLAN的ID。 |
表15.价格ID
参数 | 描述 |
---|---|
44964 | Citrix NetScaler VPX 10.5 10Mbps标准的价格ID。 (此ID会有所不同,具体取决于所选的NetScaler配置类型。) |
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.问题详细信息
问题编号 | 描述 |
---|---|
9 | 联系人的姓名。 |
10 | 联系人的职务。 |
11 | 联系人的电子邮件地址。 |
12 | 联系人的电话号码。 |
13 | 指示用户确认联系人信息是最新且准确的标志(可以为0或1)。 |
14 | 预计在未来30天内要使用的IP地址数量。 |
15 | 预期在未来12个月内将使用的IP地址数量。 |
16 | 简要说明需要其他IP的原因。 |
结论
基础架构设置和配置是一个耗时的过程。 SoftLayer API允许您在该过程中引入一些自动化。 SoftLayer提供了一个统一的标准API库,可以通过各种方法和工具进行访问,并且对SoftLayer门户透明。 在本教程中,您学习了创建可用于应用程序部署的ADN网络的步骤。 您还探索了许多对SoftLayer Cloud进行REST API调用的方法,并研究了可自动完成整个ADN设置的命令和脚本。
此外,我们还向您展示了ADN如何实现两个目的:(1)定义了一个根IP地址范围,用于将来的专用IP地址分配;(2)它为您提供了一个容器,用于对需要与每个服务器进行通信的服务器进行分组其他使用其私有IP。
致谢
我们要感谢以下人员的支持和协助:
Dinakaran Joseph-Cloud杰出工程师
Senthilkumar Vimalraj-GTS Labs基础设施专家
Nalini M-认知与云高级开发人员
Sudhanva Kulkarni-云应用程序开发人员
Vivekanandan Subramanian-Cloud,执行架构师