WEB3DEV

Cover image for Como Implantar uma Rede Hyperledger Fabric no Kubernetes?
Panegali
Panegali

Posted on

Como Implantar uma Rede Hyperledger Fabric no Kubernetes?

Com a crescente necessidade de blockchains modernas e tecnicamente avançadas, a Hyperledger Fabric emergiu como uma estrutura de blockchain robusta, de código aberto e permissionada, integrada com recursos exclusivos de gerenciamento de identidade e controle de acesso. Devido a esses atributos, a estrutura da Hyperledger é amplamente adotada para uma variedade de aplicações do setor, como a criação de dApps altamente viáveis ​​e soluções descentralizadas de nível empresarial para setores que abrangem Web3, bancos, cadeias de suprimentos, DeFi, finanças comerciais e muito mais.

Se você planeja implantar seu aplicativo blockchain no ecossistema Hyperledger Fabric para aproveitar suas tecnologias subjacentes, precisará de uma rede Hyperledger distribuída em qualquer infraestrutura local ou em nuvem. Este guia fala sobre a implantação da rede da Hyperledger Fabric no Kubernetes, uma plataforma ideal para implantação de blockchain com uma infraestrutura de hospedagem de dApps escalável e resiliente.

Implantados no Kubernetes, os nós e redes de blockchain tornam-se fáceis de gerenciar, dimensionar e orquestrar. Além disso, o Kubernetes usa recursos com eficiência, de acordo com a carga do sistema específico da rede, resultando em baixo custo e poder de computação para criar e dimensionar aplicativos.

Agora que você entende os fundamentos da Hyperledger Fabric e do Kubernetes, é hora de discutir o processo de implantação passo a passo da rede.

Como implantar uma rede Hyperledger Fabric no Kubernetes

Você construirá o seguinte:

Fabric CA

Primeiro, você implantará uma Autoridade de Certificação (CA) da Fabric, com suporte do PostgresSQL, para gerenciar identidades.

Fabric Orderer

Em seguida, você implantará um serviço Orderer (ordenador) de vários nós de ordenação da Fabric para estabelecer consenso sobre o cluster Raft. Este serviço de ordenação da Fabric permite consenso em redes de desenvolvimento e produção.

Fabric Peer

Por fim, você implantará vários peers (pares) e os conectará a um canal. Ligaremos os peers a um banco de dados CouchDB conforme descrito na imagem abaixo:

Pré-requisitos:

Você precisa das 3 coisas a seguir para implantar sua rede Hyperledger Fabric. Além disso, você deve entender a tecnologia de conteinerização e como o Kubernetes funciona:

  1. Um cluster Kubernetes em funcionamento.
  2. Um nome de domínio para seu cluster.
  3. Um repositório com artefatos.

Assim que tiver o cluster, instale o controlador do Ingress. Para este guia, estamos usando o NGINX.

Implantando a rede Hyperledger Fabric no Kubernetes

Instalando o Helm Chart da Fabric CA.

Instale o Helm Chart real da Fabric CA. Execute o comando Kubectl get pods para buscar o pod real que executa a CA. Em seguida, execute kubectl logs para ver se o servidor da CA está em execução. Use o seguinte comando:

helm install stable/hlf-ca -n ca -namespace blockchain -f./helm_values/ca_values.yaml

CA_POD=$(kubectl get pods -n blockchain -l "app=hlfca,release=ca" -ojsonpath="{.items[0].metadata.name}")

kubectl logs -n blockchain $CA_POD | grep 'Listening on'
Enter fullscreen mode Exit fullscreen mode

Como você pode ver, os valores para a CA são mais complicados.

Primeiro, defina a tag de imagem na qual você usa a Fabric v2.x ou v2.5. Além disso, implemente um Ingress. Essa abordagem permite que você acesse a autoridade de certificação fora do cluster Kubernetes.

Em seguida, defina as configurações, como a versão das ferramentas da Hyperledger, que são personalizáveis ​​em um dos mapas de configuração no gráfico. Os mapas de configuração são abstrações do Kubernetes que armazenam valores disponibilizados ao POD.

