通过 CF 空间共享后端服务凭证

先决条件

  • 应用的早期版本已部署,并且

  • 已创建后端服务并将其绑定到此应用。

在以下示例中,应用名为“agentMatrix”。

检查后端服务是否已创建并可用

预先检查以获取后端服务的名称和类型。可以通过 CF 服务完成该操作。

复制到剪贴板

CF 服务

name           service         plan      bound apps      last operation

redis-test     redis32         redis-m   agentMatrix        create succeeded

创建服务密钥

服务密钥可生成用于手动配置市场服务客户的凭证。

为您的服务完成配置后,本地客户端、其它空间中的应用或部署范围外的实体就可以使用这些密钥访问您的服务。更多信息,请访问:https://docs.cloudfoundry.org/devguide/services/service-keys.html
要创建密钥,请使用以下命令。

复制到剪贴板

>cf create-service-key redis-test mykey

提取服务密钥

借助服务密钥,您可以轻松提取凭证。

使用以下命令

复制到剪贴板

>cf service-key redis-test mykey

{

 "hostname": "us-cdbr-iron-east-01.cleardb.net",

 "jdbcUrl": "jdbc:mysql://us-cdbr-iron-east-01.cleardb.net/ad_5bceb00f6a9bae5?user=b74345736ecbf3\u0026password=3374323f",

 "name": "ad_5bceb00f6a9bae5",

 "password":"3374323f",

 "port":"3306",

 "uri": "mysql://b74345736ecbf3:3374323f@us-cdbr-iron-east-01.cleardb.net:3306/ad_5bceb00f6a9bae5?reconnect=true",

 "username": "b74345736ecbf3"

}

提取服务密钥(手动,不推荐)

请注意,一些服务代理不支持服务密钥。在这些情况下,必须手动提取凭证。

在下一步中,我们将从应用的环境 variables 中提取凭证和服务信息。

此操作将通过命令 cf env appname 完成。

我们建议将凭证保存到一个文件中。

复制到剪贴板

cf env agentMatrix
Getting env variables for app agentMatrix in org test / space agentMatrix-3.0.0 ...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "redis32": [
   {
    "binding_name":null,
    "credentials": {
     "dns_servers": [
      "379cd1dc-fdac-89fd.broker.dynamic.redis-service.bosh"
     ],
     "host": "master2.service.dc1.a9ssvc",
     "hosts": [
      "redis-0.node.dc1.a9ssvc",
      "redis-1.node.dc1.a9ssvc",
      "redis-2.node.dc1.a9ssvc"
     ],
     "load_balanced_host": "service.dc1.a9ssvc",
     "password": "password",
     "port":6379
    },
    "instance_name": "redis-test",
    "label": "redis32",
    "name": "redis-test",
    "plan": "redis-m",
    "provider":null,
    "syslog_drain_url":null,
    "tags": [
     "data structure store",
     "database",
     "cache",
     "message broker"
    ],
    "volume_mounts": []
   }
  ]
 }
}

{
 "VCAP_APPLICATION": {
  "application_id": "bf42069d-48f6-453e-bfc5-960bb4df5b32",
  "application_name": "agentMatrix",
  "application_uris": [
   "agentMatrix.apps.eu1.mindsphere.io"
  ],
  "application_version":"9223a260-d396-436a-8144-5341a605c6c4",
  "cf_api": "https://api.cf.eu1.mindsphere.io",
  "limits": {
   "disk":512,
   "fds":16384,
   "mem":1024
  },
  "name": "agentMatrix",
  "space_id":"82d89932-af13-48ea-b1f3-91eb664332c1",
  "space_name": "agentMatrix-3.0.0",
  "uris": [
   "agentMatrix.apps.eu1.mindsphere.io"
  ],
  "users":null,
  "version":"9223a260-d396-436a-8144-5341a605c6c4"
 }
}

User-Provided:
Deployed:12

No running env variables have been set

No staging env variables have been set

导航到新的应用空间

现在,您导航到应使用服务的空间。在示例中,将新应用版本的空间称为 agentMAtrix-3.0.1。

复制到剪贴板

cf target -s agentMatrix-3.0.1

创建用户提供的服务 (cups)

为在另一个空间中使用该服务,可以创建用户提供的服务 (ups)。

通过用户提供的服务实例,开发者能够使用市场上尚未提供的服务,且其应用可在 Cloud Foundry 上运行,或者以我们的案例为例,可共享来自另一空间的服务。(请参见 https://docs.cloudfoundry.org/devguide/services/user-provided.html)

如果是 redis,ups 需要 host 名、密码、port load_blanced_host 和 hosts 作为参数。

请注意,每个服务的结构都略有不同。但是,命令均为 cf cups instance-name -p {parameter}。

复制到剪贴板

cf cups redis-test -p "{\"host\":\"master.service.dc1.a9ssvc\",\"password\":\"password\",\"port\":6379,\"load_balanced_host\":\"service.dc1.a9ssvc\", \"hosts\":\"[redis-0.node.dc1.a9ssvc]\"}"

绑定服务

在这里,将 cf cups 命令的服务直接绑定到应用上。无需等待服务创建,因为它只是现有服务的虚拟形式。

复制到剪贴板

cf bind-service agentMatrix redis-test

重新显示应用

将服务绑定到应用后,重新显示(而不是重启)应用。

复制到剪贴板

cf restage agentMatrix