Hyperledger fabric first network not working with kafka and using TLS

匿名 (未验证) 提交于 2019-12-03 08:57:35

问题:

I try to run First network sample Building Your First Network from official docs. I need to run this sample with kafka orderer type. For this case I edit configtx.yaml file (changed OrdererType to kafka and added Brokers)

...  # Orderer Type: The orderer implementation to start # Available types are "solo" and "kafka" OrdererType: kafka  ...   Kafka:     # Brokers: A list of Kafka brokers to which the orderer connects     # NOTE: Use IP:port notation     Brokers:         - kafka:9093  ... 

And added kafka and zookeeper containers to base/docker-compose-base.yaml

....  zookeeper:  image: hyperledger/fabric-zookeeper  container_name: zookeeper  ports:   - 2181:2181  networks:   - byfn kafka:  image: hyperledger/fabric-kafka  container_name: kafka  environment:   - KAFKA_ADVERTISED_HOST_NAME=kafka   - KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181   - KAFKA_SSL_KEYSTORE_LOCATION=/var/private/ssl/kafka.server.keystore.jks   - KAFKA_SSL_KEYSTORE_PASSWORD=test1234   - KAFKA_SSL_KEY_PASSWORD=test1234   - KAFKA_SSL_TRUSTSTORE_LOCATION=/var/private/ssl/kafka.server.truststore.jks   - KAFKA_SSL_TRUSTSTORE_PASSWORD=test1234   - KAFKA_LISTENERS=PLAINTEXT://kafka:9092,SSL://kafka:9093   - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,SSL://kafka:9093   - KAFKA_MESSAGE_MAX_BYTES=103809024   - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024   - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false  volumes:   - ./sample/server.keystore.jks:/var/private/ssl/kafka.server.keystore.jks   - ./sample/server.truststore.jks:/var/private/ssl/kafka.server.truststore.jks  ports:   - 9093:9093   - 9092:9092  networks:   - byfn 

And I also generated crypto data for kafka client and server.

keytool -keystore server.keystore.jks -alias kafka -validity 365 -genkey -keyalg RSA -keysize 2048 -storepass test1234 -dname "cn=kafka" -keypass test1234 keytool -keystore client.keystore.jks -alias orderer -validity 365 -genkey -keyalg RSA -keysize 2048 -storepass test1234 -dname "cn=orderer" -keypass test1234 openssl req -new -x509 -keyout ca-key.pem -out ca-cert.pem -days 365 -subj "/CN=FAB5226" -nodes keytool -keystore server.truststore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt keytool -keystore client.truststore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt keytool -keystore server.keystore.jks -alias kafka -certreq -file server-cert-signing-request.pem -storepass test1234 openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -in server-cert-signing-request.pem -out server-cert-signed.pem -days 365 -CAcreateserial -passin pass:test1234 keytool -keystore server.keystore.jks -alias CARoot -import -file ca-cert.pem -storepass test1234 -noprompt keytool -keystore server.keystore.jks -alias kafka -import -file server-cert-signed.pem -storepass test1234 -noprompt keytool -keystore client.keystore.jks -alias orderer -certreq -file client-cert-signing-request.pem -storepass test1234 openssl x509 -req -CA ca-cert.pem -CAkey ca-key.pem -in client-cert-signing-request.pem -out client-cert-signed.pem -days 365 -CAcreateserial -passin pass:test1234 keytool -importkeystore -srckeystore client.keystore.jks -destkeystore client.keystore.p12 -deststoretype PKCS12 -storepass test1234 -srcstorepass test1234 openssl pkcs12 -in client.keystore.p12 -nodes -nocerts -out client-key.pem -passin pass:test1234 

And changed orderer container config in base/docker-compose-base.yaml

orderer.example.com:  container_name: orderer.example.com  image: hyperledger/fabric-orderer  environment:   - ORDERER_GENERAL_LOGLEVEL=debug   - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0   - ORDERER_GENERAL_GENESISMETHOD=file   - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block   - ORDERER_GENERAL_LOCALMSPID=OrdererMSP   - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp   # enabled TLS   - ORDERER_KAFKA_TLS_ENABLED=true   - ORDERER_KAFKA_TLS_PRIVATEKEY_FILE=/var/private/ssl/client-key.pem   - ORDERER_KAFKA_TLS_CERTIFICATE_FILE=/var/private/ssl/client-cert-signed.pem   - ORDERER_KAFKA_TLS_ROOTCAS_FILE=/var/private/ssl/ca-cert.pem   - ORDERER_KAFKA_VERBOSE=true   - ORDERER_KAFKA_SERVER=kafka   - ORDERER_KAFKA_BROKERS=[kafka:9093]   - ORDERER_GENERAL_TLS_ENABLED=true   - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key   - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt   - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]  working_dir: /opt/gopath/src/github.com/hyperledger/fabric  command: orderer  volumes:   - ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block   - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp   - ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls   - ../sample/ca-cert.pem:/var/private/ssl/ca-cert.pem   - ../sample/client-cert-signed.pem:/var/private/ssl/client-cert-signed.pem   - ../sample/client-key.pem:/var/private/ssl/client-key.pem  ports:   - 7050:7050 

Then I try to run the sample with following command

./byfn.sh -m up -s couchdb -a 

And get error message when script try to create new channel

Error: got unexpected status: SERVICE_UNAVAILABLE -- cannot enqueue

Error message when the script try to create new channel

Please help my to fix this error.

回答1:

I fixed problem. Added sleep 30 before running script.sh in cli container. File docker-compose-cli.yaml

command: /bin/bash -c 'sleep 30; ./scripts/script.sh ${CHANNEL_NAME} ${DELAY} ${LANG}; sleep $TIMEOUT' 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!