K8s部署的Hyperledger Fabric v2.x跨命名空间访问正确连接配置是什么?
问题根因
报错信息显示SDK实际尝试连接的是短域名peer0:7051,而非你配置中带命名空间后缀的完整域名,原因是Fabric Peer节点对外广播的自身服务端点默认是短域名,同命名空间下可正常解析,跨命名空间无法解析。同命名空间CLI调用正常也符合这个特征。
解决方案
方案1:修改连接配置(无需调整集群侧资源,优先使用)
直接在cpp-profile配置中增加服务发现地址映射,或者关闭动态服务发现使用静态地址:
- 增加地址映射,在
client.connection配置块中新增如下内容:
"client": { "organization": "MyOrg", "connection": { "timeout": { "peer": { "endorser": "10000" } }, "discovery": { "asLocalhost": false, "override": { "peer0:7051": "peer0.hlf-blockchain:7051", "peer1:7051": "peer1.hlf-blockchain:7051", "peer2:7051": "peer2.hlf-blockchain:7051" } } } }
- 若不需要动态发现其他节点,可在go-sdk初始化网关时添加
WithDiscovery(false)参数,完全使用配置文件中的静态地址,忽略Peer返回的端点信息。
方案2:调整Peer节点广播地址(适合多应用跨命名空间访问场景)
修改Peer部署的StatefulSet配置,将节点对外广播的地址改为带命名空间的完整域名:
env: - name: CORE_PEER_ADDRESS value: "peer0.hlf-blockchain:7051" - name: CORE_PEER_CHAINCODEADDRESS value: "peer0.hlf-blockchain:7052" - name: CORE_PEER_EVENTS_ADDRESS value: "peer0.hlf-blockchain:7061"
配置更新后重启Peer节点即可,后续所有跨命名空间的SDK都可直接解析到节点地址。
可选适配调整
如果修改配置后出现TLS握手报错,需将每个Peer配置中的ssl-target-name-override和hostnameOverride字段值改为带命名空间的完整域名(如peer0.hlf-blockchain),匹配Peer TLS证书的SAN字段即可。
前置校验
先进入hlf-app命名空间下的任意运行中Pod,执行以下命令排除基础网络问题:
- 执行
nslookup peer0.hlf-blockchain,确认可正常解析到ClusterIP - 执行
telnet peer0.hlf-blockchain 7051,确认端口可连通,无网络策略拦截
内容的提问来源于stack exchange,提问作者Niraj Kumar
相关产品推荐
相关产品推荐

