上一主题: Web 服务应用

下一主题: WS_API_SAMPLE-Web 服务 API 示例应用


WS_API-Web 服务 API 应用

最新版本:1.0.19-1

只有 CA AppLogic 2.9 限定功能版及后续版本才提供 Web 服务 API。

本节包含以下主题:

功能概述

CA AppLogic Web 服务“WS_API”应用边界属性

应用资源

操作

应用体系结构

配置

HTTP 模式

HTTPS 模式

VPN 模式

说明

功能概述

WS_API 应用通过基于表象化状态转变 (REST) 的服务向一个或多个网格提供 Web 服务接口。 下列任一访问方法都可用于 WS_API 接口:

CA AppLogic Web 服务“WS_API”应用边界属性

属性名

类型

说明

usr_ip

IP

这是 WS_API 应用通过基于 HTTP 或 HTTPS 的请求向用户提供服务的 IP 地址。 此属性是强制性属性。

net_ip

IP

这是 WS_API 应用访问任何公共网络地址所使用的 IP 地址。 此属性是强制性属性。

网络掩码

IP

vpn_ip、usr_ip 和 net_ip 所在网络的网络掩码。 此属性是强制性属性。

网关

IP

用于路由流量的 IP 网关的地址。 必须指定此属性才能从 WS_API 正运行 IP 网络之外的主机访问 WS_API 应用(即多数情况)。 使用 0.0.0.0 可禁用。 此属性是强制性属性。

dns1

IP

用于主机名解析的 DNS 服务器的 IP 地址。 此属性是强制性属性。

dns2

IP

用于主机名解析的备份 DNS 服务器的 IP 地址。 默认值:0.0.0.0。

allowed_hosts

字符串

允许的 CIDR 格式的 IP 地址或 IP 地址范围。默认值:0.0.0.0/0;(允许全部)

http_mode

字符串

它指定 usr_ip 上的 API 处理何种 HTTP 请求。 有效值:https、http、both。 如果设置为 http,则 API 处理简单基于 HTTP 的请求。 只有设置为 https 时,REST API 才处理基于 SSL v3.0 加密的安全 HTTP 请求。 如果设置为 both,则处理 HTTP 和 HTTPS 两种请求。 默认值:https。 只对使用该组件处理的请求,此属性才有效(即使用 VPN 时无效)。 如果模式设置为 http,请注意所有流量都是明文。 强烈建议对发出 API 请求的 IP 设置 allowed_hosts 属性。

opts

字符串

可以通过 opts 属性(逗号分隔的名称=值对)向应用提供 SSL 配置的参数。 在简单 HTTP 模式下,即 http_mode=http 时,不要求设置此属性。 默认值:空(未使用)。 如果未指定任何参数,则认为是空值。
ssl_country-在生成的 SSL 证书中使用的国家/地区名称。
ssl_state_province-在生成的 SSL 证书中使用的省/市/州名称。
ssl_locality-在生成的 SSL 证书中使用的地区名称。
ssl_org_name-在生成的 SSL 证书中使用的组织名称。
ssl_org_unit-在生成的 SSL 证书中使用的组织部门名称。
ssl_common_name-在生成的 SSL 证书中使用的 URL 名称。
ssl_email_address-在生成的 SSL 证书中使用的电子邮件地址。
ssl_export_pass-用于导入客户端 Web 浏览器的 pkcs12 格式客户端证书的密码。

vpn_ip

IP

这是 WS_API 应用通过安全 VPN 通道向用户提供服务的 IP 地址。 默认值:空。

vpn_ports

字符串

访问 Web 服务 API 的端口列表。 允许通过 VPN 通道和防火墙规则访问这些端口。 通常需要的端口是 80、443。默认值:80、443

vpn_type

字符串

