Cloud Run: a ferramenta certa para a tarefa
O Cloud Run é uma ótima opção para hospedar um aplicativo como esse no Google Cloud. O Cloud Run é uma plataforma de hospedagem de contêiner sem servidor, e seu preço é especialmente relevante neste caso, já que você só paga por cada solicitação atendida.
Nesse design, você seria cobrado apenas enquanto uma solicitação estivesse sendo atendida (ou seja, quando alguém estivesse recebendo uma imagem por pull), o que pode ser facilmente enquadrado na camada gratuita.
Quando você utiliza esse proxy com o Google Container Registry, não é feito o download das camadas de imagens reais (blobs) da API do registro (em vez disso, é gerado um link de download do Cloud Storage para o pull do tarball da camada). Uma vez que suas camadas, provavelmente com vários gigabytes, não passam por esse proxy, é fácil manter o controle dos custos no Cloud Run.
No entanto, quando isso é utilizado com o Artifact Registry, uma vez que os blobs de camadas da imagem são disponibilizados por meio desse proxy, o custo será mais alto devido às taxas de rede de saída para disponibilizar os blobs maiores e ao “tempo faturável" mais longo no Cloud Run, como resultado do uso do proxy para as respostas maiores durante uma solicitação.
Como criar um proxy reverso para o registro
Para realizar essa tarefa, criei um proxy reverso simples utilizando a linguagem de programação Go em cerca de 200 linhas de código. Esse proxy usa o httputil.ReverseProxy e adiciona um tratamento especial à negociação de credenciais para disponibilizar as imagens públicas (e as imagens privadas publicamente, se necessário).
O código de exemplo e as instruções de implantação podem ser encontrados em meu repositório, github.com/ahmetb/serverless-registry-proxy. Para implantar esse proxy no projeto a fim de disponibilizar imagens públicas em um domínio personalizado, consulte o repositório para ter instruções passo a passo. Resumidamente, você precisa:
- Incorporar o aplicativo de proxy reverso de seu código-fonte para uma imagem de contêiner e executar o push dela para o registro.
- Criar um registro do Docker no Google Container Registry ou Artifact Registry e torná-lo publicamente acessível para permitir a disponibilização de imagens sem credenciais.
- Implantar o proxy reverso como um serviço publicamente acessível do Cloud Run, especificando para qual registro ele deve enviar as solicitações por proxy.
- Mapear o nome de domínio para esse serviço do Cloud Run no Console do Cloud.
- O Cloud Run prepara e configura um certificado SSL para o domínio personalizado.
- Após o final da propagação dos registros do DNS, está tudo pronto. Os usuários agora podem executar docker pull
<YOUR-DOMAIN>/<IMAGE>:<TAG>
para fazer o download de imagens do domínio personalizado.
Conclusão
Você pode estender a ideia de criar “proxies de middleware" à frente do registro do contêiner e hospedá-los de forma mais econômica em uma plataforma sem servidor, como o Cloud Run, com custos mínimos.
Por exemplo, você pode criar um proxy de registro que disponibilize apenas determinadas imagens ou tags. Da mesma forma, pode criar sua própria camada de autenticação por cima de um registro existente. Como a API do registro é padrão, meu código de exemplo funciona também para outros registros de contêiner, como o Docker Hub. Assim, é possível hospedar um proxy sem servidor no Cloud Run que disponibiliza imagens do Docker Hub ou de qualquer outro registro.
Sinta-se à vontade para examinar o código-fonte e mexer no projeto para estendê-lo de acordo com suas necessidades. Espero que este exemplo de projeto de código aberto também possa ajudar você a disponibilizar um registro de contêiner em um domínio personalizado.
Nenhum comentário :
Postar um comentário