Acessando registros de contêiner
As imagens que são usadas pelo IBM Cloud® Code Engine são normalmente armazenadas em um registro que pode ser acessível pelo público (registro público) ou configurado com acesso limitado para um pequeno grupo de usuários (registro privado).
Um registro de contêiner, ou registro, é um serviço que armazena imagens de contêiner. Por exemplo, IBM Cloud Container Registry e Docker Hub são registros de contêineres. Um Container Registry pode ser público ou privado. Um Container Registry que é público não requer credenciais para acesso. Em contraste, o acesso a um registro privado requer credenciais.
O Code Engine requer acesso aos registros de contêineres para concluir as ações a seguir:
- Para recuperar (ou "extrair") uma imagem de contêiner para executar um app ou tarefa
- Para armazenar uma imagem de contêiner recém-criada como uma saída de uma construção de imagem
- Para armazenar e recuperar arquivos locais quando uma construção é executada por meio de origem local
O Code Engine manipula muitos dos detalhes subjacentes das interações entre o sistema e o seu registro.
Para extrair as imagens de um registro, o Code Engine usa um tipo especial de segredo do Kubernetes chamado de imagePullSecret. Esse segredo de extração de imagem armazena as credenciais para acessar um registro de contêiner. Ao adicionar
acesso a um registro de contêineres com o comando Code Engine para baixar imagens, você está criando um segredo de download de imagens. Para obter mais informações sobre segredos de download de imagens, consulte a documentação em Kubernetes.
Tipos de registros de imagem
As imagens geralmente são armazenadas em um registro que pode ser acessado pelo público (registro público) ou configurado com acesso limitado para um pequeno grupo de usuários (registro privado).
Os registros públicos, como o Docker Hub público, podem ser usados para começar com o Docker e o Code Engine para criar seu primeiro aplicativo ou sua primeira tarefa. Mas, quando se trata de cargas de trabalho corporativas, use um registro privado, como o fornecido no IBM Cloud Container Registry para proteger suas imagens de serem usadas por usuários não autorizados. Para registros privados, utilize segredos de registro para garantir que as credenciais estejam disponíveis para obter acesso ao registro privado.
| Registro | Descrição |
|---|---|
| IBM Cloud Container Registry | Com esse tipo de registro, você pode configurar seu próprio repositório seguro de imagens em IBM Cloud Container Registry, onde é possível armazenar e compartilhar imagens entre usuários com segurança. Com o IBM Cloud Container Registry, é possível -Gerenciar o acesso a imagens em sua conta. -Usar imagens e apps de amostra fornecidos pela IBM, como o IBM Liberty, como uma imagem base e incluir seu próprio código do app nele. |
| Qualquer outro registro privado | Conecte qualquer registro privado existente ao Code Engine incluindo acesso. A inclusão de acesso de forma segura salva a URL e as credenciais de seu registro em um segredo do Kubernetes. Com registros privados, é possível: -Utilizar registros privados existentes independentes de sua origem (Docker Hub, registros de propriedade da organização ou outros registros privados de nuvem). |
| Docker Hub público |
Use esse tipo de registro para obter imagens públicas existentes do Docker Hub diretamente em seus aplicativos ou tarefas do Code Engine. Importante:
Com o Hub de Docker público, você pode:
|
Tipos de segredos de registro
Para acessar imagens em um registro, o Code Engine utiliza um dos seguintes tipos de segredos de registro.
- Code Engine segredo gerenciado — Se o seu registro usar um namespace IBM Cloud Container Registry que esteja na sua conta, você poderá permitir que o Code Engine crie e gerencie o segredo do registro para você. No console, esse segredo de
registro criado automaticamente é chamado de
Code Engine managed secretNa CLI, o nome de um segredo de registro criado automaticamente segue o formatoce-auto-icr-private-<region>. - Segredo gerenciado pelo usuário - Este é um segredo que você cria e gerencia. É possível acessar imagens da sua conta com uma chave de API ou utilizar um token de acesso para o registro de contêiner de sua escolha; por exemplo, o Docker Hub. Nesse caso, o segredo do Registro exibido no console é o nome do seu segredo do Registro.
Se o seu registro for público e não exigir credenciais — por exemplo, Code Engine, as imagens de exemplo em icr.io/codeengine ou o Hub público em Docker —, você não precisará de um segredo de registro. Nesse caso, a chave do Registro
exibida no console é None.
Acessando imagens de uma conta pública
Se sua imagem estiver armazenada em um repositório público, como um Docker Hub público, será possível simplesmente referenciar a imagem diretamente ao implementar seu aplicativo ou executar sua tarefa. Observe que, embora o armazenamento de imagens em um registro público seja bom para começar com aplicativos e tarefas, armazene suas imagens corporativas em um registro privado.
Acessando imagens em sua própria conta por meio do console
Se você está acessando o Code Engine por meio de uma conta que você possui ou administra, então o Code Engine pode automaticamente enviar por push e extrair imagens de um namespace do IBM Cloud Container Registry em sua conta quando você criar ou atualizar apps, tarefas ou construções no console. O Code Engine pode até mesmo criar um espaço de nomes para você quando você enviar por push uma imagem. Para obter mais informações,consulte os tópicos a seguir.
Acessando imagens da sua conta com uma chave de API
Se você estiver acessando o Code Engine com a CLI, deverá primeiro criar uma chave de API do IAM e, em seguida, salvar a chave de API do IAM como acesso de registro em Code Engine.
As etapas a seguir criam uma chave de API que armazena as credenciais de um ID do usuário. Em vez de usar um ID do usuário, você pode desejar criar uma chave de API para um ID de serviço que tenha uma política de acesso de serviço do IBM Cloud IAM para o IBM Cloud Container Registry. Se você escolher autenticar um ID do usuário, certifique-se de que o usuário seja um ID funcional ou um plano para casos nos quais o usuário sai para que o Code Engine ainda possa acessar o registro.
Criando uma chave de API por meio do console
Para criar uma chave de API do IBM Cloud IAM por meio do console,
-
Ativar Visão geral do acesso (IAM).
-
Selecione ** Chaves API **.
-
Clique em Criar uma chave de API do IBM Cloud.
-
Insira um nome e uma descrição opcional para a sua chave de API e clique em Criar.
-
Copie a chave de API ou clique em download para salvá-la.
Você não poderá ver esta chave de API novamente. Portanto, certifique-se de gravá-la em um lugar seguro.
Agora que você criou sua chave de API, salve-a como acesso de registro.
Criando uma chave de API com a CLI
Para criar uma chave de API do IBM Cloud IAM com a CLI, execute o comando iam api-key-create. Por exemplo, para criar uma chave
de API chamada cliapikey com a descrição My CLI API key e salvá-la em um arquivo chamado key_file, execute o seguinte comando:
ibmcloud iam api-key-create cliapikey -d "My CLI API key" --file key_file
Se você optar por não salvar sua chave em um arquivo, deverá registrar a chave de API que é exibida ao criá-la. Não será possível recuperá-la mais tarde.
Agora que você criou sua chave de API, salve-a como acesso de registro.
Acessando imagens em uma conta diferente
É possível designar as políticas de acesso do IBM Cloud IAM aos usuários ou um ID de serviço para restringir permissões a namespaces ou ações de imagem de registro específicos (como push ou extração). Em seguida, crie uma chave de API e armazene essas credenciais de registro no Code Engine.
Por exemplo, para acessar imagens em outras contas da IBM Cloud, crie uma chave de API que armazene as credenciais do IBM Cloud Container Registry de um ID do usuário ou de serviço nessa conta. Em seguida, em Code Engine, use essa chave para criar acesso em sua conta.
Acessando imagens em uma conta privada do Docker Hub
Para acessar imagens em uma conta privada do Docker Hub, crie acesso de registro, fornecendo sua senha ou um token de acesso. Ao usar um token de acesso, é possível conceder e revogar o acesso à sua conta do Docker Hub mais facilmente, sem a necessidade de mudança de senha. Para obter mais informações sobre tokens de acesso e o Docker Hub, consulte Criar e gerenciar tokens de acesso.
Após decidir se deve usar sua senha diretamente ou criar um token de acesso, crie seu acesso de registro.
Incluir acesso de registro no Code Engine
Para configurar o acesso a um IBM Cloud Container Registry em uma conta diferente da IBM Cloud, para extrair imagens de uma conta privada do Docker Hub ou para extrair ou enviar por push imagens usando a CLI do Code Engine, é possível usar a chave de API IBM ou a senha do Docker Hub ou o token de acesso para criar acesso de registro por meio do Code Engine para armazenar sua chave de autenticação ou o token para você.
Incluindo acesso de registro por meio do console
Antes de iniciar, crie um projeto.
- Depois que seu projeto estiver no status “Ativo”, clique no nome do seu projeto na página “Projetos” do Code Engine.
- Na página Componentes, clique em Segredos e configmaps.
- Na página Segredos e configmaps, clique em Criar para criar seu segredo.
- Na página Criar segredo ou configmap, conclua as etapas a seguir:
- Selecione Segredo de registro e clique em Avançar.
- Insira um nome; por exemplo,
mysecret-registry. - Especifique o registro de destino para esse segredo, como IBM Cloud Container Registry ou Docker Hub.
- Especifique o local do registro
- Especifique um nome do usuário. Se esse segredo for para IBM Cloud Container Registry, o nome do usuário será
iamapikey. Se esse segredo for para o Docker Hub, ele será seu ID Docker. - Insira as credenciais para o nome do usuário Para IBM Cloud Container Registry, use sua chave de API do IAM. Para o Docker Hub, é possível usar a senha do Docker Hub ou um token de acesso. Para outros registros de destino, especifique a senha ou a chave de API para o nome do usuário
- Clique em Criar para criar o segredo.
Agora que seu segredo foi criado pelo console, acesse a página “Segredos e mapas de configuração” para visualizar uma lista dos segredos e mapas de configuração definidos. É possível aplicar filtros para customizar a lista para atender às suas necessidades
É possível incluir acesso em um registro de contêiner ao criar um aplicativo ou uma tarefa ou ao construir uma imagem. Clique em Configurar imagem e especifique a imagem do contêiner a ser executada, incluindo o registro onde a imagem é armazenada e o acesso de registro a usar para recuperar a imagem.
Incluindo acesso de registro com a CLI
A partir da versão 1.42.0 da CLI, a definição e o trabalho com segredos na CLI foram unificados no secret grupo de comandos. Consulte os comandos ibmcloud ce secret Use a opção --format para especificar a categoria do segredo, como basic_auth, generic, hmac, ssh, tls, ou registry. Embora você possa continuar a
usar o registry grupo de comando, aproveite as vantagens do grupo de comando unificado secret grupo de comando unificado. Para criar um segredo para acessar um registro de contêiner,
use o comando ibmcloud ce secret create --format registry comando. Para saber mais sobre como trabalhar com segredos no Code Engine, consulte
“Trabalhando com segredos ”.
Para adicionar acesso ao Hub IBM Cloud Container Registry ou Docker por meio da CLI, use o secret create --format registry comando. Este comando requer o nome do segredo do registro, o endereço URL do servidor
de registro e as informações de nome de usuário e senha para acessar o servidor de registro, além de permitir outros argumentos opcionais. Para obter uma lista completa das opções, consulte o ibmcloud ce secret create comando.
Por exemplo, o comando a seguir cria um acesso no Registro para uma instância do IBM Cloud Container Registry chamada myregistry, que está no servidor de Registro us.icr.io:
ibmcloud ce secret create --format registry --name myregistry --server us.icr.io --username iamapikey --password API_KEY
Saída de exemplo
Creating registry secret 'myregistry'...
OK
A tabela a seguir resume as opções utilizadas com o secret create --format registry comando neste exemplo. Para obter mais informações sobre o comando e suas opções, consulte o ibmcloud ce secret create comando.
| Opção | Descrição |
|---|---|
--name |
O nome do segredo de registro. Use um nome que seja exclusivo dentro do projeto. Esse valor é necessário.
|
--server |
Insira a URL do servidor de registro. Para Container Registry, o nome do servidor é <region>.icr.io. Por exemplo, us.icr.io. Para o Docker Hub, o valor é https://index.docker.io/v1/. |
--username |
Insira o nome do usuário para acessar o servidor de registro. Para o Container Registry, ele é iamapikey. Para o Docker Hub, ele é o seu ID do Docker. |
--password |
Insira a senha do . Para o Container Registry, a senha é a sua chave de API. Para o Docker Hub, é possível usar a senha do Docker Hub ou um token de acesso. |
Controlando o acesso às cargas de trabalho do Container Registry para Code Engine
Suponha que você deseja controlar o acesso ao IBM Cloud Container Registry quando Code Engine extrai imagens. Por exemplo, você deseja controlar o acesso ao Container Registry para endereços IP específicos Considere as seguintes abordagens.
-
Use uma restrição baseada em contextos Ao usar uma restrição baseada em contexto, se os endereços IP para seu projeto do Code Engine mudarem, não será necessário mudar seu acesso. É possível restringir o acesso ao Container Registry para uma zona de rede, em que sua zona de rede inclui Code Engine e qualquer coisa que requer acesso ao registro.
-
Desative o acesso público ao IBM Cloud Container Registry e certifique-se de que o Code Engine use os terminais privados em vez dos terminais públicos. Consulte Protegendo sua conexão com o Container Registry.
-
Para controlar o acesso por um intervalo de IP específico, use um terminal de API para buscar os endereços IP para seu projeto específico do Code Engine. É importante observar que esses endereços IP estão sujeitos a mudanças e deve-se tomar as etapas apropriadas quando isso ocorrer Consulte Endereços IP públicos e privados do Code Engine e Como posso incluir meu app Code Engine em uma lista de permissões?
Considerações sobre imagens em seu cadastro
O nome de sua imagem que é usado para o seu app ou job deve estar em um dos formatos a seguir.
REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY:TAGondeREGISTRYeTAGsão opcionais. SeREGISTRYnão for especificado, o padrão serádocker.io. SeTAGnão for especificado, não inclua o colon (:). O padrão paraTAGélatest.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEIDondeREGISTRYé opcional. SeREGISTRYnão for especificado, o padrão édocker.ioeibmcomo a organização Docker.
| Componente | Caracteres permitidos | Length | Regras adicionais |
|---|---|---|---|
REGISTRY |
a-zA-Z0-9 -_. --__ |
1-253 | (0-127Periods)(label:1-63,noDashOnEnd) |
NAMESPACE |
a-z 0-9 -_ --__ |
4-30 | (start/end with letterOrNumber) |
DOCKERUSERorDOCKERORG |
a-z 0-9 |
4-30 | |
REPOSITORY |
a-z 0-9 -_. / |
2-255 | (start/end with letterOrNumber) |
TAG |
a-zA-Z0-9 -_. --__.. |
0-128 | (NOT start with periodOrDash) |
IMAGEID |
a-z 0-9 : |
(startwith sha256: noOtherColon) |
As partes do nome da imagem devem atender aos seguintes critérios.
REGISTRYdevem ter 253 caracteres ou menos e podem conter letras minúsculas ou maiúsculas, números, períodos (.), hífens (-), e sublinhas (_). Não use um traço (.) como o último caractere. Não use mais de 127 períodos (.) e os rótulos entre eles podem ter entre 1 e 63 caracteres de comprimento.NAMESPACEdeve ter entre 4 e 30 caracteres e deve começar e terminar com uma letra ou número minúsante.NAMESPACEpode conter caracteres alfanuméricos minúsculos, hífens (-), e sublinhados (_).DOCKERUSERorDOCKERORGpode ser usado para registros Docker em vez deNAMESPACE. Especifique o seu nome de usuário Docker ou organização Docker. Seu nome de usuário e organização do Docker deve ter entre 4 e 30 caracteres e contém apenas caracteres alfanuméricos minúsculos ou números.REPOSITORYdeve ter entre 2 e 255 caracteres e deve começar e terminar com uma letra ou número minúsante.REPOSITORYpode conter caracteres alfanuméricos minúsculos, barras (/), períodos (.), hífens (-), e sublinhados (_).TAGdeve ter entre 0 e 128 caracteres e pode conter letras minúsculas ou maiúsculas, números, períodos (.), hífens (-), e sublinhadores (_). OTAGnão deve começar com um período ou traço. Se você não incluir umTAG, não inclua o colão também.IMAGEIDé prefixado comsha256:e pode conter letras minúsculas e números.