要建立 VPN 通道的类型。 可能值为:
证书-使用 SSL 客户端和服务器证书建立 VPN 通道,用于 OpenVPN 的身份验证和加密。 如果不存在,则会自动生成服务器证书;必须使用位于 conf 卷的 /server/ 子目录中 in_vpn 组件上的 /appliance/security.sh 脚本手工生成客户端证书,并将其复制到远程 VPN 客户端组件中数据卷或 NFS 安装卷的 /client/ 子目录内。
共享密钥-使用 OpenVPN 共享密钥建立 VPN 通道。 如果尚不存在,则会在 in_vpn 组件中自动生成此文件,此文件位于 conf 卷的 /server/ 子目录中作为 secret.key。 此文件必须复制到远程 VPN 客户端组件中的数据卷或 NFS 安装卷的 /client/ 子目录内。
ssh 密钥-使用 OpenSSH 密钥文件建立 SSH 通道进行身份验证。 在 in_vpn 组件的 conf 卷的 /server/ 子目录中生成密钥文件。 客户端密钥文件必须复制到远程 VPN 客户端组件的数据卷或 nfs 安装卷的 /client/ 子目录中。
ipsec 共享密钥-在 in_vpn 和远程 VPN 客户端组件之间建立 IPSec 通道。 由 vpn_authpath 属性指定文件的第一行用作共享密钥。
ipsec 证书-使用证书在 in_vpn 实例和远程 VPN 客户端组件之间建立 IPSec 通道。 服务器证书会自动生成(如果不存在),或者使用位于 conf 卷的 /server/ 子目录中的 /appliance/security.sh 脚本生成;必须使用位于 in_vpn 组件上的 /appliance/security.sh 脚本手工生成客户端证书,并将其复制到远程 VPN 客户端组件的数据卷或 nfs 安装卷的 /client/ 子目录内。
默认值:证书。

vpn_authpath

字符串

通道的身份验证信息。 对于操作的共享密钥模式,这是数据卷的共享密钥文件的相对路径(例如“client/secret.key”文件的“secret.key”)。 如果通道是 ssh 密钥,此属性显示 ssh 公用(对于 VPN 服务器)或私人(对于 VPN 客户端)密钥文件的路径,包括文件名(例如 /client/1/ssh.key 公用密钥文件的“/1/ssh.key”)。 默认值:空

vpn_standby

Int

指定应用启动时是否启用 VPN 访问。 如果为非零,则 VPN 访问已禁用,否则已启用它。 通过手工启动/停止 VPN 组件在运行时可启用/禁用 VPN 访问。 默认值:1(VPN 访问已禁用)。

in_standby

Int

指定是否允许通过基于常规 HTTP 或 HTTPS 连接访问 REST API。 此属性设置为 1 且 vpn_standby 设置为 0 时,仅允许基于 VPN 通道进行访问。 通过手工启动/停止组件在运行时可启用/禁用访问。 默认 0 (启用常规 HTTP 和 HTTPS 访问)。

mon_standby

Int

确定应用启动时应用监控是否已禁用。 如果为非零,则监控已启用,否则监控已禁用。 通过手工启动 mon 组件可以在运行时启用监控。 默认值:1(监控已禁用)。

重要信息! vpn_ip、usr_ip 和 net_ip 属性中配置的 IP 地址必须是您的 CA AppLogic 网格上可使用的 IP 地址。 您可能会在您的网格显示板上发现这些地址以及网络掩码、网关和 DNS 服务器。 我们正在努力使 CA AppLogic 能自动提供这些地址。

应用资源

“WS_API”应用

资源

最小值

最大值

默认值

CPU

0.55

76

1.1

内存

992 MB

134 GB

1.656 GB

带宽

7 Mbps

12.5 Gbps

730 Mbps

应用卷

应用本身使用多个卷。 它们是应用的一部分且已配置到组件实例中。 应用边界没有需要配置的卷。

卷

大小

说明

代码

50M

该卷用来存储 API 应用的代码和脚本。 此卷已分配给 WEB5 组件。 默认情况下,提供名为“code”的填充卷给此应用使用。

conf

50M

