0

有没有办法从 PCF CLI 获取绑定凭据?例如,我想获取数据库凭据。

更多细节:

当您在 manifest.yml 文件中使用 Redis、cloudSQL 等服务时,pcf 会绑定这些服务并生成凭据,应用程序会使用它们。如果我想获得在本地使用的凭据,我需要登录 PCF 并去服务获取这些凭据。相反,我希望能够从 cli 获取这些凭据,而无需登录 pcf UI。cf env <service>显示 VCAP_SERVICES json。但对于数据库,它不显示凭据。不过,它适用于 Redis。对于数据库,我必须访问 Web 和服务,然后访问数据库服务以获取凭据。

4

1 回答 1

1

鉴于缺乏细节,这有点猜测,但是,服务越来越普遍地将其凭据存储在 CredHub 中,而不是将它们存储在 Cloud Controller 中。VCAP_SERVICES如果您按照评论中的建议查看环境变量,这会导致看到占位符条目。

如果这是您所看到的,您需要更进一步来检索凭据(这正是服务执行此操作的确切点,它使得破坏服务的凭据变得更加困难)。

  1. cf ssh进入你的应用容器
  2. curl -vv -i -H 'Content-Type: application/json' --cert /etc/cf-instance-credentials/instance.crt --key /etc/cf-instance-credentials/instance.key -d "$VCAP_SERVICES" 'https://credhub.service.cf.internal:8844/api/v1/interpolate' | jq .

这可能看起来很神奇,所以我会分解它。

a.)curl用于查询/api/v1/interpolateCredHub 的端点。此 API 接受VCAP_SERVICESwith 占位符的内容并返回不带占位符的版本。b.)-d "$VCAP_SERVICES"将请求的主体设置为$VCAP_SERVICES. 这正是 API 调用所期望的。c.)您告诉使用&curl处的证书和密钥执行双向 TLS 。这允许您使用 Credhub 进行身份验证。d.) 结果是 JSON,所以只是漂亮地打印响应。这是可选的。/etc/cf-instance/credentials.key/etc/cf-instance/credentials.crtjq .

您可以使用以相同方式配置的 HTTP 客户端在您选择的编程语言中实现相同的功能。但是,您必须从容器内部执行此操作,因为 CredHub 只能从那里获得,而且因为这是唯一可以获取对 CredHub 进行身份验证所需的证书/密钥的地方。

于 2021-08-01T18:47:51.040 回答