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. Quando
você adiciona acesso a um registro de contêiner com Code Engine para extrair imagens, você está criando um segredo de extração de imagem. Para obter mais informações sobre segredos de extração de imagens, consulte a documentação 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, use 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 de imagens seguras em IBM Cloud Container Registry, onde é possível armazenar e compartilhar imagens com segurança entre os usuários.
|
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.
|
Docker Hub público |
Use esse tipo de registro para extrair imagens públicas existentes do Docker Hub diretamente em seus aplicativos ou trabalhos Code Engine. Importante:
Com o Docker Hub público, você pode:
|
Tipos de segredos de registro
Para acessar imagens em um registro, o Code Engine usa um dos seguintes tipos de segredos de registro.
- Code Engine managed secret (segredo gerenciado)- Se o seu registro usa um namespace IBM Cloud Container Registry que está na sua conta, você pode permitir que Code Engine crie e gerencie o segredo do registro para você. No console, esse segredo
de registro criado automaticamente é chamado de
Code Engine managed secret
Na CLI, o nome de um segredo de registro criado automaticamente tem 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 listado 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 amostras de imagens em icr.io/codeengine
ou Docker Hub público, então você não precisa de um segredo de registro. Nesse caso, o segredo do registro
listado 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 uma descrição de 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 Gerenciamento de 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 o projeto estiver no status Ativo, clique no nome do projeto na página Code Engine Projects.
- 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.
- Forneça 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 o seu segredo foi criado no console, acesse a página Secrets and configmaps (Segredos e mapas de configuração) para visualizar uma lista de 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 da CLI 1.42.0, a definição e o trabalho com segredos na CLI são unificados no grupo de comandos 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 em Code Engine, consulte
Trabalho com segredos.
Para adicionar o acesso ao hub IBM Cloud Container Registry ou Docker com a CLI, use o comando secret create --format registry
comando. Esse comando requer um 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 comando ibmcloud ce secret create
comando.
Por exemplo, o comando a seguir cria acesso ao registro para uma instância 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 que são usadas com o comando secret create --format registry
neste exemplo. Para obter mais informações sobre o comando e suas opções, consulte o comando 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:TAG
ondeREGISTRY
eTAG
são opcionais. SeREGISTRY
não for especificado, o padrão serádocker.io
. SeTAG
não for especificado, não inclua o colon (:). O padrão paraTAG
élatest
.REGISTRY/NAMESPACEorDOCKERUSERorDOCKERORG/REPOSITORY@IMAGEID
ondeREGISTRY
é opcional. SeREGISTRY
não for especificado, o padrão édocker.io
eibm
como 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.
REGISTRY
devem 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.NAMESPACE
deve ter entre 4 e 30 caracteres e deve começar e terminar com uma letra ou número minúsante.NAMESPACE
pode conter caracteres alfanuméricos minúsculos, hífens (-), e sublinhados (_
).DOCKERUSERorDOCKERORG
pode 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.REPOSITORY
deve ter entre 2 e 255 caracteres e deve começar e terminar com uma letra ou número minúsante.REPOSITORY
pode conter caracteres alfanuméricos minúsculos, barras (/), períodos (.), hífens (-), e sublinhados (_
).TAG
deve ter entre 0 e 128 caracteres e pode conter letras minúsculas ou maiúsculas, números, períodos (.), hífens (-), e sublinhadores (_
). OTAG
nã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.