本地OpenWhisk调用Cloudant动作遇证书签名验证错误求助
解决OpenWhisk绑定Cloudant时的证书验证错误与Host地址问题
我来帮你理清这个问题的根源,一步步解决本地部署OpenWhisk绑定Cloudant(CouchDB)时遇到的证书错误和Host地址困惑:
问题核心原因
你之前用minikube ip作为Cloudant的host参数,触发了UNABLE_TO_VERIFY_LEAF_SIGNATURE错误,主要是两个点:
- 集群内部访问路径错误:minikube IP是集群对外的入口地址,但OpenWhisk的动作Pod运行在集群内部,直接走外部IP会绕到Ingress/NodePort,而Cloudant的证书大概率是针对内部服务名称签发的,和minikube IP不匹配,导致证书验证失败。
- 自签证书不被信任:本地部署的Cloudant一般用自签TLS证书,OpenWhisk的Node.js运行时默认会严格校验证书链,自然会拒绝连接。
具体解决方案步骤
1. 获取Cloudant在集群内的正确访问地址
先找到Cloudant服务的集群内部DNS名称:
# 替换<cloudant-namespace>为Cloudant部署所在的命名空间 kubectl get svc -n <cloudant-namespace>
假设输出里Cloudant的Service名称是cloudant-couchdb,端口是默认的5984,那么它的集群内部访问地址是:cloudant-couchdb.<cloudant-namespace>.svc.cluster.local
2. 重新绑定Cloudant包,修正Host并跳过证书验证(仅本地开发用)
在绑定命令中,把host换成集群内部的Service DNS名称,同时添加skipCertVerification参数绕过自签证书验证(注意:生产环境绝对不能用这个参数,要配置可信的合法证书):
wsk package bind /whisk.system/cloudant contactdb \ -p username $(CLOUDANT_USER) \ -p password $(CLOUDANT_PASS) \ -p host cloudant-couchdb.<cloudant-namespace>.svc.cluster.local \ -p port 5984 \ -p dbname contactdb \ -p skipCertVerification true
3. 重新调用write动作验证
执行你的调用命令,应该就能成功写入文档了:
wsk action invoke contactdb/write \ -b \ -p dbname contactdb \ -p doc '{"name":"Bruno Wego","email":"brunowego@gmail.com"}' \ -r \ -i
额外检查项
- 确认Cloudant已经提前创建了
contactdb数据库,否则会出现数据库不存在的错误。 - 如果集群里配置了NetworkPolicy,要确保OpenWhisk所在的
openwhisk命名空间能访问Cloudant所在命名空间的服务端口。
内容的提问来源于stack exchange,提问作者Bruno Wego
相关产品推荐
相关产品推荐

