Subindo o Bitnami Harbor em um cluster Kubernetes local.

Matheus Villela Torres
4 min readMar 21, 2021

--

Logo do Bitnami Harbor.

Introdução

Por anos tenho usado o Bitnami para imagens de container e VMs para implantar apps para fins de estudo, porque eles realmente fazem um ótimo trabalho simplificando o seu uso, mas este foi um caso atípico. Por esse motivo, decidi escrever um guia de instalação passo a passo.

Bitnami Harbor:

Informação do Sistema:

  • 8 GB RAM
  • I5 CPU
  • 100 GB de disco
  • Ubuntu 20.10

Pré-requisitos

  • Snap
  • Kubernetes Cluster (microk8s, minikube, K3s) — Neste guia estou usando o microk8s.
  • Kubedns (microk8s enable dns)
  • Helm

Os processos de instalação dos programas acima são bem fáceis, é só seguir a documentação que não tem erro.

Verificalção do Kubernetes

Espere pela inicialização do microk8s. É possível verirficar o status usando o comando abaixo.

bash# microk8s status
Saída do comando microk8s status.

Agora que verificamos que o microk8s está rodando, vamos verificar se existe algum pod no namespace default. Você deve ter a saída “No resources found in default namespace.”

bash# kubectl get pods

Configuração do Bitnami Harbor

Depois de instalar o helm, e usuá-lo para instalar o Harbor, verifique novamente os pods.

bash# helm install my-release bitnami/harborbash# kubectl get pods
Saída do comando kubectl get pods.

Observe que alguns pods não conseguem incializar, vamos verificar o PVC (Persistent Volume Claim):

bash# kubectl get pvc
Saída do kubectl get pvc.

Este é o problema, não existe nenhum PV (Persistent Volume) para ser requisitado pelo PVC. Então vamos criá-los.

bash# kubectl apply -f pv.yaml
Arquivo pv.yaml.

Agora vamos verificar novament o PVC e os pods.

Saída do comando kubectl get pvc.
Saída do comando kubectl get pods.

Tudo pronto, agora veja que os PVCs estão ligados aos PVs criados e todos os pods estão rodando.

IP de acesso e configuração inicial

Para acessar a interface do Harbor, você tem que achar o IP do serviço do LB (Load Balancer), para tal, é só dar o seguinte comando.

bash# kubectl get svc
Saída do comando kubectl get svc.

Ótimo! Agora que temos o IP, é só navegar. Eu não vou mostrar como pegar a senha de admin porque já está bem documentado pelo Bitinami.

Agora vamos criar um projeto “handson” e um usuário “matheus”.

Projeto de nome handson e usuário matheus.

Vamos tentar nos logar, usando o comando abaixo.

bash# docker login 10.152.183.168

Oh não! Um erro ocorreu. Essa é a parte que demorei para resolver.

Saída do comando docker login 10.152.183.168.

Este erro é por causa que o certificado não está configurado para IP (precisa ser CN = CN=*.example.com) E o certificado não é valido. Para resolver esses problemas nós temos que seguir os seguintes passos:

1º — Faça o Download do certificado pelo navegador.

Screenshot da aba Details do Certificate Viewer do Chrome.
  • 2º — Edite o arquivo /etc/hosts, incluindo a linha 10.152.183.168 core.harbor.domain (para resolver o nome para um IP — de sua máquina local somente). Eu preciso fazer isso porque não tenho um domínio nem um servidor DNS.
Arquivo /etc/hosts.
  • 3º— Agora, sob /etc/docker, crie um novo diretório chamado certs.d, e dentro dele, crie um outro diretório chamado core.harbor.domain. Dentro de core.harbor.domain copie o ca.crt do certificado raíz do registry.
Screenshot do System Setting no Harbor. O ca.cert pode ser baixado no link Download (Registry root Certificate).

Depois do terceiro passo, você deve ter essa estrutura de arquivos.

Estrutura do diretório /etc/docker.

Agora vamos tentar nos logar de novo, agora apontando para core.harbor.domain.

bash# docker login core.harbor.domain
Saída do comando docker login core.harbor.domain.

Voilá! Agora é possível dar push para o registry do Harbor, vamos tentar dar um push da imagem hello-world para o projeto “handson” criado antes.

# docker tag hello-world core.harbor.domain/handson/hello-world
# docker push core.harbor.domain/handson/hello-world
The push refers to repository [core.harbor.domain/handson/hello-world]f22b99068db9: Pushedlatest: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
Imagem enviada ao projeto “handson”.

É isso, espero que ajude!

--

--

Matheus Villela Torres
Matheus Villela Torres

Written by Matheus Villela Torres

Data scientist and devops enthusiast.

No responses yet