该卷用来存储 Web 服务 API 应用的所有配置数据。 这包括由用户填充的“vdcs.conf”,其中包含有关远程网格、用户创建来访问远程网格的 ssh 密钥、API 应用生成来在 HTTPS 界面中访问 API 的 SSH 证书和用户创建来在 VPN 界面中访问 API 的 VPN 服务器端证书的信息。 此卷已分配给 NAS 组件。 默认情况下,提供名为“conf”的填充卷给此应用使用。

log_data

50M

此卷用于存储 API 服务器的日志数据。 它还用于存储 API 应用所需的临时文件。 此卷已分配给 NAS 组件。 默认情况下,提供名为“log_data”的填充卷给此应用使用。

mon

50M

此卷用于存储应用的监控数据。 用户没有理由访问/修改此卷;此卷供 MON 组件内部使用。 默认情况下,提供名为“mon”的卷来存储应用监控数据。

操作

在启动 WS_API 应用之前,需要对其进行配置才能访问通过 Web 服务接口管理的网格。 这包括在 conf 卷的数据子目录内创建 vdcs.conf 文件。 需要创建一对私/公密钥,并且需要用生成的公钥在目标网格控制器上设置用户。 关于如何填充 vdcs.conf、设置 ssh 密钥以及为 Web 服务 API 创建网格用户的信息,请参阅“配置”一节。

可以通过下列模式之一或组合模式对 WS_API 进行配置:

使用 HTTP

在此模式下,可以通过基于常规 HTTP 的接口访问 REST API。
例如,curl "http://usr_ip/api/v1/app/list?vdc=controller_name"。
要启动应用在此模式下工作,需要为强制性属性设置适当值并将 http_mode 属性设置为 http。 有关如何设置应用在此模式下工作的详细信息,请参阅“配置”一节。

使用 HTTPS

在此模式下,可以通过基于安全 HTTP 的接口访问 REST API。
例如,curl -k -E /path/to/client_key.pem "https://usr_ip/api/v1/app/list?vdc=controller_name"。
要启动应用在此模式下工作,需要为强制性属性设置适当值并将 http_mode 属性设置为 https。 您还可以使用上述属性表中显示的选项为要签署的证书相应设置 opts 属性。 在成功启动应用之后,必须将客户端证书从 conf 卷中的 ssl-keys 子目录复制到用于访问 WS_API 的客户端应用或浏览器中。 有关如何设置应用在此模式下运行的详细信息,请参阅“配置”一节。

使用 vpn 通道

在此模式下,在应用中的 in_vpn VPN 服务器和客户端的 VPN 客户之间创建安全 VPN 通道。 一旦使用不同 VPN 通道类型中的一种成功创建了通道,就可以通过基于常规 HTTP 的接口访问 REST API。
例如,curl "http://usr_ip/api/v1/app/list?vdc=controller_name"。
要在此模式下启动应用,需要为强制性属性设置适当值,设置 vpn_ip 属性,并将 http_standby 设置为 0。 默认情况下,vpn_ports 已设置为 80,443 以允许连接端口 80 和 443 (分别为 http 和 https),vpn_type 已设置为证书,允许 VPN 客户使用基于 SSL 证书的通道连接到应用的 VPN 服务器。 您还可以将 in_standby 属性设置为 1,仅允许通过 VPN 通道发出请求。 放弃来自 VPN 通道之外的任何 API 请求。 有关如何设置应用在此模式下运行的详细信息,请参阅“配置”一节。

应用体系结构

CA AppLogic Web 服务“WS_API”应用基础架构显示如下:

它包含以下组件:

Web 服务 API

配置

本节描述如何配置 WS_API 应用在下列三种不同操作模式的一种模式下启动。

