{"id":18301787,"url":"https://github.com/kfsoftware/meetup-k8s-hlf","last_synced_at":"2026-03-10T01:34:45.618Z","repository":{"id":60961760,"uuid":"418454440","full_name":"kfsoftware/meetup-k8s-hlf","owner":"kfsoftware","description":null,"archived":false,"fork":false,"pushed_at":"2022-09-08T20:59:56.000Z","size":98,"stargazers_count":12,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-05T14:35:07.452Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kfsoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-10-18T10:38:49.000Z","updated_at":"2023-07-24T17:35:22.000Z","dependencies_parsed_at":"2022-10-07T12:44:39.094Z","dependency_job_id":null,"html_url":"https://github.com/kfsoftware/meetup-k8s-hlf","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/kfsoftware/meetup-k8s-hlf","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfsoftware%2Fmeetup-k8s-hlf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfsoftware%2Fmeetup-k8s-hlf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfsoftware%2Fmeetup-k8s-hlf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfsoftware%2Fmeetup-k8s-hlf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kfsoftware","download_url":"https://codeload.github.com/kfsoftware/meetup-k8s-hlf/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfsoftware%2Fmeetup-k8s-hlf/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30320891,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-09T20:05:46.299Z","status":"ssl_error","status_checked_at":"2026-03-09T19:57:04.425Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-05T15:16:59.855Z","updated_at":"2026-03-10T01:34:45.599Z","avatar_url":"https://github.com/kfsoftware.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Deploying Hyperledger Fabric on Kubernetes 2.3+ with a Kubernetes Operator\n\n## Pre requisites\n\n- Kubernetes cluster 1.15+\n- Kubectl HLF plugin\n- Helm\n\n## Nice to haves\n- Lens (https://github.com/lensapp/lens)\n\n# Installing the Kubectl HLF Plugin\n\nInstall the plugin from Github releases\n```bash\nwget \"https://github.com/kfsoftware/hlf-operator/releases/download/v1.7.0/hlf-operator_v1.7.0_linux_amd64.zip\"\nrm -rf ./hlf-operator\nunzip hlf-operator_v1.7.0_linux_amd64.zip -d hlf-operator\nchmod +x ./hlf-operator/kubectl-hlf\nsudo mv ./hlf-operator/kubectl-hlf /usr/local/bin/kubectl-hlf\n```\n\nTest it\n```bash\nkubectl hlf --help\n```\n\n\n## Provisioning a cluster\nIf you don't have an existing cluster, you can provision one with [KiND](https://github.com/kubernetes-sigs/kind).):\n\n```bash\nkind create cluster --image=kindest/node:v1.22.2\n```\n\n\nConfigure kubectl:\n```bash\nkind get kubeconfig \u003e ~/.kube/hlf-kind\nexport KUBECONFIG=~/.kube/hlf-kind\ngedit ~/.kube/hlf-kind\n```\nCheck:\n```bash\nkubectl get nodes\nkubectl get pods\n```\n\n## Installing the HLF operator\n\nAdd helm repository, source code here: https://github.com/kfsoftware/hlf-helm-charts \n```bash\nhelm repo add kfs https://kfsoftware.github.io/hlf-helm-charts --force-update \n```\n\nInstall chart\n```bash\nhelm install hlf-operator --version=1.7.0 -f hlf-operator.yaml kfs/hlf-operator\n```\nIn case you change the values, you can upgrade:\n```bash\nhelm upgrade hlf-operator --version=1.7.0 -f ./hlf-operator.yaml kfs/hlf-operator\n```\n\nChecks\n\n```bash\n# check CRDs\nkubectl get crds\n\n# check pods until ready\nkubectl get pods -w\n\n# check logs if there's a problem\nkubectl logs -c manager -f hlf-operator-controller-manager-\n```\n\n## Blockchain network\n\nCreate initial folders:\n```bash\nmkdir -p resources/org1\nmkdir -p resources/org2\nmkdir -p resources/orderer/ordererorg1\n```\n\n\n\n## Peer organization\n\nGenerate CA manifest:\n```\nkubectl hlf ca create --storage-class=standard --capacity=2Gi --name=org1-ca \\\n    --enroll-id=enroll --enroll-pw=enrollpw  --output \u003e resources/org1/ca.yaml\n```\nCreate CA\n```bash\nkubectl apply -f ./resources/org1/ca.yaml\n```\n\nChecks\n\n```bash\nkubectl get fabriccas.hlf.kungfusoftware.es -A\n# check pods until ready\nkubectl get pods -w\n```\n\nRegister user for the peers\n\n```bash\nkubectl hlf ca register --name=org1-ca --user=peer \\\n  --secret=peerpw --type=peer \\\n --enroll-id enroll --enroll-secret=enrollpw \\\n --mspid Org1MSP\n```\n\n```bash\nkubectl hlf peer create --storage-class=standard \\\n    --enroll-id=peer --mspid=Org1MSP \\\n    --enroll-pw=peerpw --capacity=5Gi \\\n    --name=org1-peer0 --ca-name=org1-ca.default \\\n    --output \u003e resources/org1/peer1.yaml\n```\n\nCreate Peer\n```bash\nkubectl apply -f ./resources/org1/peer1.yaml\n```\n\nChecks\n\n```bash\nkubectl get fabricpeers.hlf.kungfusoftware.es -A\n# check pods until ready\nkubectl get pods -w\n```\n\n## Prepare network config for org1\n\nRegister user\n```bash\nkubectl hlf ca register --name=org1-ca --user=admin \\\n --secret=adminpw --type=admin \\\n --enroll-id enroll --enroll-secret=enrollpw \\\n --mspid Org1MSP  \n```\nEnroll user\n```bash\nkubectl hlf ca enroll --name=org1-ca \\\n   --user=admin --secret=adminpw --mspid Org1MSP \\\n   --ca-name ca  --output peer-org1.yaml\n```\nGet connection config yaml\n```bash\nkubectl hlf inspect --output org1.yaml -o Org1MSP\n```\nAdd user key and cert to org1.yaml from peer-org1.yaml\n```bash\nkubectl hlf utils adduser --userPath=peer-org1.yaml \\\n    --config=org1.yaml --username=admin --mspid=Org1MSP\n```\n\nInstall chaincode\n```bash\nkubectl hlf chaincode install --path=./chaincodes/fabcar/go \\\n    --config=org1.yaml --language=golang --label=fabcar --user=admin --peer=org1-peer0.default\n```\n\nCheck pods:\n```bash\nkubectl get pods -w\n```\n\n## Orderer organization\n\nCreate orderer org folder\n```bash\nmkdir -p resources/orderer/ordererorg1 \n```\nGenerate CA manifest\n```bash\nkubectl hlf ca create --storage-class=standard \\\n   --capacity=2Gi --name=ordererorg1-ca \\\n   --enroll-id=enroll --enroll-pw=enrollpw  \\\n   --output \u003e resources/orderer/ordererorg1/ca.yaml\n```\n\nCreate CA\n```bash\nkubectl apply -f ./resources/orderer/ordererorg1/ca.yaml\n```\n\nRegister user for the orderer\n```bash\nkubectl hlf ca register --name=ordererorg1-ca \\\n   --user=orderer --secret=ordererpw \\\n   --type=orderer --enroll-id enroll \\\n   --enroll-secret=enrollpw --mspid=OrdererMSP\n```\n\nGenerate Orderer manifest\n```bash\nkubectl hlf ordnode create  --storage-class=standard \\\n   --enroll-id=orderer --mspid=OrdererMSP \\\n   --enroll-pw=ordererpw --capacity=2Gi \\\n   --name=ordnode-1 --ca-name=ordererorg1-ca.default \\\n   --output \u003e resources/orderer/ordererorg1/orderer.yaml\n```\n\n\nCreate Ordering Service\n```bash\nkubectl apply -f ./resources/orderer/ordererorg1/orderer.yaml\n```\n\nCheck pods:\n```bash\nkubectl get pods -w\n```\n\n## Create a channel\nCreate connection config yaml\n```bash\nkubectl hlf inspect --output ordservice.yaml \\\n -o OrdererMSP -o Org1MSP -o Org2MSP\n```\nRegister user\n```bash\nkubectl hlf ca register --name=ordererorg1-ca \\\n   --user=admin --secret=adminpw \\\n   --type=admin --enroll-id enroll \\\n   --enroll-secret=enrollpw --mspid=OrdererMSP\n```\nEnroll user to submit the transaction\n```bash\nkubectl hlf ca enroll --name=ordererorg1-ca \\\n  --user=admin --secret=adminpw --mspid OrdererMSP \\\n     --ca-name ca  --output admin-ordservice.yaml\n``` \nAdd user from admin-ordservice.yaml to ordservice.yaml\n```bash\nkubectl hlf utils adduser --userPath=admin-ordservice.yaml --config=ordservice.yaml --username=admin --mspid=OrdererMSP\n```\nGenerate channel block\n```bash\nkubectl hlf channel generate \\\n  --output=demo.block --name=demo \\\n  --organizations Org1MSP \\\n  --ordererOrganizations OrdererMSP\n\n```\n\nVisualize channel:\n```bash\nconfigtxlator proto_decode --input demo.block \\\n  --type common.Block --output block.json\n```\n\nEnroll user to submit the transaction\n\n```bash\n# enroll using the TLS CA\nkubectl hlf ca enroll --name=ordererorg1-ca \\\n   --namespace=default --user=admin \\\n   --secret=adminpw --mspid OrdererMSP \\\n   --ca-name tlsca  \\\n   --output admin-tls-ordservice.yaml \n```\n\nJoin the orderer node with the channel block\n```bash\nkubectl hlf ordnode join --block=demo.block \\\n  --name=ordnode-1 --namespace=default \\\n  --identity=admin-tls-ordservice.yaml\n```\n\n\n## Join peer to channel\n\nRegister user\n```bash\nkubectl hlf ca register --name=org1-ca \\\n  --user=admin --secret=adminpw --type=admin \\\n --enroll-id enroll --enroll-secret=enrollpw \\\n  --mspid Org1MSP  \n```\nEnroll user\n```bash\nkubectl hlf ca enroll --name=org1-ca --user=admin --secret=adminpw --mspid Org1MSP \\\n        --ca-name ca  --output peer-org1.yaml\n```\nGet connection config yaml\n```bash\nkubectl hlf inspect --output org1.yaml -o Org1MSP -o OrdererMSP\n```\nAdd user key and cert to org1.yaml from peer-org1.yaml\n```bash\nkubectl hlf utils adduser --userPath=peer-org1.yaml --config=org1.yaml --username=admin --mspid=Org1MSP\n```\n\nJoin peer to channel\n```bash\nkubectl hlf channel join --name=demo \\\n   --config=org1.yaml \\\n    --user=admin -p=org1-peer0.default\n```\n\nAdd anchor peer for Org1MSP\n```bash\nkubectl hlf channel addanchorpeer \\\n   --channel=demo --config=org1.yaml \\\n   --user=admin --peer=org1-peer0.default\n```\n\nInspect peer heights\n```bash\nkubectl hlf channel top --channel=demo \\\n   --config=org1.yaml \\\n   --user=admin -p=org1-peer0.default\n```\n\nInstall chaincode\n```bash\nkubectl hlf chaincode install --path=./chaincodes/fabcar/go \\\n    --config=org1.yaml --language=golang --label=fabcar --user=admin --peer=org1-peer0.default\n\n# this can take 3-4 minutes\n```\n\nQuery approved chaincodes:\n```bash\nkubectl hlf chaincode queryinstalled --config=org1.yaml --user=admin --peer=org1-peer0.default\n```\n\nApprove chaincode\n```bash\nPACKAGE_ID=fabcar:0c616be7eebace4b3c2aa0890944875f695653dbf80bef7d95f3eed6667b5f40 # replace it with the package id of your chaincode\nkubectl hlf chaincode approveformyorg --config=org1.yaml --user=admin --peer=org1-peer0.default \\\n    --package-id=$PACKAGE_ID \\\n    --version \"1.0\" --sequence 1 --name=fabcar \\\n    --policy=\"OR('Org1MSP.member')\" --channel=demo\n```\n\nCommit chaincode\n```bash\nkubectl hlf chaincode commit --config=org1.yaml --mspid=Org1MSP --user=admin \\\n    --version \"1.0\" --sequence 1 --name=fabcar \\\n    --policy=\"OR('Org1MSP.member')\" --channel=demo\n```\n\nTest chaincode\n```bash\nkubectl hlf chaincode invoke --config=org1.yaml \\\n    --user=admin --peer=org1-peer0.default \\\n    --chaincode=fabcar --channel=demo \\\n    --fcn=initLedger -a '[]'\n\n```\n\nQuery all cars:\n```bash\nkubectl hlf chaincode query --config=org1.yaml \\\n    --user=admin --peer=org1-peer0.default \\\n    --chaincode=fabcar --channel=demo \\\n    --fcn=QueryAllCars -a '[]'\n```\n\n\n## Update the channel\n\nGet original channel config\n```bash\nkubectl hlf channel inspect --channel=demo --config=org1.yaml \\\n   --user=admin -p=org1-peer0.default \u003e demo_original.json\n```\n\nModify the channel\n```bash\nexport CH_NAME=demo\nconfigtxlator proto_encode --input demo_original.json --type common.Config --output config.pb\n\nconfigtxlator proto_encode --input demo_update.json --type common.Config --output modified_config.pb\n\nconfigtxlator compute_update --channel_id $CH_NAME --original config.pb --updated modified_config.pb --output config_update.pb\n\n\nconfigtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json\n\n\necho '{\"payload\":{\"header\":{\"channel_header\":{\"channel_id\":\"'$CH_NAME'\", \"type\":2}},\"data\":{\"config_update\":'$(cat config_update.json)'}}}' | jq . \u003e config_update_in_envelope.json\n\nconfigtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb\n\n# kubectl hlf channel signupdate --channel=demo -f config_update_in_envelope.pb --user=admin --config=org1.yaml --mspid=Org1MSP --output org1-demo-update-sign.pb\n# kubectl hlf channel signupdate --channel=demo -f config_update_in_envelope.pb --user=admin --config=org2.yaml --mspid=Org2MSP --output org2-demo-update-sign.pb\n\nkubectl hlf channel update --channel=demo -f config_update_in_envelope.pb \\\n   --config=org1.yaml --user=admin --mspid=Org1MSP\n\n#  -s org1-demo-update-sign.pb -s org2-demo-update-sign.pb\n\n```\n\n\n\n## Create second organizations\n\nPrepare folder:\n```bash\nmkdir -p resources/org2\n```\n\nGenerate CA manifest:\n```\nkubectl hlf ca create --storage-class=standard --capacity=2Gi --name=org2-ca \\\n    --enroll-id=enroll --enroll-pw=enrollpw  --output \u003e resources/org2/ca.yaml\n```\n\nCreate CA\n```bash\nkubectl apply -f ./resources/org2/ca.yaml\n```\n\nRegister user for the peers\n\n```bash\nkubectl hlf ca register --name=org2-ca --user=peer --secret=peerpw --type=peer \\\n --enroll-id enroll --enroll-secret=enrollpw --mspid Org2MSP\n```\n\nGenerate Peer manifests:\n```bash\nkubectl hlf peer create --storage-class=standard --enroll-id=peer --mspid=Org2MSP \\\n       --enroll-pw=peerpw --capacity=5Gi --name=org2-peer0 --ca-name=org2-ca.default --output \u003e resources/org2/peer1.yaml\n```\n\nCreate Peer\n```bash\nkubectl apply -f ./resources/org2/peer1.yaml\n```\n\n## Add second organization to the channel\n\nGet JSON config for organization\n```bash\nkubectl hlf org inspect -o Org2MSP --output-path=crypto-config\n```\n\nAdd organization\n```bash\nkubectl hlf channel addorg --peer=org1-peer0.default --name=demo \\\n    --config=org1.yaml --user=admin --msp-id=Org2MSP --org-config=./configtx.yaml\n``` \n\nCheck channel config\n\n```bash\nkubectl hlf channel inspect --channel=demo --config=org1.yaml \\\n   --user=admin -p=org1-peer0.default \u003e demo.json\n```\n\n\n## Join peer of second organization to channel\n\nRegister user\n```bash\nkubectl hlf ca register --name=org2-ca --user=admin --secret=adminpw --type=admin \\\n --enroll-id enroll --enroll-secret=enrollpw --mspid Org2MSP  \n```\nEnroll user\n```bash\nkubectl hlf ca enroll --name=org2-ca --user=admin --secret=adminpw --mspid Org2MSP \\\n        --ca-name ca  --output peer-org2.yaml\n```\nGet connection config yaml\n```bash\nkubectl hlf inspect --output org2.yaml  -o Org1MSP -o Org2MSP -o OrdererMSP\n```\nAdd user key and cert to org2.yaml from peer-org2.yaml\n```bash\nkubectl hlf utils adduser --userPath=peer-org2.yaml --config=org2.yaml --username=admin --mspid=Org2MSP\n```\n\nJoin peer to channel\n```bash\nkubectl hlf channel join --name=demo --config=org2.yaml \\\n    --user=admin -p=org2-peer0.default\n```\n\n## Approve \u0026 Commit chaincode again\n\n\nInstall chaincode\n```bash\nkubectl hlf chaincode install --path=./chaincodes/fabcar/go \\\n    --config=org2.yaml --language=golang --label=fabcar --user=admin --peer=org2-peer0.default\n\n# this can take 3-4 minutes\n```\n\nQuery approved chaincodes:\n```bash\nkubectl hlf chaincode queryinstalled --config=org2.yaml --user=admin --peer=org2-peer0.default\n```\n\nApprove chaincode\n```bash\nPACKAGE_ID=fabcar:0c616be7eebace4b3c2aa0890944875f695653dbf80bef7d95f3eed6667b5f40 # replace it with the package id of your chaincode\nkubectl hlf chaincode approveformyorg --config=org1.yaml --user=admin --peer=org1-peer0.default \\\n    --package-id=$PACKAGE_ID \\\n    --version \"1.0\" --sequence 2 --name=fabcar \\\n    --policy=\"OR('Org1MSP.member', 'Org2MSP.member')\" --channel=demo\n\nPACKAGE_ID=fabcar:0c616be7eebace4b3c2aa0890944875f695653dbf80bef7d95f3eed6667b5f40 # replace it with the package id of your chaincode\nkubectl hlf chaincode approveformyorg --config=org2.yaml --user=admin --peer=org2-peer0.default \\\n    --package-id=$PACKAGE_ID \\\n    --version \"1.0\" --sequence 2 --name=fabcar \\\n    --policy=\"OR('Org1MSP.member', 'Org2MSP.member')\" --channel=demo\n\n```\n\nCommit chaincode\n```bash\nkubectl hlf chaincode commit --config=org1.yaml --mspid=Org1MSP --user=admin \\\n    --version \"1.0\" --sequence 2 --name=fabcar \\\n    --policy=\"OR('Org1MSP.member', 'Org2MSP.member')\" --channel=demo\n```\n\nTest chaincode\n```bash\nkubectl hlf chaincode invoke --config=org1.yaml \\\n    --user=admin --peer=org1-peer0.default \\\n    --chaincode=fabcar --channel=demo \\\n    --fcn=initLedger -a '[]'\n\n```\n\nQuery all cars:\n```bash\nkubectl hlf chaincode query --config=org1.yaml \\\n    --user=admin --peer=org1-peer0.default \\\n    --chaincode=fabcar --channel=demo \\\n    --fcn=QueryAllCars -a '[]'\n```\n\n\n## Add more orderers\n\nGenerate Orderer manifest for second orderer\n```bash\nkubectl hlf ordnode create  --storage-class=standard --enroll-id=orderer --mspid=OrdererMSP \\\n    --enroll-pw=ordererpw --capacity=2Gi --name=ordnode-2 --ca-name=ordererorg1-ca.default \\\n    --output \u003e resources/orderer/ordererorg1/orderer2.yaml\n```\n\nCreate orderer2\n```bash\nkubectl apply -f ./resources/orderer/ordererorg1/orderer2.yaml\n```\n\n\nGenerate Orderer manifest for third orderer\n```bash\nkubectl hlf ordnode create  --storage-class=standard --enroll-id=orderer --mspid=OrdererMSP \\\n    --enroll-pw=ordererpw --capacity=2Gi --name=ordnode-3 --ca-name=ordererorg1-ca.default \\\n    --output \u003e resources/orderer/ordererorg1/orderer3.yaml\n```\n\nCreate orderer3\n```bash\nkubectl apply -f ./resources/orderer/ordererorg1/orderer3.yaml\n```\nJoin orderer2 and orderer3\n```bash\nkubectl hlf ordnode join --block=demo.block --name=ordnode-2 \\\n    --namespace=default --identity=admin-tls-ordservice.yaml\nkubectl hlf ordnode join --block=demo.block --name=ordnode-3 \\\n    --namespace=default --identity=admin-tls-ordservice.yaml\n```\n\nFetch channel config\n```bash\nkubectl hlf channel inspect --channel=demo --config=org1.yaml \\\n   --user=admin -p=org1-peer0.default \u003e demo.json\n```\n\n## Add them as consenters\n\n```bash\nkubectl hlf inspect --output ordservice.yaml \\\n -o OrdererMSP -o Org1MSP -o Org2MSP\n```\n\nRegister user\n```bash\nkubectl hlf ca register --name=ordererorg1-ca \\\n   --user=admin --secret=adminpw \\\n   --type=admin --enroll-id enroll \\\n   --enroll-secret=enrollpw --mspid=OrdererMSP\n```\nEnroll user to submit the transaction\n```bash\nkubectl hlf ca enroll --name=ordererorg1-ca \\\n  --user=admin --secret=adminpw --mspid OrdererMSP \\\n     --ca-name ca  --output admin-ordservice.yaml\n``` \n\nAdd user from admin-ordservice.yaml to ordservice.yaml\n```bash\nkubectl hlf utils adduser --userPath=admin-ordservice.yaml --config=ordservice.yaml --username=admin --mspid=OrdererMSP\n```\n\nAdd the consenter orderer 2 and generate the channel update\n```bash\nkubectl hlf channel consenter add --config=ordservice.yaml \\\n    --orderers=ordnode-2.default \\\n    --user=admin --channel=demo \\\n    --mspid=OrdererMSP --output=add_orderers_consenter.pb\n```\n\nSubmit the transaction\n```bash\nkubectl hlf channel update --channel=demo -f add_orderers_consenter.pb \\\n   --config=ordservice.yaml --user=admin --mspid=OrdererMSP\n```\n\nAdd the consenter orderer 3 and generate the channel update\n```bash\nkubectl hlf channel consenter add --config=ordservice.yaml \\\n    --orderers=ordnode-3.default \\\n    --user=admin --channel=demo \\\n    --mspid=OrdererMSP --output=add_orderers_consenter.pb\n```\nUpdate the channel\n```bash\nkubectl hlf channel update --channel=demo -f add_orderers_consenter.pb \\\n   --config=ordservice.yaml --user=admin --mspid=OrdererMSP\n```\n\nFetch channel config and inspect the consenters\n```bash\nkubectl hlf channel inspect --channel=demo --config=org1.yaml \\\n   --user=admin -p=org1-peer0.default \u003e demo.json\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfsoftware%2Fmeetup-k8s-hlf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkfsoftware%2Fmeetup-k8s-hlf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfsoftware%2Fmeetup-k8s-hlf/lists"}