是否有办法从PCF CLI获得绑定凭据?例如,我想获得数据库凭据。
更多细节:
当你在manifest中使用Redis, cloudSQL等服务时。Yml文件,PCF绑定这些服务并生成凭据,应用程序使用它们。如果我想获得本地使用的积分,我需要登录PCF并前往服务获取这些积分。相反,我希望能够从cli获得这些信用,而不必登录到pcf UI。cf env <service>
显示VCAP_SERVICES json。但是对于数据库,它不显示凭据。不过,这对Redis来说是显而易见的。对于数据库,我必须去Web,然后去服务,然后去数据库服务获取凭据。
考虑到缺乏细节,这有点像猜测,但是,服务将其凭据存储在CredHub中而不是将其存储在Cloud Controller中越来越普遍。如果您按照评论中的建议查看环境变量,就会在VCAP_SERVICES
中看到占位符条目。
如果这就是您所看到的,则需要进一步检索凭据(这是服务执行此操作的确切点,这会使服务的凭据更加难以破坏)。
cf ssh
到你的应用程序容器- 运行
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 .
这可能看起来像魔法,所以我将分解它。
)。它使用curl
来查询CredHub的/api/v1/interpolate
端点。这个API接受带有占位符的VCAP_SERVICES
的内容,并返回一个没有占位符的版本。b。)-d "$VCAP_SERVICES"
将请求的主体设置为$VCAP_SERVICES
的内容。这正是API调用所期望的。c。)您正在告诉curl
使用证书&钥匙在/etc/cf-instance/credentials.key
&/etc/cf-instance/credentials.crt
。这允许您使用Credhub进行身份验证。d。)结果是JSON,所以jq .
只是漂亮地打印响应。它是可选的。
您可以使用以相同方式配置的HTTP客户端,在您选择的编程语言中实现相同的功能。您必须从容器内部执行此操作,因为只有从容器中才能获得CredHub,而且这也是您可以获得认证到CredHub所需的证书/密钥的唯一地方。