Configurando um registro de imagem
Planeje e configure um registro de imagem para que os desenvolvedores possam criar contêineres de app no IBM Cloud® Kubernetes Service usando imagens do Docker.
Planejando 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 Docker Hub, podem ser usados na introdução ao Docker e Kubernetes para criar seu primeiro app conteinerizado em um cluster. Mas quando se trata de aplicativos corporativos, use um registro privado como aquele fornecido no IBM Cloud Container Registry para proteger suas imagens de serem usadas e mudadas por usuários não autorizados. Os registros privados devem ser configurados pelo administrador de cluster para assegurar que as credenciais para acessar o registro privado estejam disponíveis para os usuários do cluster.
É possível usar múltiplos registros com o IBM Cloud Kubernetes Service para implementar apps em seu cluster.
| Registro | Descrição | Benefício |
|---|---|---|
| IBM Cloud Container Registry | Com essa opção, é possível configurar o seu próprio repositório de imagem do Docker seguro no IBM Cloud Container Registry no qual é possível armazenar e compartilhar as imagens com segurança entre usuários do cluster. |
|
| Qualquer outro registro privado | Conecte qualquer registro privado existente ao cluster criando um segredo de extração de imagem. O segredo é usado para salvar com segurança sua URL de registro e credenciais em um segredo do Kubernetes. | Use os registros privados existentes independentemente de sua origem (Docker Hub, registros pertencentes à organização ou outros registros de Nuvem privada). |
| Docker Hub público | Use esta opção para usar imagens públicas existentes do Docker Hub diretamente na Implementação do Kubernetes quando não forem necessárias mudanças no Dockerfile. Nota: lembre-se de que essa opção poderá não atender aos requisitos de segurança de sua organização, como gerenciamento de acesso, varredura de vulnerabilidade ou privacidade de app. |
Nenhuma configuração adicional é necessária para o cluster.
|
Depois de configurar um registro de imagens, os usuários do cluster poderão usá-las para implementar apps no cluster.
Saiba mais sobre como proteger suas informações pessoais quando trabalhar com imagens de contêiner.
Entendendo como autorizar seu cluster a extrair imagens de um registro privado
Para fazer pull de imagens de um registro, seu cluster do IBM Cloud Kubernetes Service usa um tipo especial de segredo do Kubernetes, um imagePullSecret. Esse segredo de extração de imagem armazena as credenciais para acessar um
registro de contêiner.
O registro do contêiner pode ser:
- Um namespace privado em seu próprio IBM Cloud Container Registry.
- Um namespace privado em IBM Cloud Container Registry que pertence a uma conta do IBM Cloud diferente.
- Qualquer outro registro privado como Docker.
No entanto, por padrão, o seu cluster é configurado para fazer pull de imagens apenas dos namespaces de sua conta no IBM Cloud Container Registry e implementar contêineres dessas imagens para o namespace do Kubernetes default em
seu cluster. Se for necessário fazer pull de imagens em outros namespaces do cluster ou de outros registros de contêineres, então você deverá configurar os seus próprios segredos de extração de imagem.
Configuração do segredo de extração de imagem padrão
Geralmente, o seu cluster do IBM Cloud Kubernetes Service é configurado para fazer pull de imagens de todos os domínios icr.io do IBM Cloud Container Registry apenas do namespace do Kubernetes default. Consulte as
perguntas frequentes a seguir para saber mais sobre como baixar imagens em outros namespaces ou contas do Kubernetes, restringir o acesso ao download de imagens ou entender por que seu cluster pode não ter os segredos padrão para download
de imagens.
- Como meu cluster está configurado para baixar imagens do namespace
defaultKubernetes? - Ao criar um cluster, o cluster tem um ID de serviço do IBM Cloud IAM que é fornecido uma política de função de acesso de serviço do IAM Leitor para IBM Cloud Container Registry. As credenciais do ID de serviço são personificadas
em uma chave de API não expirada que é armazenada em segredos de extração de imagem em seu cluster. Os segredos de extração de imagem são incluídos no namespace
defaultdo Kubernetes e a lista de segredos na conta do serviçodefaultpara esse namespace do Kubernetes. Usando segredos de extração de imagem, suas implementações podem extrair imagens (acesso somente leitura) do IBM Cloud Container Registry global e regional para implementar contêineres no namespace do Kubernetesdefault.
- O registro global armazena de forma segura imagens públicas que são fornecidas pela IBM. É possível referir-se a essas imagens públicas em suas implementações em vez de ter referências diferentes para imagens que são armazenadas em cada registro regional.
- O registro regional armazena com segurança suas próprias imagens privadas do Docker.
- E se eu não tiver segredos para baixar imagens no namespace
defaultKubernetes? - É possível verificar os segredos de extração de imagem efetuando login no seu cluster e executando
kubectl get secrets -n default | grep "icr-io". Caso nenhum segredoicrseja listado, a pessoa que criou o cluster talvez não tenha as permissões necessárias para o IBM Cloud Container Registry no IAM. Consulte Atualizando os clusters existentes para usar o segredo de extração de imagem da chave de API. - Posso restringir o acesso de pull a um determinado registro regional?
- Sim, é possível editar a política do IAM do ID de serviço existente que restringe a função de acesso ao serviço Leitor a esse registro regional ou a um recurso de registro como um namespace. Antes de poder customizar as políticas de registro do IAM, deve-se ativar as políticas do IBM Cloud IAM para o IBM Cloud Container Registry.
Deseja tornar suas credenciais de registro ainda mais seguras Solicite que o administrador de seu cluster ative um provedor do Key Management Service em seu cluster para criptografar segredos do Kubernetes, como o segredo de extração de imagem que armazena suas credenciais de registro.
- Posso fazer o pull de imagens em um namespace do Kubernetes que não seja o
default? - Não por padrão. Usando a configuração do cluster padrão, é possível implementar contêineres de qualquer imagem que esteja armazenada em seu namespace do IBM Cloud Container Registry no namespace
defaultdo Kubernetes de seu cluster. Para usar essas imagens em qualquer outro namespaces do Kubernetes ou em outras contas do IBM Cloud, você tem a opção de copiar ou criar os seus próprios segredos de extração de imagem. - Posso importar imagens de uma conta diferente do IBM Cloud?
- Sim, crie uma chave de API na conta do IBM Cloud que deseja usar. Em seguida, em cada namespace de cada cluster que você deseja realizar pull de imagens da conta do IBM Cloud, crie um segredo que mantém a chave de API. Para obter mais informações, siga este exemplo que usa uma chave de API de ID de serviço autorizada.
Para usar um registro que não é do IBM Cloud, como o Docker, consulte Acessando imagens armazenadas em outros registros privados.
- A chave da API precisa ser associada a um ID de serviço? O que acontece se eu atingir o limite de IDs de serviço da minha conta?
- A configuração de cluster padrão cria um ID de serviço para armazenar as credenciais de chave de API do IBM Cloud IAM no segredo de extração de imagem. No entanto, também é possível criar uma chave de API para um usuário individual e armazenar
essas credenciais em um segredo de extração de imagem. Se você atingir o Limite do IAM para IDs de serviço, o cluster será criado sem o ID de serviço e o segredo de extração de
imagem e não conseguirá extrair imagens dos domínios de registro
icr.iopor padrão. Deve-se criar seu próprio segredo de pull de imagem. No entanto, isso deve ser feito por meio de uma chave de API para um usuário individual, como um ID funcional, não por meio de um ID de serviço do IBM Cloud IAM. - Vejo os segredos de obtenção de imagens para os domínios do registro regional e para todos os domínios do registro. Qual deles devo usar?
- Anteriormente, o IBM Cloud Kubernetes Service criava segredos de extração de imagem separados para cada domínio de registro
icr.ioregional público. Agora, todos os domínios de registroicr.iopúblicos e privados para todas as regiões são armazenados em um único segredo de extração de imagemall-icr-ioque é criado automaticamente no namespace do Kubernetesdefaultde seu cluster.
Para cargas de trabalho em outros namespaces do Kubernetes no cluster para extrair imagens de contêiner de um registro privado, agora é possível copiar somente o segredo de extração de imagem all-icr-io para esse namespace do
Kubernetes. Em seguida, especifique o segredo all-icr-io em sua conta de serviço ou implementação. Não é preciso copiar o segredo de extração de imagem que corresponde ao registro regional da imagem. Além disso, lembre-se de
que não é preciso ter segredos de extração de imagem para registros públicos, que não requerem autenticação.
- Depois de copiar ou criar um segredo de pull de imagem em outro namespace do Kubernetes, já está tudo pronto?
- Não totalmente. Seus contêineres devem estar autorizados a extrair imagens usando o segredo que você criou. É possível incluir o segredo de extração de imagem na conta de serviço do namespace ou referir-se ao segredo em cada implementação. Para obter instruções, consulte Usando o segredo de extração de imagem para implementar contêineres.
Conexão de rede privada com registros icr.io
Ao configurar a sua conta do IBM Cloud para usar terminais de serviço, é possível usar uma conexão de rede privada para enviar por push e fazer pull de imagens do IBM Cloud Container Registry.
O que preciso fazer para configurar meu cluster para usar a conexão privada com os registros d icr.io ?
- Ative uma Virtual Router Function (VRF) para sua conta de infraestrutura da IBM Cloud para poder usar o terminal em serviço de nuvem privada do IBM Cloud Container
Registry. Para ativar o VRF, consulte Ativando o VRF. Para verificar se um VRF já está ativado, use o comando
ibmcloud account show. - Ative sua conta do IBM Cloud para usar os terminais em serviço.
IBM Cloud Container Registry utiliza automaticamente o endpoint do serviço de nuvem privada. Não é preciso ativar o terminal em serviço de nuvem privada para clusters IBM Cloud Kubernetes Service.
Atualizando os clusters existentes para usar o segredo de extração de imagem da chave de API
Novos clusters do IBM Cloud Kubernetes Service armazenam uma chave de API em segredos de extração de imagem para autorizar o acesso ao IBM Cloud Container Registry. Com esses segredos de extração de imagem,
é possível implementar contêineres de imagens que são armazenados nos domínios de registro icr.io. Será possível incluir os segredos de extração de imagem em seu cluster se ele não tiver sido criado com os segredos. Para clusters
que foram criados antes de 25 de fevereiro de 2019, deve-se atualizar o cluster para armazenar uma chave de API em vez de um token de registro no segredo de extração de imagem.
Antes de Iniciar
-
Certifique-se de que tenha as permissões a seguir: função de acesso à plataforma de Operador ou Administrador do IBM Cloud IAM para IBM Cloud Kubernetes Service. O proprietário da conta pode conceder-lhe a função executando o comando a seguir.
ibmcloud iam user-policy-create EMAIL --service-name containers-kubernetes --roles "Administrator,Operator" -
Função de acesso à plataforma Administrador do IBM Cloud IAM para o IBM Cloud Container Registry, em todas as regiões e grupos de recursos. A política não pode ter o escopo definido para uma determinada região ou grupo de recursos. O proprietário da conta pode conceder-lhe a função executando o comando a seguir.
Verifique se o segredo foi criado com sucesso
ibmcloud iam user-policy-create YOUR_USER_EMAIL --service-name container-registry --roles Administrator -
Se a sua conta restringir a criação de ID de serviço, inclua a função Criador de ID de serviço em Identity and Access Management no console (
iam-identityna API ou CLI). -
Se a sua conta restringir a criação de chave de API, inclua a função Criador de chave de API do usuário em Identity and Access Management no console (
iam-identityna API ou CLI).
Atualizando seu segredo de extração de imagem
Para atualizar o segredo de extração de imagem de seu cluster no namespace do Kubernetes default.
-
Obtenha o ID do cluster.
ibmcloud ks cluster ls -
Execute o seguinte comando para criar um ID de serviço para o cluster e designar o ID de serviço a uma função de acesso ao serviço Leitor do IAM para o IBM Cloud Container Registry. O comando também cria uma chave de API para personificar as credenciais do ID do serviço e armazena a chave de API em um segredo de extração de imagem de Kubernetes no cluster. O segredo de extração de imagem está no namespace
defaultdo Kubernetes.ibmcloud ks cluster pull-secret apply --cluster CLUSTER_NAME_OR_IDQuando você executa esse comando, a criação de credenciais do IAM e de segredos de extração de imagem é iniciada e pode levar algum tempo para ser concluída. Não é possível implementar contêineres que extraem uma imagem dos domínios do IBM Cloud Container Registry
icr.ioaté que os segredos de extração de imagem sejam criados. -
Verifique se os segredos de extração de imagem são criados em seu cluster.
kubectl get secrets | grep icr-ioSaída de exemplo
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Atualize as suas implementações de contêiner para fazer pull de imagens do nome de domínio
icr.io. -
Opcional: Se você tiver um firewall, certifique-se de permitir o tráfego de rede de saída para as sub-redes do registro dos domínios que você utiliza.
-
Complete sua configuração usando uma das opções a seguir.
- Para extrair imagens em namespaces do Kubernetes diferentes de
defaultou de outras contas do IBM Cloud, copie ou crie outro segredo de extração de imagem. - Para restringir o acesso ao segredo de extração de imagem a recursos de registro específicos, como namespaces ou regiões:
- Certifique-se de que IBM Cloud políticas do IAM para IBM Cloud Container Registry estão ativadas.
- Edite as IBM Cloud políticas do IAM para o ID de serviço ou crie outra imagem de extração de imagem.
- Para extrair imagens em namespaces do Kubernetes diferentes de
Usando um segredo de extração de imagens para acessar imagens em registros privados externos
Configure seu próprio segredo de pull de imagem em seu cluster para implementar contêineres em namespaces do Kubernetes diferentes do default e use imagens armazenadas em outras contas do IBM Cloud ou em registros privados externos.
Além disso, você pode criar seu próprio segredo de extração de imagem para aplicar políticas de acesso do IAM que restringem permissões a namespaces ou ações de imagem de registro específicos (como push ou pull).
Depois da criação do segredo de extração de imagem, seus contêineres devem usá-lo para obter autorização para o pull de uma imagem do registro. É possível incluir o segredo de extração de imagem na conta de serviço do namespace ou referir-se ao segredo em cada implementação. Para obter instruções, consulte Usando o segredo de extração de imagem para implementar contêineres.
Os segredos de extração de imagem são válidos apenas para os namespaces do Kubernetes para os qual eles foram criados. Repita essas etapas para cada namespace no qual você desejar implementar contêineres. Imagens de DockerHub não requerem segredos de extração de imagem.
Antes de Iniciar:
- Configure um namespace no IBM Cloud Container Registry e envie por push as imagens para esse namespace.
- Criar um cluster.
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Para usar seu próprio segredo de extração de imagem, escolha entre as opções a seguir:
- Copie o segredo de pull de imagem do namespace padrão do Kubernetes para outros namespaces em seu cluster.
- Crie novas credenciais de chave de API do IAM e as armazene em um segredo de pull de imagem para acessar imagens em outras contas do IBM Cloud ou para aplicar políticas IAM que restrinjam o acesso a determinados domínios de registro ou namespaces.
- Crie um segredo de extração de imagem para acessar imagens em registros privados externos.
Se você já tiver criado um segredo de extração de imagem em seu namespace que você deseja usar em sua implementação, consulte Implementando contêineres usando o imagePullSecret criado.
Copiando um segredo de extração de imagem existente
É possível copiar um segredo de pull de imagem, como aquele criado automaticamente para o namespace default do Kubernetes, para outros namespaces em seu cluster. Em vez disso, se desejar usar credenciais de chave de API do IBM
Cloud IAM diferentes para esse namespace, como a restrição do acesso a namespaces específicos ou o pull de imagens de outras contas do IBM Cloud, crie um segredo de pull de imagem.
-
Liste os namespaces do Kubernetes disponíveis em seu cluster ou crie um namespace para usar.
kubectl get namespacesSaída de exemplo
default Active 79d ibm-cert-store Active 79d ibm-system Active 79d kube-public Active 79d kube-system Active 79dPara criar um namespace
kubectl create namespace <namespace_name> -
Liste os segredos de extração de imagem existentes no namespace
defaultdo Kubernetes para o IBM Cloud Container Registry.kubectl get secrets -n default | grep icr-ioSaída de exemplo
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Copie o segredo de extração de imagem
all-icr-iodo namespacedefaultpara o namespace de sua preferência. Os novos segredos de extração de imagem são denominados<namespace_name>-icr-<region>-io.kubectl get secret all-icr-io -n default -o yaml | sed 's/default/<new-namespace>/g' | kubectl create -n <new-namespace> -f - -
Verifique se os segredos foram criados com êxito.
kubectl get secrets -n <namespace_name> | grep icr-io -
Para implementar contêineres, inclua o segredo de extração de imagem em cada implementação ou na conta de serviço do namespace para que qualquer implementação no namespace possa fazer pull das imagens do registro.
Como criar um pull secret de imagem com credenciais de chave API IAM diferentes
É 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 pull). Em seguida, crie
uma chave de API e armazene essas credenciais de registro em um segredo de extração de imagem para seu cluster.
Por exemplo, para acessar imagens em outras contas do IBM Cloud, crie uma chave de API que armazene as credenciais do IBM Cloud Container Registry de um ID de serviço ou usuário nessa conta. Em seguida, na conta de seu cluster, salve as credenciais da chave de API em um segredo de pull de imagem para cada cluster e namespace de cluster.
As etapas a seguir criam uma chave de API que armazena as credenciais de um ID de serviço do IBM Cloud IAM. Em vez de usar um ID de serviço, você pode desejar criar uma chave de API para um ID do usuário que tenha uma política de acesso de serviço do IBM Cloud IAM para o IBM Cloud Container Registry. No entanto, certifique-se de que o usuário seja um ID funcional ou tenha um plano no caso de o usuário sair para que o cluster possa ainda acessar o registro.
-
Liste os namespaces Kubernetes disponíveis em seu cluster ou crie um namespace para usar onde você deseja implementar contêineres das imagens de registro.
kubectl get namespacesSaída de exemplo
default Active 79d ibm-cert-store Active 79d ibm-system Active 79d kube-public Active 79d kube-system Active 79dPara criar um namespace
kubectl create namespace <namespace_name> -
Crie um ID de serviço do IBM Cloud IAM para seu cluster que é usado para as políticas do IAM e as credenciais da chave de API no segredo de extração de imagem. Certifique-se de dar ao ID do serviço uma descrição que ajude a recuperar o ID de serviço mais tarde, como incluir o nome do cluster e do namespace.
ibmcloud iam service-id-create <cluster_name>-<namespace>-id --description "Service ID for IBM Cloud Container Registry in Kubernetes cluster <cluster_name> namespace <namespace>" -
Crie uma política do IBM Cloud IAM customizada para seu ID de serviço de cluster que conceda acesso ao IBM Cloud Container Registry.
ibmcloud iam service-policy-create <cluster_service_ID> --roles <service_access_role> --service-name container-registry [--region <IAM_region>] [--resource-type namespace --resource <registry_namespace>]cluster_service_ID- Obrigatório. Substitua pelo ID de serviço
<cluster_name>-<kube_namespace>-idcriado anteriormente para o cluster de Kubernetes. --service-name container-registry- Obrigatório. Insira
container-registrypara que a política do IAM seja para o IBM Cloud Container Registry. --roles <service_access_role>- Obrigatório. Insira a função de acesso ao serviço do IBM Cloud Container Registry para o qual você deseja definir o escopo de acesso ao ID de serviço. Os valores possíveis
são
Reader,WritereManager. --region <IAM_region>- Opcional. Para definir o escopo da política de acesso para determinadas regiões do IAM, insira as regiões em uma lista separada por vírgula. Os valores possíveis são as
globalregiões de registro local e . --resource-type namespace --resource <registry_namespace>- Opcional. Para limitar o acesso apenas às imagens em determinados espaços de nomes do IBM Cloud Container Registry, insira
namespacepara o tipo de recurso e especifique o<registry_namespace>. Para listar namespaces de registro, executeibmcloud cr namespaces.
-
Crie uma chave de API para o ID de serviço. Nomeie a chave de API semelhante ao seu ID de serviço, e inclua o ID de serviço que você criou anteriormente,
<cluster_name>-<kube_namespace>-id. Certifique-se de dar à chave de API uma descrição que ajuda a recuperar a chave posteriormente.ibmcloud iam service-api-key-create <cluster_name>-<namespace>-key <cluster_name>-<namespace>-id --description "API key for service ID <service_id> in Kubernetes cluster <cluster_name> namespace <namespace>" -
Recupere seu valor de Chave de API da saída do comando anterior.
Please preserve the API key! It can't be retrieved after it's created. Name <cluster_name>-<kube_namespace>-key Description key_for_registry_for_serviceid_for_kubernetes_cluster_multizone_namespace_test Bound To crn:v1:bluemix:public:iam-identity::a/1bb222bb2b33333ddd3d3333ee4ee444::serviceid:ServiceId-ff55555f-5fff-6666-g6g6-777777h7h7hh Created At 2019-02-01T19:06+0000 API Key i-8i88ii8jjjj9jjj99kkkkkkkkk_k9-llllll11mmm1 Locked false UUID ApiKey-222nn2n2-o3o3-3o3o-4p44-oo444o44o4o4 -
Crie um segredo de extração de imagem para armazenar as credenciais de chave de API no namespace do cluster. Repita essa etapa para cada namespace de cada cluster para cada domínio
icr.iodo qual você deseja fazer pull de imagens.kubectl --namespace <namespace> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>--namespace <namespace>- Obrigatório. Especifique o namespace do Kubernetes de seu cluster que você usou para o nome do ID do serviço.
<secret_name>- Obrigatório. Insira um nome para seu segredo de extração de imagem.
--docker-server <registry_URL>- Obrigatório. Configure a URL para o registro de imagem no qual o namespace de registro está configurado. Para obter os domínios disponíveis, consulte Regiões locais.
--docker-username iamapikey- Obrigatório. Insira o nome do usuário para efetuar login em seu registro privado. Se você usar o IBM Cloud Container Registry, insira
iamapikey. --docker-password <token_value>- Obrigatório. Insira o valor de sua
API Keyque você recuperou anteriormente. --docker-email <docker-email>- Obrigatório. Se você tiver um, insira seu endereço de e-mail do Docker. Caso contrário, insira um endereço de e-mail fictício, como
a@b.c. Esse e-mail é necessário para criar um segredo do Kubernetes, mas não é usado após a criação.
-
Verifique se o segredo foi criado com êxito. Substitua
<namespace>pelonamespaceem que você criou o segredo de extração de imagem.kubectl get secrets --namespace <namespace>
Acessando imagens que são armazenadas em outros registros privados
Se você já tiver um registro privado, deverá armazenar as credenciais de registro em um segredo de imagem do Kubernetes e referenciar esse segredo por meio de seu arquivo de configuração.
Antes de Iniciar:
- Criar um cluster.
- Efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
Para criar um segredo de extração de imagem:
-
Crie o segredo do Kubernetes para armazenar suas credenciais de registro privado.
kubectl --namespace <namespace> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>--namespace <namespace>- Obrigatório. O namespace do Kubernetes do cluster no qual você deseja usar o segredo e implementar contêineres. Para listar os namespaces disponíveis em seu cluster, execute
kubectl get namespaces. <secret_name>- Obrigatório. O nome que você deseja usar para seu segredo de extração de imagem.
--docker-server <registry_URL>- Obrigatório. A URL para o registro no qual as imagens privadas são armazenadas.
--docker-username <docker_username>- Obrigatório. O nome de usuário para efetuar login em seu cadastro privado.
--docker-password <token_value>- Obrigatório. A senha para fazer login em seu registro privado, como um valor do token.
--docker-email <docker-email>- Obrigatório. Se você tiver um, insira seu endereço de e-mail do Docker. Se você não tiver um, insira um endereço de e-mail fictício, como
a@b.c. Esse e-mail é necessário para criar um segredo do Kubernetes, mas não é usado após a criação.
-
Verifique se o segredo foi criado com êxito. Substitua
<namespace>pelo nome do espaço de nomes no qual o segredo de extração de imagem foi criado.kubectl get secrets --namespace <namespace> -
Crie um pod que faça referência ao segredo de extração de imagem.
Usando o segredo de extração de imagem para implementar contêineres
É possível definir um segredo de extração de imagem na implementação do pod ou armazenar o segredo de extração de imagem na conta de serviço do Kubernetes para que ele fique disponível para todas as implementações que não especificarem uma conta de serviço do Kubernetes no espaço de nomes.
Para planejar como os segredos de extração de imagem são usados no cluster, escolha entre as opções a seguir.
- Fazer referência ao segredo de extração de imagem na implementação do pod: use esta opção se não quiser conceder acesso ao registro para todos os pods no espaço de nomes por padrão. Os desenvolvedores podem incluir o segredo de extração de imagem em cada implementação de pod que deve acessar seu registro.
- Armazenando o segredo de imagem da imagem na conta de serviço de Kubernetes: Utilize esta opção para conceder acesso a imagens em seu cadastro para todas as implementações nos namespaces de Kubernetes selecionados. Para armazenar um segredo de extração de imagem na conta de serviço do Kubernetes, use as etapas a seguir.
Armazenando o segredo de extração de imagem na conta de serviço do Kubernetes para o namespace selecionado
Todo namespace do Kubernetes tem uma conta do serviço do Kubernetes que é denominada default. Dentro do namespace, é possível incluir o segredo de extração de imagem nessa conta de serviço para conceder acesso aos pods para que
eles façam pull de imagens do seu registro. As implementações que não especificam uma conta de serviço usam automaticamente a conta de serviço default para esse espaço de nomes do Kubernetes.
-
Verifique se um segredo de extração de imagem já existe para sua conta de serviço padrão.
kubectl describe serviceaccount default -n <namespace_name>Quando
<none>é exibido na entrada Segredos de extração de imagem, não existe nenhum segredo de extração de imagem. -
Inclua o segredo de extração de imagem em sua conta de serviço padrão.
- Comando de exemplo para incluir o segredo de extração de imagem quando nenhum segredo estiver definido.
kubectl patch -n <namespace_name> serviceaccount/default -p '{"imagePullSecrets":[{"name": "<image_pull_secret_name>"}]}' ``` - Comando de exemplo para incluir o segredo de extração de imagem quando um segredo já estiver definido. ```sh {: pre} kubectl patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' ``` -
Verifique se o segredo de extração de imagem foi incluído em sua conta de serviço padrão.
kubectl describe serviceaccount default -n <namespace_name>Saída de exemplo
Name: default Namespace: <namespace_name> Labels: <none> Annotations: <none> Image pull secrets: <image_pull_secret_name> Mountable secrets: default-token-sh2dx Tokens: default-token-sh2dx Events: <none>Se os Segredos de extração de imagem mostrarem
<secret> (not found), verifique se o segredo de extração de imagem existe no mesmo espaço de nomes da conta de serviço executandokubectl get secrets -n namespace. -
Crie um arquivo de configuração de pod denominado
mypod.yamlpara implementar um contêiner de uma imagem no seu registro.apiVersion: v1 kind: Pod metadata: name: mypod spec: containers: - name: mypod-container image: <region>.icr.io/<namespace>/<image>:<tag> -
Crie o pod no cluster, aplicando o arquivo de configuração
mypod.yaml.kubectl apply -f mypod.yaml
Configurando um cluster para extrair o software autorizado
É possível configurar seu cluster do IBM Cloud Kubernetes Service para puxar o software autorizado, que é uma coleção de imagens de contêiner protegidas que são empacotadas em gráficos do Helm que você está licenciado pela IBM a usar. O software
autorizado é armazenado em um domínio especial do cp.icr.io do IBM Cloud Container Registry. Para acessar esse domínio, deve-se criar um segredo de extração de imagem com uma chave de autorização para seu cluster e incluir esse
segredo de extração de imagem na conta de serviço do Kubernetes de cada namespace no qual você deseja implementar esse software autorizado.
Antes de iniciar: efetue login na sua conta. If applicable, target the appropriate resource group. Configure o contexto para o seu cluster.
-
Obtenha a chave de autorização para sua biblioteca de software autorizada.
- Efetue login no MyIBM.com e role até a seção Biblioteca de software de contêiner. Clique em Visualizar biblioteca.
- Na página “Acesse seu software de contêiner > Chaves de autorização ”, clique em “Copiar chave ”. Essa chave autoriza o acesso a todos os softwares autorizados na sua biblioteca de softwares de contêiner.
-
No namespace que você deseja implementar seus contêineres autorizados, crie um segredo de extração de imagem para que você possa acessar o registro autorizado
cp.icr.io. Use a chave de autorização que você recuperou anteriormente como o valor--docker-password. Para obter mais informações, consulte Acessando imagens que são armazenadas em outros registros privados.kubectl create secret docker-registry entitled-cp-icr-io --docker-server=cp.icr.io --docker-username=cp --docker-password=<entitlement_key> --docker-email=<docker_email> -n <namespace> -
Inclua o segredo de extração de imagem na conta de serviço do namespace para que qualquer contêiner no namespace possa usar a chave de autorização para fazer pull das imagens autorizadas. Para obter mais informações, consulte Usando o segredo de extração de imagem para implementar contêineres.
kubectl patch -n <namespace> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
Crie um pod no namespace que constrói um contêiner por meio de uma imagem no registro autorizado.
kubectl run <pod_name> --image=cp.icr.io/<image_name> -n <namespace> --generator=run-pod/v1 -
Verifique se seu contêiner foi capaz de construir com êxito por meio da imagem autorizada, verificando se o pod está em um status Executando.
kubectl get pod <pod_name> -n <namespace>
Imaginando o que fazer em seguida? É possível configurar o repositório do gráfico do Helm autorizado, em que os gráficos do Helm que incorporam o software autorizado são armazenados.
Se você já tiver o Helm instalado em seu cluster, execute helm repo add entitled https://raw.githubusercontent.com/IBM/charts/master/repo/entitled.
Atualizando uma configuração de registro customizado containerd do IBM Cloud Kubernetes Service
Com o Kubernetes versão 1.22 ou mais recente, é possível usar arquivos de configuração containerd em nós do trabalhador para configurar a extração por meio de um registro de contêiner. É possível usar um daemonset para atualizar as configurações em todos os nós em um cluster, o que evita que as configurações sejam eliminadas quando os nós do trabalhador forem recarregados ou quando novos trabalhadores forem incluídos.
Exemplo de daemonset para atualizar uma configuração de registro customizado containerd
Use o arquivo de exemplo YAML para definir um daemonset que seja executado em todos os nós do trabalhador para configurar ou atualizar uma configuração de host de registro de containerd e montar no caminho de registro de containerd correspondente.
O exemplo define a configuração de host de registro a seguir para dockerhub. Essa configuração de host de registro já é fornecida e configurada automaticamente durante a fase de fornecimento do trabalhador. O contêiner init inicializa o hosts.toml em cada nó de trabalho após a implantação e após a recarga ou reinicialização dos nós de trabalho.
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
Exemplo de arquivo YAML:
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
name: containerd-dockerhub-registry-config
name: containerd-dockerhub-registry-config
namespace: kube-system
spec:
selector:
matchLabels:
name: containerd-dockerhub-registry-config
template:
metadata:
labels:
name: containerd-dockerhub-registry-config
spec:
initContainers:
- image: alpine:3.13.6
name: containerd-dockerhub-registry-config
command:
- /bin/sh
- -c
- |
#!/bin/sh
set -uo pipefail
cat << EOF > /etc/containerd/certs.d/docker.io/hosts.toml
server = "https://docker.io"
[host."https://registry-1.docker.io"]
capabilities = ["pull", "resolve"]
EOF
volumeMounts:
- mountPath: /etc/containerd/certs.d/docker.io/
name: dockerhub-registry-config
containers:
- name: pause
image: "us.icr.io/armada-master/pause:3.5"
imagePullPolicy: IfNotPresent
volumes:
- name: dockerhub-registry-config
hostPath:
path: /etc/containerd/certs.d/docker.io/
Para obter mais informações sobre a atualização de uma configuração de host de registro do containerd, consulte a Documentação do containerd.