Я развернул сеть Fabric на удаленном хосте, используя проект Fabric-samples с помощью функции тестовой сети.
Вот как я сделал:
./network.sh up createChannel -ca
./network.sh deployCC -ccl typescript -ccp ~/blockchain/ -cci initLedger
Так что я развернул свой собственный блокчейн с функцией инициализации внутри сети.
Я разработал приложение, которое вызывает сеть, и оно отлично работает при тестировании на моем компьютере. Я хочу развернуть свою сеть Fabric и чейнкод на удаленной виртуальной машине, чтобы мои коллеги могли продолжить разработку приложения и вызывать ту же сеть Fabric.
Для этого я развернул сеть на своей удаленной виртуальной машине и загрузил в локальную папку fabric-samples/test-network/organizations/peerOrganizations/org1.example.com
на своем локальном компьютере, чтобы получить сгенерированные сертификаты и информацию о подключении.
Я отредактировал файл org1.example.com/connection-org1.json
, чтобы изменить адрес локального хоста на IP-адрес моей удаленной виртуальной машины.
После настройки моего приложения для использования правильных файлов connection-org1.json
и fabric-ca-client-config.yaml
я запускаю свое приложение.
Мне удалось зарегистрировать администратора и создать нового пользователя в сети.
Но когда я хочу отправить или оценить транзакцию, я получаю следующую ошибку
2020-12-18T12:15:46.586Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Committer- name: orderer.example.com:7050, url:grpcs://orderer.example.com:7050, connected:false, connectAttempted:true
2020-12-18T12:15:46.587Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server orderer.example.com:7050 url:grpcs://orderer.example.com:7050 timeout:3000
2020-12-18T12:15:46.587Z - error: [DiscoveryService]: _buildOrderer[mychannel] - Unable to connect to the discovered orderer orderer.example.com:7050 due to Error: Failed to connect before the deadline on Committer- name: orderer.example.com:7050, url:grpcs://orderer.example.com:7050, connected:false, connectAttempted:true
2020-12-18T12:15:49.591Z - error: [ServiceEndpoint]: Error: Failed to connect before the deadline on Endorser- name: peer0.org1.example.com:7051, url:grpcs://peer0.org1.example.com:7051, connected:false, connectAttempted:true
2020-12-18T12:15:49.591Z - error: [ServiceEndpoint]: waitForReady - Failed to connect to remote gRPC server peer0.org1.example.com:7051 url:grpcs://peer0.org1.example.com:7051 timeout:3000
2020-12-18T12:15:49.591Z - error: [DiscoveryService]: _buildPeer[mychannel] - Unable to connect to the discovered peer peer0.org1.example.com:7051 due to Error: Failed to connect before the deadline on Endorser- name: peer0.org1.example.com:7051, url:grpcs://peer0.org1.example.com:7051, connected:false, connectAttempted:true
Кажется, он ищет grpcs://peer0.org1.example.com:7051, а не тот ip, который я указал в файле конфигурации.
Есть ли еще файл конфигурации для извлечения или какие-либо изменения в файлах тестовой сети, чтобы вызывать сеть не с локального хоста?
Я нашел подвох!
Просто добавьте в /etc/hosts dns, используемый образцом ткани, например так:
1.2.3.4 orderer.example.com
1.2.3.4 peer0.org1.example.com
1.2.3.4 peer0.org2.example.com
1.2.3.4 ca.example.com
И вуаля!
Это сработало! У меня та же проблема, с той лишь разницей, что приложение находится не на локальном хосте, а в модуле Kubernetes. Поэтому я должен использовать
.spec.hostAliases
, чтобы добавить имена хостов.