Subindo o Bitnami Harbor em um cluster Kubernetes local.
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
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
Observe que alguns pods não conseguem incializar, vamos verificar o PVC (Persistent Volume Claim):
bash# 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
Agora vamos verificar novament o PVC e os 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
Ó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”.
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.
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.
- 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.
- 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.
Depois do terceiro passo, você deve ter essa estrutura de arquivos.
Agora vamos tentar nos logar de novo, agora apontando para core.harbor.domain.
bash# 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-worldThe push refers to repository [core.harbor.domain/handson/hello-world]f22b99068db9: Pushedlatest: digest: sha256:1b26826f602946860c279fce658f31050cff2c596583af237d971f4629b57792 size: 525
É isso, espero que ajude!