配置 WS_API 应用

  1. 使用 CA AppLogic GUI 中的应用配给向导来配给 WS_API,或在 shell 中使用应用配给命令,但不设置任何属性。 确认向导已配置为在配给之后不启动应用,否则在使用该命令行时使用 --skipstart 选项。
    app provision WS_API ws_api_instance --skipstart 
    
  2. 管理应用的数据卷:
    vol manage ws_api_instance:conf 
    
  3. 在数据子目录中,确认存在名为 vdcs.conf 的文件。
    cd /mnt/vol/data
    ls vdcs.conf 
    

    此文件包括访问通过 REST API 管理的网格所必需的信息。

  4. 使用 vi 文本编辑器打开文件。
    vi vdcs.conf 
    
  5. 使用模板编辑文件作为参考:
    vdcs
       { 
       vdc controller_name : host = controller_ip or FQDN
          { 
          location  = "city, state, country" 
          latitude  = latitude 
          longitude = longitude 
          } 
    
    #  vdc controller_name : host = controller_ip or FQDN 
    #     { 
    #     location  = "city, state, country"
    #     latitude  = latitude
    #     longitude = longitude
    #     }
       } 
    
  6. 输入使用 API 访问的网格的相关信息。 要添加其他网格的信息,请取消行注释(删除 #)并添加第二个网格的信息。 在 vdc {...} 部分内重复 vdc 程序块可以添加更多网格。 此外请注意,经纬度的设置值是可选的。
  7. 保存并退出文本编辑器。
  8. 为了通过 ssh 访问在 vdcs.conf 中配置的网格,需要生成公/私密钥对。

    要生成密钥对:

    ssh-keygen -t dsa -f /mnt/vol/data/gridkey
    在提示输入密码时,按 Enter 键。 请勿输入密码。
    chmod 600 /mnt/vol/data/gridkey*
    chown 99:99 /mnt/vol/data/gridkey*
    
  9. 复制公钥:
    cat /mnt/vol/data/gridkey.pub 
    
  10. 在网格控制器上,使用此密钥作为每个网格的 sshkey 来创建 API 用户:
    user create api@domain.com pwd=- sshkey="ssh-dsa AAA.................xyz" 
    

    用户已创建。

  11. 退出卷管理器。

    现在可以用三种操作模式之一配置应用边界。

HTTP 模式

WS_API 应用通过基于表象化状态转变 (REST) 的服务向一个或多个网格提供 Web 服务接口。 HTTP 访问方法启用基于简单 HTTP 的 REST API 调用。

注意:使用此模式时应非常小心。 此模式没有安全检查,任何人都可以在没有进行任何身份验证的情况下创建 API 请求。 此外,客户端和 ws_api_instance 应用之间的所有流量都是明文。

要在 HTTP 模式下配置应用,需要将 http_mode 属性设置为 http 并将强制性属性设置为适当值。 例如:

app config ws_api_instance usr_ip=usr-ip net_ip=net-ip netmask=netmask gateway=gateway dns1=dns1 dns2=dns2 http_mode=http 

现在可以使用 app start 命令或 GUI 中的“启动应用”按钮启动应用。

HTTPS 模式

WS_API 应用通过基于表象化状态转变 (REST) 的服务向一个或多个网格提供 Web 服务接口。 HTTPS 访问方法启用基于安全 HTTP 的 REST API 调用。

以 HTTPS 模式配置应用

  1. 将 http_mode 属性设置为 https(默认)
  2. 将置为适当值。
  3. 设置 opts 属性以生成自定义 SSL 证书。

    注意:如果将 opts 留空,则会在应用启动时生成通用 SSL 证书。 http_mode 和 allowed_hosts 属性设置可仍设为默认值。 例如:

    app config ws_api_instance usr_ip=usr-ip net_ip=net-ip netmask=netmask gateway=gateway dns1=dns1 dns2=dns2 opts=ssl_country=Country,ssl_state=State,ssl_local=City,ssl_org_name=Organization,ssl_org_unit=Unit,ssl_common_name=Common Name,ssl_email_address=company@domain.com,ssl_export_pass=Passkey 
    
  4. 使用 app start 命令或 GUI 中的“启动应用”按钮启动应用。

    第一次启动应用时,在 conf 卷的 /mnt/config/ssl_keys/keys/ 目录中将创建由客户端证书和名为 api_client.pem 的私钥构成的 PEM 格式的客户端密钥,以及名为 api_client.p14 的浏览器的 PKCS12 格式的等效密钥。 api_client.p14 密钥文件可用于任何基于浏览器的 API 访问,api_client.pem 密钥可用于任何非基于浏览器的 API 访问。

生成任何其他客户端证书

  1. 登录到运行 ws_api_instance 的 main.api_srv 组件。
  2. 转到 /mnt/config/ssl_keys 目录。
  3. 生成“api”用户帐户的私钥。 openssl genrsa -out keys/api_client2_privkey.pem 2048
  4. 生成证书签名请求让 CA 签名。 openssl req -new -key keys/api_client2_privkey.pem -out keys/api_client2_request.csr
  5. 使用我们的 CA 为 CSR 签名。 openssl x509 -req -days 365 -in keys/api_client2_request.csr -CA CA/CA_cert.pem -CAkey CA/private/CA_key.pem -CAserial CA/CA_cert.srl -out keys/api_client2.cer
  6. 将 api_client2_a.pem 与 cert 串联为一,用作命令行 SSL/PEM 私钥。 cat keys/api_client2_privkey.pem keys/api_client2.cer > keys/api_client2.pem
  7. 导出通过普通 Web 浏览器可使用格式的密钥。 openssl pkcs12 -export -in keys/api_client2.cer -inkey keys/api_client_privkey2.pem -out keys/api_client2.p14
VPN 模式

WS_API 应用通过基于表象化状态转变 (REST) 的服务向一个或多个网格提供 Web 服务接口。 VPN 访问方法使 HTTP 请求能够通过安全 VPN 通道发送。

以 VPN 模式配置应用

  1. 将 vpn_ip 设置为所需 IP 地址并禁用 vpn_standby,即将其设置为 0。
  2. 将 in_standby 设置为 1 以限制通过 VPN 设置访问。

    例如:

    app config ws_api_instance usr_ip=usr-ip vpn_ip=vpn-ip net_ip=net-ip netmask=netmask gateway=gateway dns1=dns1 dns2=dns2 vpn_standby=0 in_standby=1 
    
  3. 使用应用启动命令或 GUI 中的“启动应用”按钮启动应用。

    在应用启动之后,VPN 服务器组件会生成必要的服务器证书和密钥文件(如果不存在这些文件)。

  4. 登录到组件并执行位于 /appliance 目录中的 security.sh 脚本以生成客户端证书和密钥。
    [ws_api_instance:main.in_vpn appliance]# ./security.sh generate_client
    生成的客户端 SSL 证书和密钥文件。
    ==============================================
    这些文件以及 CA 证书文件应复制到 VPN 服务器的 
    数据卷或 fs 挂接卷的 /client/ 子目录。
    在 auth_path 属性中应指定到客户端文件(client.a1c65e2bae3d0b57)的路径。
    文件的位置:
    客户端证书:/mnt/data/server/client.a1c65e2bae3d0b57.crt
    客户端密钥文件:/mnt/data/server/client.a1c65e2bae3d0b57.key
    CA 证书文件位于 /mnt/data/server/ca.crt
    

    在客户端子目录中生成客户端证书(例如:client.xxxxxxxxxxxxxxxx.crt)和密钥文件(例如:client.xxxxxxxxxxxxxxxx.key),在 conf 卷的服务器子目录中生成 CA 证书(ca.crt)。

  5. 将证书复制到远程 VPN 客户端组件的数据卷或 NFS 安装卷的 /client/ 子目录中。
说明

使用的开源软件和第三方软件

下面的第三方开源软件已安装在代码卷上。

软件

版本

已修改

许可

说明

JSON

2.15

No

Artistic

N/A

IPC-Run

0.82

No

GPLv2

N/A

XML-Simple

1.40

No

Artistic

N/A

Sort-Naturally

1.02

No

Artistic

N/A