Observe que você também deve especificar a solicitação de assinatura de certificado e uma lista de afiliação, que permanecerá vazia no cenário atual.

Por fim, adicione uma afinidade de Pod novamente. Garantimos que nosso servidor Fabric CA seja implantado na mesma máquina Kubernetes que nosso servidor PostgreSQL. Consulte as imagens abaixo para melhor visualização:

Gerando a identidade da Fabric CA

Depois que a CA começar a ser executada, registre-se na identidade da Fabric CA. Para executar o primeiro comando, use kubectl exec para verificar a existência de um certificado dentro da pasta do provedor de serviços de associação da Fabric CA.

Feito corretamente, você pode executar o comando fabric-ca-client enroll na CA, que aponta para o Ingress da CA. Depois disso, você pode executar o Kublect get ingress em sua máquina para obter o Ingress conectado ao serviço da Fabric CA. Este é o domínio sobre o qual falamos nos pré-requisitos.

Com esta configuração, você pode executar o comando curl e obter as informações da CA. Lembre-se de que a configuração bem-sucedida depende muito da configuração correta do TLS pelo Gerenciador de certificados. Portanto, pode ser necessário esperar mais tempo para que a configuração funcione. Use o seguinte comando para executar o comando curl:

kubectl exec -n blockchain $CA_POD -- cat/var/hyperledger/fabric-ca/msp/signcerts/cert.pem

kubectl exec -n blockchain $CA_POD -- bash -c 'fabric-ca-client

enroll -d -uhttp://$CA_ADMIN:$CA_PASSWORD@$SERVICE_DNS:7054′

CA_INGRESS=$(kubectl get ingress -n blockchain -l "app=hlfca,release=ca" -ojsonpath="{.items[0].spec.rules[0].host}")

curl https://$CA_INGRESS/cainfo
Enter fullscreen mode Exit fullscreen mode

Obtendo o material criptográfico

Depois de configurar e instalar sua CA, você pode transferir o certificado ou o servidor CA para sua máquina usando o binário do cliente Fabric CA. Por exemplo, se estiver usando um Mac, use o Homebrew para instalá-lo.

Em seguida, use Kubectl exec para executar o comando register na Fabric CA, que registra a organização responsável por hospedar os Orderers e os Peers.

Após o registro bem-sucedido, você pode usar o cliente Fabric CA novamente para se inscrever na identidade e receber sua chave privada e seu certificado. Como essa identidade é a do administrador, executaremos o seguinte comando para copiar o certificado do signcerts para a pasta admincerts.

FABRIC_CA_CLIENT_HOME=./config fabric-ca-client getcacert -uhttp://$CA_INGRESS -M ./AidTechMSP

kubectl exec -n blockchain $CA_POD -- fabric-ca-client register -id.name org-admin -id.secret OrgAdm1nPW -id.attrs 'admin=true:ecert'

FABRIC_CA_CLIENT_HOME=./config fabric-ca-client enroll -uhttp://org-admin:OrgAdm1nPW@$CA_INGRESS -M ./AidTechMSP

mkdir -p ./config/AidTechMSP/admincerts

