As imagens pode ficar a armazenadas em uma infra-estrutura interna, para um melhor controle e segurança do código de suas aplicações.
Utilizar registros públicos como o Docker Hub pode não ser uma boa opção. Mesmo quando se cria repositórios particulares, a segurança não é garantida.
Neste artigo irei ensinar como criar um private registry seguro e pronto para acessos criptografados com SSL/TLS, que pode ser utilizado para armazenar contêiners em geral, bem como integrar com o Red Hat OpenShift, a fim de fazer implementações desconectadas.
Pronto? Então vamos nessa!
Vamos precisar dos seguintes requisitos:
FQDN: registry.rhbrlabs.com
OS: RHEL8.6+
SELinux: Reforço
Firewalld: Habilitado
Registo: Podman
Ferramentas Apache
Volume: 100Gb montado sobre /dados
Criar os diretórios necessários:
[root@registry ~]# mkdir -p /data/registry/{auth,certs,data}
Gerar certificados para o private registry. Neste exemplo, estamos criando certificados que são válidos por 10 anos.
[root@registry ~]# openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout /data/registry/certs/registry.rhbrlabs.com.key -x509 -days 3650 -out /data/registry/certs/registry.rhbrlabs.com.crt \
-subj "/C=US/ST=NorthCarolina/L=Raleigh/O=Red Hat/OU=Engineering/CN=registry.rhbrlabs.com" \
-addext "subjectAltName = DNS:registry.rhbrlabs.com"
Copie o certificado gerado para o diretório de âncoras confiáveis, e execute update-ca-trust:
[root@registry ~]# cp /data/registry/certs/registry.rhbrlabs.com.crt /etc/pki/ca-trust/source/anchors/
[root@registry ~]# update-ca-trust
Gerar um arquivo de autenticação para o image registry:
[root@registry ~]# dnf -y install httpd-tools
[root@registry ~]# htpasswd -bBc /data/registry/auth/htpasswd registry redhat12345678
Gerar uma senha randômica para aumentar a confiabilidade:
[root@registry ~]# date | md5sum
10f207a4cbba51bf00755b5a50718966 -
Criar o container registry utilizando o docker.io/library/registry:2
[root@registry ~]# dnf -y install podman
[root@registry ~]# podman create --name ocp-registry --net host -p **5000:5000** \
-v /data/registry/data:/var/lib/registry:z -v /data/registry/auth:/auth:z \
-e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry" \
-e "REGISTRY_HTTP_SECRET=**10f207a4cbba51bf00755b5a50718966**" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd -v /data/registry/certs:/certs:z \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.rhbrlabs.com.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/registry.rhbrlabs.com.key docker.io/library/registry:2
O comando acima irá gerar mensagens como esta:
Trying to pull docker.io/library/registry:2...
Getting image source signatures\
Copying blob fd4a5435f342 done\
Copying blob 213ec9aee27d done\
Copying blob 4583459ba037 done\
Copying blob b136d5c19b1d done\
Copying blob 6f6a6c5733af done\
Copying config dcb3d42c17 done\
Writing manifest to image destination\
Storing signatures\
Port mappings have been discarded as one of the Host, Container, Pod, and None network modes are in use\
22633f37262a4ab2d64fc8beb44bb80618b11802974fb2f45d31d98db3cf14e8
Crie um arquivo UNIT para que o private registry inicie automaticamente o container registry durante o boot do sistema operacional.
[root@registry ~]# cat /etc/systemd/system/ocp-registry.service
[Unit]
Description=OCP Registry
[Service]
Restart=always ExecStart=/usr/bin/podman start -a ocp-registry ExecStop=/usr/bin/podman stop -t 10 ocp-registry
[Install]
WantedBy=network-online.target
Inicie o contêiner do private registry:
[root@registry ~]# systemctl daemon-reload
[root@registry ~]# systemctl enable --now ocp-registry.service
Permitir a porta TCP 5000 no Firewalld:
[root@registry ~]# firewall-cmd --permanent --add-port=5000/tcp\
[root@registry ~]# firewall-cmd --reload
Verificar se a autenticação e a criptografia SSL/TLS estão funcionando:
[root@registry ~]# curl -u 'registry:redhat12345678' https://registry.rhbrlabs.com:5000/v2/_catalog
{"repositories":[]}
Gerar um arquivo temporário com as informações de autenticação para as instalações desconectadas do OpenShift:
[root@registry ~]# cat <<EOF > ~/registry-secret.json
"registry.rhbrlabs.com:5000": {
"email": "[email protected]",
"auth": "$(echo -n 'registry:redhat12345678' | base64 -w0)"
}
EOF
Ah, se você quer instalar o Docker no Ubuntu 22.04, o processo é o mesmo. Basta usar o comando apt
ao invés de dnf
para instalar o software.
É isso aí. Agora seu novo Docker Registry privado está pronto e funcionando. Divirta-se!
Por favor apóie este conteúdo clicando em um banner de nossos anunciantes. ❤️