Requerimentos de Infraestrutura

O presente documento, tem como objetivo detalhar os requisitos de infraestrutura necessários para a implementação e operação do sistema Hamsa Privacy dentro de um ambiente Kubernetes. Ele serve como um guia técnico para configuração dos componentes essenciais, garantindo que a arquitetura esteja alinhada com as melhores práticas de implantação, segurança e conectividade.

Introdução

A implementação do sistema exige um conjunto específico de requisitos de hardware, configurações de rede e integração entre bancos de dados. Além disso, o documento apresenta os procedimentos necessários para a instalação e testes de conectividade, assegurando que a comunicação entre os componentes ocorra sem interferências.

Este material destina-se a engenheiros de infraestrutura, DevOps e administradores de sistemas responsáveis pela implantação e manutenção da solução. A seguir, são abordados os principais pontos para garantir uma configuração eficiente e robusta:

Requisitos mínimos necessários da Hyperledger Besu.

VersaoGas Fee mínimoConsensoGas fee limitMínimo de nós na rede
23.10.10Máximo possível (0x1fffffffffffff)qbft4 nós (requisito para o consenso via qbft)

Node Pools e Requisitos de Hardware

Requisito de mínimo de instalação da solução em Kubernetes.

Arquitetura dos nósS.O.
amd64Linux (idealmente (redhat/ubi9-minimal:9.2-717))
Quantidade mínima de vCPUsQuantidade mínima de RAMQuantidade de Réplicas RecomendadaMáquina recomendadaLabels
8 vCPUs16Gb (recomendado 32Gb)2 (recomendado 4)Standard_D8s_v3purpose = "prover"
8 vCPUs16Gb2Standard_D8s_v3purpose = "other"

Favor se atentar quanto a criação das labels, elas são importantes, pois os scripts de instalação usam elas para saber em que node instalar cada parte da aplicação.

Criar namespaces com os seguintes nome (sugestão):

node1
node2 node3 node4 browser infra

📘

Importante - Todos os recursos devem estar disponíveis na mesma região, exemplo: us-east

Bancos de dados

Para garantir a integridade e a separação adequada dos dados, é necessário provisionar instâncias individuais dos bancos de dados conforme descrito abaixo.

📘

Importante: Cada banco de dados deve ter 4 instâncias individuais provisionadas.

Como estamos simulando um ambiente com 4 instituições — Banco Central, Selic e Instituição financeira A e Instituição financeira B —, cada uma dessas entidades precisará de sua própria instância de banco de dados, garantindo independência e segurança na comunicação.

Banco de dadosVersãoQuantidade instancias
MongoDB84
Postgres144

O acesso entre os bancos de dados e o cluster deve estar liberado para garantir a comunicação adequada entre os componentes. As instâncias podem ser instaladas dentro do mesmo cluster, desde que atendam aos requisitos de segurança e desempenho.

Requisitos de Rede

A seguir, estão listadas as portas que devem estar obrigatoriamente liberadas para garantir a comunicação adequada entre os nós Besu e o cluster Kubernetes:

PortaProtocoloTipo
30303TCP/UDPComunicação P2P e discovery entre nós
8545TCPAPI RPC HTTP (interação com contratos e transações).
8546TCPWebSocket para notificações
📘

Atenção: Certifique-se de que essas portas estejam abertas e configuradas corretamente para evitar falhas na comunicação da rede.

As imagens Docker utilizadas na instalação estarão disponíveis em um container registry dedicado. O acesso a esse repositório deve estar liberado para garantir que os componentes possam ser baixados e instalados corretamente.

Container Register:

hamsaprivacyacrdev.azurecr.io

Ferramentas necessárias para a instalação

Para a instalação e troubleshooting do ambiente Besu e do cluster Kubernetes, é essencial que a máquina ou VM utilizada tenha as seguintes ferramentas previamente instaladas:Azure CLI com acesso a Infra criada

  • Curl ou wget
  • Docker
  • Kubectl (compatível com a versão dos nós do cluster)
  • Helm (compatível com a kubernetes)
  • Helmfile
  • Node versão LTS
  • Editor de texto (recomendado VSCode)
  • Acesso ao Github

📘

**Atenção: **Certifique-se de que todos os binários necessários estejam corretamente instalados e acessíveis no PATH da máquina para evitar falhas durante a configuração e execução dos comandos.

Testes de conectividade

Para garantir que todos os componentes estão se comunicando corretamente, é fundamental realizar os seguintes testes de conectividade:


📘

Importante!

  • Os testes devem ser executados a partir de uma máquina que tenha acesso à infraestrutura provisionada.
  • Sempre que possível, os testes devem ser feitos de dentro do próprio cluster onde será instalado o Hamsa Privacy, garantindo uma validação mais próxima do ambiente real.

Utilize a imagem abaixo para rodar os testes diretamente dentro do cluster:

kubectl run debug-pod --rm -it --image=nicolaka/netshoot -- /bin/bash

Esta imagem contém todas as ferramentas de rede necessárias para efetuar os testes abaixo.

Teste de conectividade com a Besu:

curl -X POST \<http\://\<BESU\_NODE\_IP>>:\<PORT> \\\
-H "Content-Type: application/json" \\\
\--data '\{
"jsonrpc": "2.0",
"method": "eth\_getBlockByNumber",
"params": \["latest", true],
"id": 1
}'

Verificar se o retorno contém os dados do último bloco da rede.

Sugestão de teste usando Netcat e Telnet:

Postgres

nc -vz \<IP\_DO\_POSTGRES> 5432

Resultado

Connection to \<IP\_DO\_POSTGRES> 5432 port \[tcp/postgresql] succeeded!

MongoDB

telnet \<IP\_DO\_MONGO> 27017

Comportamento esperado: Se a conexão for estabelecida e imediatamente encerrada, significa que o MongoDB está acessível.

Informações Essenciais para a Instalação

Certifique-se de ter os seguintes dados configurados antes da instalação:

  • Connection String dos Bancos de dados Mongo e Postgres (url e dados de autenticação)
  • IP do nó da Besu
  • Chain ID configurado no arquivo genesis.json da Besu
  • Nome do namespace criado no Kubernetes, caso não tenha usado o nome sugerido neste documento
  • Nome das labels criadas, caso tenha usado outros nomes que não os sugeridos neste documento

Comandos úteis para troubleshooting

Kubernetes:

Defina um namespace padrão para evitar a necessidade de especificá-lo em cada comando:

kubectl config set-context --current --namespace=brldigital-t

Este comando facilita a execução de operações no Kubernetes, garantindo que todas as interações ocorram dentro do namespace correto.

Configuração dos Aliases

Para otimizar a execução de comandos no Kubernetes, recomendamos a criação dos seguintes aliases. Isso facilita o monitoramento e a administração do cluster, evitando a repetição de comandos longos.

Criar alias para comandos muito utilizados:

alias k="kubectl"`
alias klogs="kubectl logs -f"
alias kgp="kubectl get pods"
alias kdp="kubectl describe pod"

Com os alias criados, alguns comandos que vão ser bastante úteis:

klogs \<NOME\_DO\_POD>\
kdp \<NOME\_DO\_POD>

Carteiras

📘

Precisaremos de 3 carteiras (chave pública e privada) preferencialmente com saldo na Layer 1.