cp ./config/AidTechMSP/signcerts/* ./config/AidTechMSP/admincerts
Enter fullscreen mode Exit fullscreen mode

Salvando material criptográfico no Kubernetes

Forneça o certificado da autoridade criptografada para estabelecer uma conexão TLS e se comunicar com a CA configurada. Isso porque o cliente Fabric CA verifica se o certificado apresentado durante a conexão corresponde ao associado ao servidor CA. Como seus aplicativos utilizarão o certificado e a chave, você deve empregar um comando kubectl create secret generic para incluir o arquivo como um segredo no serviço Kubernetes:

ORG_CERT=$(ls ./config/AidTechMSP/admincerts/cert.pem)

kubectl create secret generic -n blockchain hlf-org-admincert-from-file=cert.pem=$ORG_CERT

ORG_KEY=$(ls ./config/AidTechMSP/keystore/*_sk)

kubectl create secret generic -n blockchain hlf-org-adminkey-from-file=key.pem=$ORG_KEY

CA_CERT =$(ls ./config/AidTechMSP/cacert/*.pem)

kubectl create secret generic -n blockchain hlf-ca-cert-from-file=cert.pem=$CA_CERT
Enter fullscreen mode Exit fullscreen mode

Gerando Gênesis e Canal

Agora você pode executar o configtx Gen2. É utilizado duas vezes dentro dos dois perfis criados para gerar um bloco gênesis para os orderers e uma cadeia de transações para os peers. Portanto, você tem dois segredos (secrets) do Kubernetes para armazenar esses itens no cluster.

cd ./config
configtxgen -profile OrdererGenesis -outputBlock ./genesis.block
configtxgen -profile MyChannel -channelID mychannel -outputCreateChannelTx ./mychannel.tx
kubectl create secret generic -n blockchain hlf-genesis -fromfile=genesis.block
kubectl create secret generic -n blockchain hlf-channel -fromfile=mychannel.tx
Enter fullscreen mode Exit fullscreen mode

Fabric Orderer

Após a configuração bem-sucedida de uma Fabric CA totalmente funcional, é hora de passar para o Orderer. A seguir estão as etapas envolvidas na execução do Orderer.

  • Instalando o serviço de ordenação Raft
  • Configurando a Identidade do Orderer
  • Salvando o material criptográfico do Orderer no Kubernetes
  • Instalando o Helm Chart do Fabric Orderer

Vamos discutir todas essas etapas uma a uma:

Configurando o cluster Raft

A configuração do cluster Raft é necessária em dois locais:

Configuração local

Governa aspectos relacionados ao nó, incluindo comunicação TLS, armazenamento de arquivos e comportamento de replicação.

Configuração do canal

Define a associação do cluster Raft para o canal associado e os parâmetros específicos do protocolo, como frequência de pulsação (heartbeat), tempos limite de líder, etc.

Como cada canal tem sua própria instância para executar o protocolo Raft, consulte o nó Raft na configuração dos canais pertencentes a ele. Adicione servidores específicos de canal e certificados TLS de cliente à configuração de canal para isso. Essa ação garantirá que, quando os nós receberem mensagens de qualquer canal, eles possam confirmar a identidade do nó que envia a mensagem.

Consulte a seção abaixo do configtx.yaml que menciona três nós raft no canal:

Consenters:
            - Host: raft0.example.com
              Port: 7050
              ClientTLSCert: path/to/ClientTLSCert0
              ServerTLSCert: path/to/ServerTLSCert0
            - Host: raft1.example.com
              Port: 7050
              ClientTLSCert: path/to/ClientTLSCert1
              ServerTLSCert: path/to/ServerTLSCert1
            - Host: raft2.example.com
              Port: 7050
              ClientTLSCert: path/to/ClientTLSCert2
              ServerTLSCert: path/to/ServerTLSCert2
Enter fullscreen mode Exit fullscreen mode

Uma vez concluída a configuração do canal, as ferramentas configtx.yaml lerão os caminhos dos certificados TLS e, assim, substituirão os caminhos dos bytes correspondentes dos certificados.

Configurando a Identidade do Orderer

Agora, você pode configurar a Identidade do Orderer. Primeiro, use kubectl exec para se conectar à fabric-ca e registrar a identidade do Orderer com uma CA. Em seguida, obtenha os materiais criptográficos para identificar o Orderer ao inscrevê-lo. Para esta instância, colocaremos uma senha fictícia “ord${NUM}_pw,” mas em uma implantação real, é melhor usar uma string complexa (por exemplo, alfanumérica de comprimento de pelo menos 12).

Aqui, você trabalhará com o primeiro Orderer; se você deseja instalar o segundo Orderer, altere a exportação inicial e defina o NUM para 2 no seguinte comando:

export NUM=1
kubectl exec $CA_POD -n blockchain  -- fabric-ca-client register -id.name ord${NUM} -id.secret ord${NUM}_pw -id.type orderer
FABRIC_CA_CLIENT_HOME=./config fabric-ca-client enroll -d -u https://ord${NUM}:ord${NUM}_pw@$CA_INGRESS -M ord${NUM}_MSP
Enter fullscreen mode Exit fullscreen mode

Salvando o material criptográfico do Orderer no Kubernetes

Depois de criar o material criptográfico para o Orderer, você pode armazená-lo no Kubernetes para usá-lo durante a implantação do Helm chart. Abaixo está a ilustração de como salvar o certificado e a chave do Orderer.

NODE_CERT=$(ls ./config/ord_${NUM}_MSP/signcerts/*.pem)

kubectl create secret generic -n blockchain hlf-ord${NUM}-idcert -from-file=cert.pem=$NODE_CERT

NODE_KEY=$(ls ./config/ord_${NUM}_MSP/keystore/*_sk)

kubectl create secret generic -n blockchain hlf-ord${NUM}-idkey -from-file=key.pem=$NODE_KEY
Enter fullscreen mode Exit fullscreen mode

Instalando o Helm Chart do Fabric Orderer

Agora você pode instalar os Orderers reais para verificar se eles foram inicializados. Use o seguinte comando:

helm install stable/hlf-ord -n ord${NUM} -namespace blockchain -f./helm_values/ord${NUM}_values.yaml
ORD_POD=$(kubectl get pods -n blockchain -l "app=hlf-ord,release=ord${NUM}" -o jsonpath="{.items[0].metadata.name}")

kubectl logs -n blockchain $ORD_POD | grep 'completeInitialization'
Enter fullscreen mode Exit fullscreen mode

Além disso, defina o tipo de consenso, o serviço de Ordenação Raft e o ID MSP do provedor de serviços de associação da organização. Por fim, especifique um conjunto de segredos necessários para conectar-se ao Certificado de Autoridade adequadamente, como o segredo caServerTls, o segredo do bloco gênesis (hlf–genesis neste exemplo) e o certificado de administrador para a organização.

Em seguida, você pode usar o comando kubectl get pods para obter o Pod do Orderer e verificar se a ordenação foi iniciada usando kubectl logs durante a filtragem para a string completeInitialization. Isso conclui a criação de um serviço básico de ordenação que usa o Raft.

Fabric Peer

Finalmente, é hora de instalar o Fabric Peer, que mantém o registro completo dos blocos. A instalação envolve as várias etapas a seguir;

  • Instalando o Helm Chart do CouchDB
  • Configurando a identidade do Peer
  • Salvando o material criptográfico do Peer no Kubernetes
  • Instalando o Helm Chart do Fabric Peer
  • Criando o canal
  • Buscando o canal e ingressando nele

Instalando o Helm Chart do CouchDB

A primeira etapa da instalação do banco de dados CouchDB é semelhante à instalação do chart do PostgreSQL. Após a implantação, use os registros do Kubernetes para garantir que ele esteja em execução.

O arquivo de valores (values) é direto nesta instância, especificando a versão do Hyperledger carsDB e, novamente, especifica a persistência para que o banco de dados couchDB mantenha os dados e a antiafinidade para que os pods do couchDB sejam implantados em diferentes máquinas Kubernetes.

Configurando a identidade do Peer

Recupere a CA_PASSWORD para configurar a identidade do peer. É uma senha única gerada automaticamente pelo chart. Em seguida, registre o peer na autoridade certificadora, como fizemos com o Orderer, especificando um tipo de ID diferente (neste caso, um peer). O peer tentará se registrar com a CA periodicamente até que seja bem-sucedido. Depois disso, você verá as strings aparecendo nos registros.

kubectl exec $CA_POD -n blockchain  -- fabric-ca-client register -id.name peer${NUM} -id.secret peer${NUM}_pw -id.type peer

FABRIC_CA_CLIENT_HOME=./config fabric-ca-client enroll -d -u https://peer${NUM}:peer${NUM}_pw@$CA_INGRESS -M peer${NUM}_MSP
Enter fullscreen mode Exit fullscreen mode

Salvando o material criptográfico do Peer no Kubernetes

Como o Orderer, salve o material criptográfico do Peer no Kubernetes. Mais uma vez, salve o certificado e a chave do Peer usando o seguinte comando:

NODE_CERT=$(ls ./config/peer_${NUM}_MSP/signcerts/*.pem)

kubectl create secret generic -n blockchain hlf-peer${NUM}-idcert -from-file=cert.pem=$NODE_CERT
NODE_KEY=$(ls ./config/peer_${NUM}_MSP/keystore/*_sk)
kubectl create secret generic -n blockchain hlf-peer${NUM}-idkey -from-file=key.pem=$NODE_KEY
Enter fullscreen mode Exit fullscreen mode

Instalando o Helm Chart do Fabric Peer

Agora, instale o Fabric Peer executando o seguinte comando:

helm install stable/hlf-peer -n peer${NUM} -namespace blockchain -f ./helm_values/peer${NUM}_values.yaml
PEER_POD=$(kubectl get pods -n blockchain -l "app=hlf-peer,release=peer${NUM}" -o jsonpath="{.items[0].metadata.name}")
kubectl logs -n blockchain $PEER_POD | grep 'Starting peer
Enter fullscreen mode Exit fullscreen mode

O arquivo de valores para o peer é semelhante ao arquivo de valores do Orderer, pois menciona o endereço 'fabric-ca' e o nome de usuário do peer na autoridade de certificação. Ele também especifica que você está usando o CouchDB e o nome da implantação do Helm do CouchDB. Certifique-se de anotar os segredos de que precisamos, como o segredo ca-TLS, que você deve comunicar com segurança; o segredo do canal, especificando a transação do canal que permitirá ao peer criar e ingressar nos canais; e a chave do certificado de administrador da organização, que também é necessária para ingressar no canal para solicitar permissão para a rede.

Criando o canal

Depois de criar o primeiro peer, crie o canal usando o comando abaixo. Para isso, você precisará do endereço do Orderer, um nome relevante para o canal e um local para a transação canalizada.

kubectl exec -n blockchain $PEER_POD -- peer channel create -o ord1-hlford.
blockchain.svc.cluster.local:7050 -c mychannel -f/hl_config/channel/mychannel.tx
Enter fullscreen mode Exit fullscreen mode

Buscando o canal e ingressando nele

Depois de criar o canal, execute o comando fetch e ingresse nele em todos os peers que você criou. Faça isso executando o comando peer channel fetch config dentro do Peer. Em seguida, execute peer channel join dentro de cada contêiner de peer. Por fim, execute peer channel list para verificar se o Peer ingressou no canal.

kubectl exec -n blockchain $PEER_POD -- peer channel fetch
config /var/hyperledger/mychannel.block -c mychannel -o ord1-hlford.blockchain.svc.cluster.local:7050
kubectl exec -n blockchain $PEER_POD -- bash -c
'CORE_PEER_MSPCONFIGPATH=$ADMIN_MSP_PATH
peer channel join -b /var/hyperledger/mychannel.block'
kubectl exec -n blockchain $PEER_POD -- peer channel list
Enter fullscreen mode Exit fullscreen mode

Pronto! Se você seguiu todas as etapas corretamente, sua rede Hyperledger no Kubernetes será implantada com sucesso. Aproveite sua rede para executar nós, criar dApps ou aplicativos Web3 personalizados.

Mude para a implantação rápida e sem código do Hyperledger Fabric com o Zeeve

O Zeeve oferece uma poderosa plataforma de infra-estrutura Web3 para implantar seus nós Hyperledger Fabric e redes em minutos. O Zeeve oferece suporte às versões LTS 1.4x e a mais recente 2.2x para fornecer uma infraestrutura atualizada para os nós da Hyperledger Fabric. Como uma infraestrutura Blockchain de baixo código de nível empresarial, o Zeeve permite fácil implantação, monitoramento e gerenciamento de nós e redes blockchain em protocolos públicos e autorizados.

Aproveitando a pilha Web3 sem código do Zeeve, empresas, startups Blockchain, empresas de consultoria Blockchain e desenvolvedores Web3 podem implantar rapidamente nós de Blockchain e aplicativos descentralizados e gerenciá-los com monitoramento 24 horas por dia, 7 dias por semana, análises avançadas e alertas em tempo real. Para saber mais sobre o Zeeve, visite nosso Centro de Desenvolvedores ou junte-se a nós no Twitter e Telegram.


Artigo escrito por Sankalp Sharma. Traduzido por Marcelo Panegali.

Top comments (0)