Configurando um registro de imagem
Os clusters do Red Hat® OpenShift® on IBM Cloud® incluem um registro interno para construir, implementar e gerenciar imagens de contêiner localmente. Para que um registro privado gerencie e controle o acesso a imagens em sua empresa, também é possível configurar seu cluster para que use o IBM Cloud® Container Registry.
Escolhendo uma solução de registro de imagem
Suas imagens de contêiner devem ser armazenadas em um registro de contêiner que o cluster possa acessar para implantar aplicativos no cluster. É possível optar por usar o registro integrado de seu cluster Red Hat OpenShift, um registro privado com acesso restrito para selecionar usuários, ou um registro público. Revise a tabela a seguir para escolher a melhor opção para seu caso de uso.
- Red Hat OpenShift Container Registry (OCR) interno
-
Seu cluster é configurado com o Red Hat OpenShift Container Registry interno para que o Red Hat OpenShift possa construir, implementar e gerenciar automaticamente o seu ciclo de vida de aplicativo de dentro do cluster. As imagens são armazenadas em um dispositivo de armazenamento de arquivo clássico do IBM Cloud de apoio que é provisionado no horário de criação do cluster. Se você precisar de mais armazenamento, será possível redimensionar o dispositivo. Casos de uso:
- Fluxo de imagem nativo do Red Hat OpenShift, construção e processo de implementação de app em uma base por cluster.
- As imagens podem ser compartilhadas em todos os projetos no cluster, com acesso que é controlado por meio de funções RBAC.
- Integrando o registro interno a outros produtos do Red Hat como o CloudForms para recursos ampliados, como varredura de vulnerabilidade.
- Opção para expor o registro interno com uma rota para que os usuários possam extrair imagens do registro sobre a rede pública.
- Opção para configurar o registro interno para extrair imagens de ou enviar imagens por push para um registro privado, como o IBM Cloud Container Registry.
-
Para obter mais informações, consulte Usando o registro interno.
- Registro privado
-
Registros privados são uma boa opção para proteger suas imagens de usuários não autorizados. Os registros privados devem ser configurados pelo administrador de cluster para assegurar que o acesso, as cotas de armazenamento, a confiança de imagem e outros recursos funcionem conforme desejado. Por padrão, seus clusters do Red Hat OpenShift são integrados com o IBM Cloud Container Registry privado por meio de segredos de extração de imagem no projeto
default. O IBM Cloud Container Registry é um registro privado altamente disponível e com diversos locatários para armazenar suas próprias imagens. Também é possível extrair imagens fornecidas pela IBM por meio do registroicr.ioglobal e do software licenciado por meio do registro autorizado. Com o IBM Cloud Container Registry, é possível gerenciar imagens para vários clusters com integração com o IBM Cloud IAM e o faturamento. Vantagens de usar o IBM Cloud Container Registry com o registro interno:- Armazenamento em cache de imagem local para construções mais rápidas por meio do registro interno.
- As implementações em outros projetos podem ver o fluxo de imagem, para que não seja preciso copiar segredos de extração para cada projeto.
- Compartilhar imagens entre diversos clusters sem precisar enviar por push para diversos registros.
- Varrer automaticamente a vulnerabilidade de imagens.
- Controlar o acesso por meio de políticas do IBM Cloud IAM e de registros regionais separados.
- Reter imagens sem requerer espaço de armazenamento em seu cluster ou em um dispositivo de armazenamento anexado. Também é possível configurar políticas para gerenciar a quantidade de imagens para evitar que ocupem muito espaço.
- Infraestrutura de VPC: Uso do endpoint de serviço de registro privado para que os clusters que usam apenas um endpoint de serviço de nuvem privada ainda possam acessar o registro.
- Configurar cotas de tráfego de armazenamento e pull de imagem para melhor controlar o armazenamento, o uso e o faturamento de imagens.
- Fazer pull de conteúdo IBM licenciado por meio do registro autorizado.
-
Para começar, consulte os tópicos a seguir:
- Introdução ao IBM Cloud Container Registry.
- Importando imagens do IBM Cloud Container Registry para o fluxo de imagem de registro interno.
- Usando o IBM Cloud Container Registry.
- Registro público
-
Registros públicos, como o Docker Hub, são uma forma de compartilhar imagens entre equipes, empresas, clusters ou provedores em nuvem. Alguns registros públicos também podem oferecer um componente de registro privado. Casos de uso:
- Enviando por push e fazendo pull de imagens na rede pública.
- Teste rápido de um contêiner entre provedores em nuvem.
- Não são necessários recursos de nível corporativo, como varredura de vulnerabilidade ou gerenciamento de acesso.
-
Para obter mais informações, consulte a documentação do registro público, como o Quay ou o Docker Hub.
Armazenando imagens nos registros internos
Por padrão, os clusters do Red Hat OpenShift têm um registro interno. As imagens no registro interno passam por backup, mas variam de acordo com o provedor de infraestrutura de seu Red Hat OpenShift on IBM Cloud cluster.
- Classic clusters
- Seu cluster Red Hat OpenShift é configurado por padrão com um registro interno que usa File Storage for Classic como armazenamento de apoio. Quando você exclui o cluster, o registro interno e suas imagens também são excluídos. Para persistir suas imagens, considere usar um registro privado, como o IBM Cloud Container Registry, fazer backup delas em um armazenamento persistente, como o Object Storage, ou criar um cluster de registro de contêiner do Red Hat OpenShift (OCR) independente e separado. Para obter mais informações, consulte o Red Hat OpenShift docs.
- Clusters do VPC
- O registro interno do seu cluster Red Hat OpenShift faz o backup das imagens em um bucket criado automaticamente em uma instância IBM Cloud Object Storage na sua conta. Todos os dados armazenados no bucket de armazenamento de objetos permanecem, mesmo quando você exclui o cluster.
- Clusters clássicos, VPC ou Satellite
- Opcionalmente, você pode optar por configurar o registro interno para armazenar dados no site
emptyDirdo nó de trabalho em que o pod de registro interno é executado. Lembre-se de que esses dados não são persistentes e se o pod ou o nó do trabalhador for reiniciado, os dados armazenados serão excluídos e irrecuperáveis. Será possível armazenar as imagens localmente noemptyDirpara aumentar o desempenho se você construir contêineres por meio de imagens grandes regularmente.
Fazendo o backup do seu registro de imagem interno para IBM Cloud Object Storage
Nuvem privada virtual
Suas imagens em seu registro interno do cluster Red Hat OpenShift são automaticamente submetidas a backup em um depósito do IBM Cloud Object Storage. Todos os dados armazenados no bucket de armazenamento de objetos permanecem, mesmo quando você exclui o cluster.
No entanto, se o balde falhar ao criar quando você criar o seu cluster, você deve criar manualmente um balde e configurar seu cluster para usar o balde. Enquanto isso, o registro interno usa um volume emptyDir do Kubernetes que
armazena as suas imagens de contêiner no disco secundário do seu nó do trabalhador. Os volumes emptyDir não são considerados armazenamento altamente disponível persistente e, se você excluir os pods que usam a imagem, a imagem
será excluída automaticamente.
Para criar manualmente um depósito para o seu registro interno, consulte Erro de criação de cluster sobre o depósito de armazenamento de objeto de nuvem.
Configuração de um bucket COS para o registro do cluster
Você pode configurar manualmente um bucket IBM Cloud Object Storage para o registro de imagem interno do seu cluster. Isso é útil quando você precisa configurar ou reconfigurar o backend de armazenamento do registro.
Antes de Iniciar
- Você deve ter um cluster Red Hat OpenShift on IBM Cloud existente e uma instância IBM Cloud Object Storage.
- Acesse o seu Red Hat OpenShift cluster.
Configuração do bucket COS
-
Defina as variáveis de ambiente para seu cluster e para a instância Object Storage.
export CLUSTER_NAME=<cluster_name> export COS_INSTANCE_ID=<cos_instance_id> export CLUSTER_ID=$(ibmcloud ks cluster get --cluster $CLUSTER_NAME --json | jq -r .id) -
Verifique a configuração atual do operador de registro de imagem.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Coloque o operador temporariamente no modo
Removed. Se o registro já estiver ativo, desative-o para evitar conflitos.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Removed"}}' -
Verifique se o registro usa
emptyDir, o que significa que nenhum bucket COS está configurado.storage: emptyDir: {} managementState: Managed -
Crie um bucket Object Storage para seu cluster. Substitua
<region>pela região de sua preferência, comous-southoueu-de.RANDOM_SUFFIX=$(LC_ALL=C tr -dc 'a-z0-9' </dev/urandom | head -c 6) COS_BUCKET_NAME="roks-${CLUSTER_ID}-${RANDOM_SUFFIX}" ibmcloud cos bucket-create \ --bucket "$COS_BUCKET_NAME" \ --ibm-service-instance-id "$COS_INSTANCE_ID" \ --class standard \ --region <region> -
Remova o campo
emptyDirda configuração do registro.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=json \ -p '[{"op": "remove", "path": "/spec/storage/emptyDir"}]' -
Configure o registro para usar o armazenamento S3 ( Object Storage ). Atualize os valores
regioneregionEndpointpara que correspondam à região do seu balde.oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge -p "$(cat <<EOF { "spec": { "managementState": "Unmanaged", "storage": { "s3": { "bucket": "$COS_BUCKET_NAME", "region": "<region>-standard", "regionEndpoint": "https://s3.direct.<region>.cloud-object-storage.appdomain.cloud", "trustedCA": { "name": "" }, "virtualHostedStyle": false } } } } EOF )"Por exemplo, se seu bucket estiver em
eu-de, useregion: "eu-de-standard"eregionEndpoint: "https://s3.direct.eu-de.cloud-object-storage.appdomain.cloud". -
Verifique a configuração do operador de registro de imagem.
oc get configs.imageregistry.operator.openshift.io/cluster -o yaml -
Crie uma chave de credencial de serviço para a instância COS e extraia as credenciais HMAC.
ibmcloud resource service-key-create roks-$CLUSTER_ID-key \ --instance-id "$COS_INSTANCE_ID" \ -p '{"HMAC": true}' \ -o json > service-key.json # Extract values with jq ACCESS_KEY=$(jq -r '.credentials.cos_hmac_keys.access_key_id' service-key.json) SECRET_KEY=$(jq -r '.credentials.cos_hmac_keys.secret_access_key' service-key.json) # Create credentials file cat <<EOF > creds.txt [default] aws_access_key_id = $ACCESS_KEY aws_secret_access_key = $SECRET_KEY EOFIsso cria um arquivo
creds.txtcom suas credenciais Object Storage.Exemplo de arquivo de credenciais
[default] aws_access_key_id = f1ab5fcf7XXXXXXXXXb2a14e046 aws_secret_access_key = 4c78ddfa763XXXXXXX23d1cc9350d1 -
Crie o segredo
image-registry-private-configuration-userse ele não existir.oc create secret generic image-registry-private-configuration-user -n openshift-image-registry -
Atualize o segredo com as credenciais de acesso.
oc patch secret image-registry-private-configuration-user \ -n openshift-image-registry \ --type merge \ -p "{ \"data\": { \"REGISTRY_STORAGE_S3_ACCESSKEY\": \"$(echo -n "$ACCESS_KEY" | base64)\", \"REGISTRY_STORAGE_S3_SECRETKEY\": \"$(echo -n "$SECRET_KEY" | base64)\" } }" -
Crie o segredo
image-registry-private-configurationse ele não existir.oc create secret generic image-registry-private-configuration -n openshift-image-registry -
Atualize o segredo do registro da imagem principal com o arquivo de credenciais Object Storage completo.
CREDENTIALS_B64=$(base64 -i creds.txt | tr -d '\n') oc patch secret image-registry-private-configuration \ -n openshift-image-registry \ --type merge \ -p "{\"data\": {\"credentials\": \"${CREDENTIALS_B64}\"}}" -
Defina o operador de registro de imagem para o modo
Managed.oc patch configs.imageregistry.operator.openshift.io/cluster \ --type=merge -p '{"spec":{"managementState":"Managed"}}' -
Reinicie a implantação do registro de imagem.
oc rollout restart deployment image-registry -n openshift-image-registry -
Verifique se o registro está em um estado saudável.
oc get clusteroperator image-registry
Solução de problemas de configuração do registro COS
Se encontrar problemas com a configuração do registro Object Storage, tente as seguintes etapas de solução de problemas.
-
Verifique se o pod
image-registryestá em execução.oc project openshift-image-registry oc get podsExemplo de saída
NAME READY STATUS RESTARTS AGE image-registry-7d8b57c98f-m92t7 1/1 Running 0 3h53m node-ca-62p88 1/1 Running 0 5h12m node-ca-6s8vx 1/1 Running 0 5h17m node-ca-b5jwl 1/1 Running 0 4h56m node-ca-chl7k 1/1 Running 0 5h17m node-ca-l6tlb 1/1 Running 0 4h55m node-ca-q4vw8 1/1 Running 0 4h55m -
Verifique o status do operador do cluster
image-registry.oc describe clusteroperator image-registry -
Se necessário, remova temporariamente a configuração do backend S3 e reverta para
emptyDirpara desbloquear o operador.oc patch configs.imageregistry.operator.openshift.io/cluster --type=merge -p '{ "spec": { "managementState": "Managed", "storage": { "emptyDir": {} } } }' -
Verifique os pods no namespace
openshift-image-registry.oc get pods -n openshift-image-registry -
Verifique as variáveis de ambiente de configuração implantadas.
oc get pod -n openshift-image-registry -l docker-registry=default -o jsonpath='{.items[0].spec.containers[0].env}' | jq
Para obter mais informações sobre a configuração do registro, consulte Instalação e configuração do registro.
Armazenando imagens no registro interno em clusters Classic
Por padrão, o registro interno do seu cluster Red Hat OpenShift usa um volume IBM Cloud File Storage for Classic para armazenar as imagens do registro. É possível revisar o tamanho padrão do volume de armazenamento ou atualizar o tamanho do volume.
Visualizando detalhes do volume
Para visualizar detalhes do volume incluindo a classe de armazenamento e o tamanho, é possível descrever a solicitação de volume persistente.
oc describe pvc -n openshift-image-registry image-registry-storage
Mudando detalhes do volume
Se o seu registro precisar de gigabytes adicionais de armazenamento para suas imagens, será possível redimensionar o volume de armazenamento de arquivo. Para obter mais informações, veja Mudando o tamanho e o IOPS de seu dispositivo de armazenamento existente.
Quando você redimensiona o volume em sua conta de infraestrutura do IBM Cloud, a descrição de PVC anexada não é atualizada. Em vez disso, é possível efetuar login no pod openshift-image-registry que usa o PVC registry-backing para verificar se o volume está redimensionado.
Armazenando imagens no diretório vazio do nó do trabalhador
Será possível armazenar as imagens de registro interno localmente no emptyDir do nó do trabalhador, como um nó do trabalhador bare metal, para aumentar o desempenho se você construir contêineres por meio de imagens grandes regularmente.
Lembre-se de que esses dados não são persistentes e se o pod ou o nó do trabalhador for reiniciado, os dados armazenados serão excluídos e irrecuperáveis.
- Acesse o seu Red Hat OpenShift cluster.
- Atualize o configmap do operador de registro de imagem para definir
o armazenamento para usar o
emptyDirdo nó de trabalho. Observe que atualizar o configmap para usaremptyDirnão remove o PVC original do registro de imagem.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge --patch '{"spec":{"storage":{"emptyDir":{}}}}' - Se o estado de gerenciamento do operador de registro de imagem estiver definido como
Unmanaged, como nos clusters Satellite, atualize o estado de gerenciamento paraManaged. Agora, o operador atualiza o pod de registro interno.oc patch configs.imageregistry.operator.openshift.io/cluster --type merge -p '{"spec":{"managementState":"Managed"}}' - Obtenha os detalhes do pod de registro interno para que seja possível verificar suas atualizações.
-
Verifique se o pod
image-registryestá em execução e se um pod é executado por nó do trabalhador no cluster.oc get pods -n openshift-image-registryExemplo de saída
NAME READY STATUS RESTARTS AGE cluster-image-registry-operator-695bf78ffc-zvkhd 2/2 Running 0 33m image-registry-6774598589-65cnx 1/1 Running 0 112s node-ca-gg66r 1/1 Running 0 113s node-ca-n8jpq 1/1 Running 0 113s node-ca-p2d7j 1/1 Running 0 113s -
Obtenha o endereço IP público do Nó no qual o pod
image-registryé executado.oc describe pod -n openshift-image-registry <image-registry-pod> | grep NodeExemplo de saída
Node: 169.xx.xxx.xxx/169.xx.xxx.xxxSe o endereço IP do nó do trabalhador for privado, execute
ibmcloud oc worker ls -c <cluster> | grep <private_IP>e observe o endereço IP público correspondente. -
Obtenha o UID do pod
image-registryna seçãometadata.uidno YAML do pod (não o UID do conjunto de réplicas na seçãometadata.ownerReferences.uid).oc get pod -n openshift-image-registry <image-registry-pod> -o yamlExemplo de saída
apiVersion: v1 kind: Pod metadata: uid: e8d7718d-b0bd-47e2-9aaa-05f3a608fd9b ...
-
- Verifique se o registro interno armazena dados no
emptyDirdo nó do trabalhador.-
Acesse o registro diretamente do cluster, usando o nó de trabalho que você recuperou anteriormente. Siga as etapas para enviar por push uma imagem de teste para o registro interno.
Para concluir essas etapas na documentação do Red Hat OpenShift, é necessária a ferramenta de CLI
podman. Seus nós do trabalhador podem não ter essa ferramenta de CLI por padrão. Consulte o Podman guia de instalação para ver as versões RHEL disponíveis. -
Navegue até a pasta de pod de registro interno que está salva no
emptyDir. Para<pod_uid>, use o pod UID que você recuperou anteriormente.cd var/lib/kubelet/pods/<pod_uid>/volumes/kubernetes.io~empty-dir/registry-storage/docker/registry/v2/repositories/openshift -
Verifique se a sua imagem está no diretório de repositório.
lsExemplo de saída
<myimage> nginx ...
-
Removendo o registro de imagem interno
Nuvem privada virtual
As implantações do operador de registro de imagens estão presentes apenas em clusters gerenciados pelo Red Hat OpenShift on IBM Cloud Toolkit. HyperShift Os clusters gerenciados executam o operador de registro de imagens no plano de controle.
Se não desejar usar o registro de imagem interno, será possível concluir as etapas a seguir para removê-lo.
- Salve uma cópia de suas configurações de registro interno
oc get configs.imageregistry.operator.openshift.io cluster -o yaml > configs.yaml - Execute o comando de correção a seguir para mudar o estado de gerenciamento do registro de imagem para
Removedkubectl patch configs.imageregistry.operator.openshift.io cluster -p '{"spec":{"managementState":"Removed"}}' --type='merge' - Depois de mudar o estado de gerenciamento, o serviço de registro de imagem e a implementação são removidos do namespace do
openshift-image-registryem seu cluster. É possível executar os comandos a seguir para verificar se eles foram removidos Observe que apenas a implementação e o serviço de registro de imagens são removidos A implementação e o serviço do operador de registro de imagem permanecemoc get deployment -n openshift-image-registryoc get svc -n openshift-image-registry
Configurando uma rota externa segura para o registro interno
Por padrão, o seu cluster Red Hat OpenShift possui um registro interno que está disponível por meio de um serviço com um endereço IP interno. Se você deseja tornar o registro interno disponível na rede pública, é possível configurar uma rota de nova criptografia segura. Por exemplo, você pode configurar o registro interno de seu cluster para agir como um registro público para implementações em outros projetos ou clusters.
Antes de Iniciar:
- Confirme se você tem a função de acesso de serviço Gerenciador do IBM Cloud IAM para o cluster.
- Certifique-se de que seu cluster tenha conectividade de rede pública para expor o registro interno com uma rota pública.
- Instale o Docker em sua máquina local.
- Acesse o seu Red Hat OpenShift cluster.
Para usar o registro interno, configure uma rota pública para acessar o registro. Em seguida, crie um segredo de extração de imagem que inclua as credenciais para acessar o registro de modo que as implementações em outros projetos possam extrair imagens desse registro.
-
No projeto
openshift-image-registry, certifique-se de que o serviçoimage-registryexista para o registro interno.oc get svc -n openshift-image-registryExemplo de saída
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE image-registry ClusterIP 172.21.xxx.xxx <none> 5000/TCP 36d image-registry-operator ClusterIP None <none> 60000/TCP 36d -
Crie uma rota protegida para o serviço
image-registryque use a finalização do TLSreencrypt. Com a nova criptografia, o roteador finaliza a conexão TLS com um certificado e, em seguida, criptografa novamente a conexão com o registro interno com um certificado diferente. Com essa abordagem, o caminho completo da conexão entre o usuário e o registro interno é criptografado. Para fornecer seu próprio nome de domínio personalizado, inclua a opção--hostname.oc create route reencrypt --service=image-registry -n openshift-image-registry -
Recupere o nome do host (HOST/PORTA) e a PORTA que foram designados à rota
image-registry.oc get route image-registry -n openshift-image-registryExemplo de saída
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD image-registry image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud image-registry 5000-tcp reencrypt None -
Edite a rota para definir a estratégia de balanceamento de carga como
source, de modo que o mesmo endereço IP do cliente chegue ao mesmo servidor, como em uma configuração de rota de passagem. É possível configurar a estratégia incluindo uma anotação na seçãometadata.annotations:haproxy.router.openshift.io/balance: source. É possível editar o arquivo de configuração por meio do Console do aplicativo do Red Hat OpenShift ou em sua linha de comandos executando o comando a seguir.oc edit route image-registry -n openshift-image-registryInclua a anotação.
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/balance: source ... -
Se as políticas de rede corporativa impedirem o acesso de seu sistema local a terminais públicos por meio de proxies ou firewalls, permita o acesso ao subdomínio de rota que você criará para o registro interno nas etapas a seguir.
-
etue login no registro interno usando a rota como o nome do host.
docker login -u $(oc whoami) -p $(oc whoami -t) image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud -
Agora que você efetuou login, tente enviar por push um app
hello-worldde amostra para o registro interno.-
Puxe a imagem
hello-worlddo DockerHub ou construa uma imagem em sua máquina local.docker pull hello-world -
Identifique a imagem local com o nome do host de seu registro interno, o projeto para o qual você deseja implementar a imagem, o nome da imagem e a tag.
docker tag hello-world:latest image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> -
Envie por push a imagem para o registro interno de seu cluster.
docker push image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud/<project>/<image_name>:<tag> -
Verifique se a imagem é incluída no fluxo de imagem do Red Hat OpenShift.
oc get imagestreamExemplo de saída
NAME DOCKER REPO TAGS UPDATED hello-world image-registry-openshift-image-registry.svc:5000/default/hello-world latest 7 hours ago
-
-
Para ativar implementações em seu projeto para extrair imagens do registro interno, crie um segredo de extração de imagem em seu projeto que retenha as credenciais para acessar seu registro interno. Em seguida, inclua o segredo de extração de imagem na conta do serviço padrão para cada projeto.
-
Liste os segredos de extração de imagem que a conta do serviço padrão usa e anote o segredo que iniciar com
default-dockercfg.oc describe sa defaultExemplo de saída
... Image pull secrets: all-icr-io default-dockercfg-mpcn4 ... -
Obtenha as informações secretas codificadas do campo
datado arquivo de configuração.oc get secret <default-dockercfg-name> -o yamlExemplo de saída
apiVersion: v1 data: .dockercfg: ey...= -
Decodifique o valor do campo
data.echo "<ey...=>" | base64 -DExemplo de saída
{"172.21.xxx.xxx:5000":{"username":"serviceaccount","password":"eyJ... -
Crie um novo segredo de extração de imagem para o registro interno.
secret_name: dê um nome ao segredo de extração de imagem, comointernal-registry.--namespace: insira o projeto no qual criar o segredo de extração de imagem, comodefault.--docker-server: Em vez do endereço IP de serviço interno (172.21.xxx.xxx:5000), digite o nome do host da rotaimage-registrycom a porta (image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000).--docker-username: copie o"username"do segredo de extração de imagem anterior, comoserviceaccount.--docker-password: copie a"password"do segredo de extração de imagem anterior.--docker-email: 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, comoa@b.c. Esse e-mail é necessário para criar um segredo do Kubernetes, mas não é usado após a criação.
oc create secret docker-registry internal-registry --namespace default --docker-server image-registry-openshift-image-registry.<cluster_name>-<ID_string>.<region>.containers.appdomain.cloud:5000 --docker-username serviceaccount --docker-password <eyJ...> --docker-email a@b.c -
Inclua o segredo de extração da imagem na conta do serviço padrão de seu projeto.
oc patch -n <namespace_name> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"<image_pull_secret_name>"}}]' -
Repita estas etapas para cada projeto que você deseja extrair imagens do registro interno.
-
Agora que você configurou o registro interno com uma rota acessível, é possível efetuar login, enviar por push e extrair imagens para o registro. Para obter mais informações, consulte o Red Hat OpenShift documentação.
Importando imagens do IBM Cloud Container Registry para o fluxo de imagem de registro interno
Por padrão, o seu cluster do Red Hat OpenShift on IBM Cloud é configurado para extrair imagens dos domínios icr.io remotos e privados do IBM Cloud Container Registry no projeto default. Você pode importar uma imagem
do site IBM Cloud Container Registry para o registro interno do cluster Red Hat OpenShift marcando a imagem como um fluxo de imagem. Com essa configuração, é possível implementar apps por meio da imagem usando o cache local do registro interno, o que pode fazer com que suas implementações de app sejam construídas mais rapidamente. Além
disso, as implementações em outros projetos podem se referir ao fluxo de imagens, sem que seja necessário criar credenciais de segredo de extração de imagens para o IBM Cloud Container Registry em cada projeto.
Se você atualizar sua imagem no IBM Cloud Container Registry, ela não será extraída automaticamente para o registro interno de seu cluster Red Hat OpenShift. Em vez disso, configure a importação periódica ou repita estas etapas para marcar a imagem. Dependendo da política de extração de imagem usada em sua implementação, também pode ser necessário reiniciar sua implementação.
Deseja aprender mais sobre como as construções, os fluxos de imagem e o registro interno funcionam juntos? Leia a Red Hat OpenShift documentação ou confira este blog sobre gerenciamento de imagens de contêineres.
-
Alterne para o projeto
defaultpara extrair sua imagem para o fluxo de imagem. O projetodefaultjá está configurado com credenciais para acessar os registrosicr.io.oc project default -
Liste as imagens disponíveis em seu IBM Cloud Container Registry. Observe o Repositório e a Tag da imagem que você deseja extrair para o registro interno de seu cluster Red Hat OpenShift.
ibmcloud cr images -
Identifique a imagem para extraí-la do seu namespace do IBM Cloud Container Registry para o registro interno como um fluxo de imagem. Para obter mais informações, consulte a documentação Red Hat OpenShift ou execute
oc tag --help.oc tag <region>.icr.io/<namespace>/<image>:<tag> default/<image>:<tag> --reference-policy=local [--scheduled]<region>.icr.io/<namespace>/<image>:<tag>: Use as informações de Repositório e Tag que você recuperou anteriormente para completar a região IBM Cloud Container Registry, o namespace, a imagem e o nome da tag da imagem que você deseja extrair.default/<image>:<tag>: Digite as informações para o fluxo de imagem interno que você criar por meio da imagem identificada do IBM Cloud Container Registry. Você cria este fluxo de imagem no projetodefault, que também é o projeto em que o fluxo de imagem é criado, caso você não especifique um projeto. Os valores para<image>:<tag>geralmente correspondem aos valores que você recuperou anteriormente.--reference-policy=local: configure este valor comolocalpara que uma cópia da imagem do IBM Cloud Container Registry seja importada para o cache local do registro interno e disponibilizada para os projetos do cluster como um fluxo de imagem. Se você não incluir este valor, o fluxo de imagem voltará a referenciar o IBM Cloud Container Registry quando ele for usado em suas implementações e, portanto, requer credenciais no projeto.--scheduled: Defina essa opção opcional para configurar a importação periódica da imagem do site IBM Cloud Container Registry para o registro interno. A frequência padrão é de 15 minutos. Para obter mais informações, consulte o Red Hat OpenShift documentação.
-
Verifique se o seu fluxo de imagem é criado.
oc get imagestreams -
Verifique se o fluxo de imagem extraiu com sucesso a imagem do IBM Cloud Container Registry. Na saída, verifique se a imagem identificada mais recentemente corresponde à sua imagem
* <region>.icr.io/<namespace>/<image>@<digest>.oc describe is/<imagestream>Exemplo de saída
NAME: <imagestream> Namespace: default Created: 2 days ago Labels: <none> Annotations: openshift.io/image.dockerRepositoryCheck=2020-03-31T09:41:36Z Image Repository: image-registry.openshift-image-registry.svc:5000/default/ant1 Image Lookup: local=false Unique Images: 1 Tags: 1 latest tagged from <region>.icr.io/<namespace>/<image>:<tag> * <region>.icr.io/<namespace>/<image>@<digest> 2 days ago
Agora, seus desenvolvedores podem usar o fluxo de imagem em uma implementação de app. A imagem é construída com sucesso por meio da imagem extraída localmente no registro interno. Não é necessário configurar um segredo de extração de imagem no projeto para o IBM Cloud Container Registry, porque o fluxo de imagem é local para o cluster.
Configurando construções no registro interno para enviar por push imagens para o IBM Cloud Container Registry
Ao criar uma compilação no seu Red Hat OpenShift on IBM Cloud
cluster, você pode configurar o registro interno para enviar a imagem para o seu repositório externo em IBM Cloud Container Registry. Por padrão, o segredo de extração de imagem no projeto default do seu cluster somente tem acesso de leitura para extrair imagens do IBM Cloud Container Registry. Para enviar por push imagens, deve-se
incluir um segredo com acesso de gravação.
-
Alterne para o projeto
default.oc project default -
Siga as etapas para configurar uma chave de API do IBM Cloud IAM com as funções de acesso de serviço
ReadereWriterpara extrair e enviar por push as imagens para os seus registrosicr.io.Tenha em mente que qualquer usuário com acesso ao projeto pode usar esse segredo para enviar por push as imagens para o seu registro privado. É possível que você queira configurar ferramentas de criação de log e de monitoramento para que seja possível observar quem faz quais ações em seu cluster.
-
Repita a etapa anterior para cada região do
icr.iopara a qual você deseja enviar por push as imagens. -
Inclua o segredo na conta do serviço de construção e refira-se aos segredos no arquivo de configuração de construção. Para obter mais informações, consulte o Red Hat OpenShift documentação.
-
Inclua o segredo na conta do serviço de construção, vinculando o segredo que você acabou de criar à função
builderusada por todas as construções no cluster.oc secrets link builder <secret_name> -
Liste as configurações de construção e anote as que você deseja dar acesso de extração e envio por push ao IBM Cloud Container Registry.
oc get bc -
Configure o segredo de extração de imagem para a configuração de construção para usar o segredo que você acabou de criar com o acesso de serviço
Writerpara o IBM Cloud Container Registry.oc set build-secret --push bc/<build_config_name> <secret_name> -
Configure o segredo de extração de imagem para a configuração de construção para extrair do registro do qual você deseja extrair a imagem de construção inicial. Por exemplo, será possível usar o segredo que você acabou de criar com o acesso de serviço
Readerao IBM Cloud Container Registry se a imagem de origem estiver em um repositório do IBM Cloud Container Registry.oc set build-secret --pull bc/<build_config_name> <secret_name>
-
-
Depois de atualizar a conta do serviço de construção e o arquivo de configuração de construção para enviar por push para o IBM Cloud Container Registry, reinicie sua construção.
oc start-build <build_name> -
Obtenha o nome do seu pod de construção, como
<build>-2-build.oc get pods -
Verifique os logs da construção e anote o local no qual imagem foi enviada por push.
oc logs <build_pod>Exemplo de log de envio por push de imagem bem-sucedido.
... Successfully pushed <region>.icr.io/<namespace>/<build_name>@sha256:<hash> Push successful -
Verifique suas imagens em seu registro privado para confirmar se a imagem foi criada.
ibmcloud cr image listExemplo de saída
Repository Tag Digest Namespace Created Size Security status <region>.icr.io/<namespace>/<build_name> latest <digest> <namespace> 2 minutes ago 182 MB 33 Issues
Sua construção do Red Hat OpenShift agora pode extrair imagens e enviar imagens por push para o IBM Cloud Container Registry.
Usando o IBM Cloud Container Registry
Por padrão, o seu cluster do Red Hat OpenShift on IBM Cloud é configurado para extrair imagens dos domínios icr.io remotos e privados do IBM Cloud Container Registry no projeto default. Se você desejar usar imagens
que estão armazenadas no IBM Cloud Container Registry para outros projetos, será possível extrair a imagem para o registro interno em um fluxo de imagem ou criar segredos de extração de imagem para cada registro global e regional em cada projeto.
Para importar imagens para o registro interno: consulte Importando imagens do IBM Cloud Container Registry para o fluxo de imagem de registro interno.
Para extrair imagens diretamente do IBM Cloud Container Registry externo: consulte os tópicos a seguir.
- Entendendo como autorizar seu cluster para extrair imagens por meio de um registro.
- Copiando o segredo
all-icr-iodo projetodefaultpara o projeto do qual você deseja extrair imagens. - Criando seu próprio segredo de extração de imagem.
- Incluindo o segredo de extração de imagem na sua configuração de implementação ou na conta do serviço do projeto.
Entendendo como autorizar seu cluster a extrair imagens de um registro privado
Para fazer pull de imagens de um registro, seu cluster do Red Hat OpenShift on IBM Cloud 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, seu cluster é configurado para extrair imagens apenas dos namespaces de sua conta no IBM Cloud Container Registry e implementar contêineres dessas imagens para o projeto default do Red Hat OpenShift em seu
cluster. Se for necessário extrair imagens em outros projetos do cluster ou de outros registros de contêiner, seus próprios segredos de extração de imagem deverão ser configurados.
Configuração do segredo de extração de imagem padrão
Geralmente, seu cluster Red Hat OpenShift on IBM Cloud é configurado para extrair imagens de todos os domínios IBM Cloud Container Registry icr.io do projeto default do Red Hat OpenShift apenas. Consulte as perguntas
frequentes a seguir para saber mais sobre como extrair imagens em outros projetos ou contas do Red Hat OpenShift, restringir o acesso de extração ou por que seu cluster pode não ter os segredos de extração de imagem padrão.
- Como meu cluster está configurado para extrair imagens do projeto
defaultRed Hat OpenShift? - 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 este projeto Red Hat OpenShift. Usando segredos de extração de imagem, suas implementações podem extrair imagens (acesso somente leitura) do global e regional IBM Cloud Container Registry para implementar contêineres no projetodefaultdo Red Hat OpenShift.
- 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 de extração de imagens no projeto
defaultRed Hat OpenShift? - É possível verificar os segredos de extração de imagem efetuando login em seu cluster e executando
oc 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 extrair imagens em um projeto Red Hat OpenShift que não seja
default? - Não por padrão. Usando a configuração de cluster padrão, é possível implementar contêineres por meio de qualquer imagem que esteja armazenada em seu namespace do IBM Cloud Container Registry no projeto
defaultdo Red Hat OpenShift de seu cluster. Para usar essas imagens em quaisquer projetos do Red Hat OpenShift ou em outras contas da IBM Cloud, você tem a opção de copiar ou criar seus próprios segredos de extração de imagem. - Posso extrair imagens de uma conta IBM Cloud diferente?
- Sim, crie uma chave de API na conta do IBM Cloud que deseja usar. Em seguida, em cada projeto de cada cluster do qual você deseja extrair imagens por meio da conta do IBM Cloud, crie um segredo que mantenha 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 de API precisa ser de um ID de serviço? O que acontecerá 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 segredos de extração de imagens para os domínios de registro regionais e todos os domínios de registro. Qual deles devo usar?
- Anteriormente, o Red Hat OpenShift on IBM Cloud 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-iocriado automaticamente no projeto 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 aquele projeto 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 que eu copiar ou criar uma imagem secreta em outro projeto Red Hat OpenShift, terei terminado?
- 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 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 usa automaticamente o endpoint do serviço de nuvem privada. Não é necessário ativar o terminal em serviço de nuvem privada para seus clusters Red Hat OpenShift on IBM Cloud.
Atualizando os clusters existentes para usar o segredo de extração de imagem da chave de API
Novos clusters do Red Hat OpenShift on IBM Cloud 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.
Antes de Iniciar
-
Verfique se você tem as seguintes permissões: IBM Cloudfunção da plataforma de acesso Operador ou Administrador do IAM para Red Hat OpenShift on IBM Cloud. 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 oc 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 projeto
defaultRed Hat OpenShift.ibmcloud oc cluster pull-secret apply --cluster <cluster_name_or_ID>Quando 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.
oc get secrets | grep icr-ioExemplo de saída
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 de registro dos domínios que você usa.
-
Complete sua configuração usando uma das opções a seguir.
- Para extrair imagens em projetos do Red Hat OpenShift diferentes de
defaultou de outras contas da 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 projetos do Red Hat OpenShift diferentes de
Uso de um segredo de extração de imagem para acessar imagens em registros privados externos
Configure seu próprio segredo de extração de imagem em seu cluster para implementar contêineres em projetos do Red Hat OpenShift diferentes de default, use imagens que são armazenadas em outras da IBM Cloud ou use imagens que são
armazenadas 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 da imagem na conta do serviço do projeto 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 projetos do Red Hat OpenShift para os quais eles foram criados. Repita essas etapas para cada namespace no qual você desejar implementar contêineres.
Antes de Iniciar:
- Configure um namespace no IBM Cloud Container Registry e envie por push as imagens para esse namespace.
- Criar um cluster.
- Acesse o seu Red Hat OpenShift cluster.
Para usar seu próprio segredo de extração de imagem, escolha entre as opções a seguir:
- Copie o segredo de extração de imagem do projeto do Red Hat OpenShift padrão para outros projetos 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á criou um segredo de extração de imagem em seu projeto que 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 extração de imagem, como aquele que é criado automaticamente para o projeto default do Red Hat OpenShift, para outros projetos em seu cluster. Se você desejar usar diferentes credenciais de chave
de API do IBM Cloud IAM para esse projeto, como restringir o acesso a projetos específicos ou extrair imagens de outras contas do IBM Cloud, crie um segredo de extração de imagem em vez disso.
-
Liste os projetos do Red Hat OpenShift disponíveis em seu cluster ou crie um projeto para usar.
oc get projectsExemplo de saída
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePara criar um projeto
oc new-project <project_name> -
Liste os segredos de extração de imagem existentes no projeto
defaultRed Hat OpenShift para o IBM Cloud Container Registry.oc get secrets -n default | grep icr-ioExemplo de saída
all-icr-io kubernetes.io/dockerconfigjson 1 16d -
Copie o segredo de extração de imagem
all-icr-iodo projetodefaultpara o projeto de sua escolha. Os novos segredos de extração de imagem são denominados<project_name>-icr-<region>-io.oc get secret all-icr-io -n default -o yaml | sed 's/default/<new-project>/g' | oc create -n <new-project> -f - -
Verifique se os segredos foram criados com êxito.
oc get secrets -n <project_name> | grep icr-io -
Para implementar contêineres, inclua o segredo de extração de imagem em cada implementação ou na conta do serviço do projeto para que qualquer implementação no projeto possa extrair 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 do seu cluster, salve as credenciais de chave de API em um segredo de extração de imagem para cada cluster e projeto 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 projetos do Red Hat OpenShift disponíveis em seu cluster ou crie um projeto para usar no qual você deseja implementar contêineres por meio de suas imagens de registro.
oc get projectsExemplo de saída
default Active ibm-cert-store Active ibm-system Active kube-public Active kube-system ActivePara criar um projeto
oc new-project <project_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 fornecer ao ID de serviço uma descrição que ajude a recuperar o ID de serviço posteriormente, como a inclusão do nome do cluster e do projeto.
ibmcloud iam service-id-create <cluster_name>-<project>-id --description "Service ID for IBM Cloud Container Registry in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
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 de maneira semelhante ao seu ID de serviço e inclua o ID de serviço criado 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>-<project>-key <cluster_name>-<project>-id --description "API key for service ID <service_id> in Red Hat OpenShift on IBM Cloud cluster <cluster_name> project <project>" -
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 da chave de API no projeto do cluster. Repita essa etapa para cada projeto de cada cluster para cada domínio
icr.iodo qual você deseja extrair imagens.oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=iamapikey --docker-password=<api_key_value> --docker-email=<docker_email>--namespace <project>- Obrigatório. Especifique o projeto do Red Hat OpenShift de seu cluster que você usou para o nome do ID de 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
<project>peloprojectem que você criou o segredo de extração de imagem.oc get secrets --namespace <project>
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:
Para criar um segredo de extração de imagem:
-
Crie o segredo do Kubernetes para armazenar suas credenciais de registro privado.
oc --namespace <project> create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email>--namespace <project>- Obrigatório. O projeto do Red Hat OpenShift de seu cluster no qual você deseja usar o segredo e implementar os contêineres. Para listar os projetos disponíveis em seu cluster, execute
oc get projects. <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
<project>pelo nome do projeto em que você criou o segredo de extração de imagem.oc get secrets --namespace <project> -
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 projeto.
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 projeto 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 extração de imagem na conta do serviço do Kubernetes: use essa opção para conceder acesso às imagens em seu registro para todas as implementações nos projetos do Red Hat OpenShift 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 do serviço do Kubernetes para o projeto selecionado
Cada projeto do Red Hat OpenShift tem uma conta do serviço do Kubernetes que é denominada default. Dentro do projeto, é possível incluir o segredo de extração de imagem nessa conta do serviço para conceder acesso aos pods para
extrair imagens do seu registro. Implementações que não especificam uma conta de serviço usam automaticamente a conta de serviço default para este projeto Red Hat OpenShift.
-
Verifique se um segredo de extração de imagem já existe para sua conta de serviço padrão.
oc describe serviceaccount default -n <project_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.
oc patch -n <project_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.
oc patch -n <project_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.
oc describe serviceaccount default -n <project_name>Exemplo de saída
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 projeto da conta de serviço executandooc get secrets -n project. -
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/<project>/<image>:<tag> -
Crie o pod no cluster, aplicando o arquivo de configuração
mypod.yaml.oc apply -f mypod.yaml
Configurando um cluster para extrair o software autorizado
É possível configurar seu cluster do Red Hat OpenShift on IBM Cloud 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 o cluster e incluir esse
segredo de extração de imagem na conta do serviço do Kubernetes de cada projeto no qual se deseja implementar esse software autorizado.
Antes de começar: acesse o seu cluster do Red Hat OpenShift.
-
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 Acessar 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 projeto que deseja implementar seus contêineres autorizados, crie um segredo de extração de imagem para que seja possível 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.oc 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 <project> -
Inclua o segredo de extração de imagem na conta do serviço do namespace para que qualquer contêiner no projeto possa usar a chave de autorização para extrair as imagens autorizadas. Para obter mais informações, consulte Usando o segredo de extração de imagem para implementar contêineres.
oc patch -n <project> serviceaccount/default --type='json' -p='[{"op":"add","path":"/imagePullSecrets/-","value":{"name":"entitled-cp-icr-io"}}]' -
Crie um pod no projeto que construa um contêiner por meio de uma imagem no registro autorizado.
oc run <pod_name> --image=cp.icr.io/<image_name> -n <project> --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.
oc get pod <pod_name> -n <project>
Imaginando o que fazer em seguida? É possível configurar o repositório de 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.
Incluindo um registro privado no segredo de extração global
Nós de trabalho RHEL
Em clusters que usam apenas nós de trabalho RHEL, é possível configurar um segredo de extração de imagem global que cada nó de trabalho no cluster pode usar para extrair imagens de um registro privado.
Por padrão, seu cluster Red Hat OpenShift on IBM Cloud tem um segredo de extração de imagem global para os registros a seguir, de modo que os componentes padrão do Red Hat OpenShift podem ser implementados.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Não substitua o segredo de extração global por um segredo de extração que não tenha credenciais para os registros padrão do Red Hat. Se você fizer, os componentes padrão Red Hat OpenShift que estão instalados em seu cluster, como o OperatorHub, podem falhar porque eles não conseguem fazer pull de imagens desses registros.
Antes de Iniciar:
- Faça o download do pacote de linha de comando do processador
jqJSON. Ojqé usado para combinar o valor JSON do segredo de extração global padrão com o segredo de extração de registro privado que você deseja incluir. - Acesse o seu Red Hat OpenShift cluster.
Para incluir registros privados, edite o pull-secret global no projeto openshift-config.
-
Crie um valor de segredo que mantenha as credenciais para acessar o seu registro privado e armazene o valor de segredo decodificado em um arquivo JSON. Ao criar o valor de segredo, as credenciais são automaticamente codificadas para base64. Ao usar a opção
--dry-run, somente o valor de segredo é criado e nenhum objeto de segredo é criado em seu cluster. O valor de segredo decodificado é, então, armazenado em um arquivo JSON para uso posterior em seu segredo de extração global.oc create secret docker-registry <secret_name> --docker-server=<registry_URL> --docker-username=<docker_username> --docker-password=<docker_password> --docker-email=<docker_email> --dry-run=true --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > myregistryconfigjson--namespace <project>- Obrigatório. O projeto do Red Hat OpenShift de seu cluster no qual você deseja usar o segredo e implementar os contêineres. Para listar os projetos disponíveis em seu cluster, execute
oc get ns. <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. --dry-run=true- Inclua essa opção para criar apenas o valor secreto e não para criar e armazenar o objeto secreto em seu cluster.
--output="jsonpath={.data.\.dockerconfigjson}"- Obtenha somente o valor
.dockerconfigjsonpor meio da seção de dados do segredo do Kubernetes. | base64 --decode > myregistryconfigjson- Faça download dos dados de segredo decodificado para um arquivo local
myregistryconfigjson.
-
Recupere o valor de segredo decodificado do segredo de extração global padrão e armazene o valor em um arquivo
dockerconfigjson.oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decode > dockerconfigjson -
Combine o arquivo do segredo de extração de registro privado
myregistryconfigjsontransferido por download com o arquivo do segredo de extração global padrãodockerconfigjson.jq -s '.[0] * .[1]' dockerconfigjson myregistryconfigjson > dockerconfigjson-merged -
Atualize o segredo de extração global com o arquivo
dockerconfigjson-mergedcombinado.oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=dockerconfigjson-merged -
Verifique se o segredo de extração global está atualizado. Verifique se o seu registro privado cada um dos registros padrão do Red Hat estão na saída do comando a seguir.
oc get secret pull-secret -n openshift-config --output="jsonpath={.data.\.dockerconfigjson}" | base64 --decodeExemplo de saída
{ "auths": { "cloud.openshift.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "quay.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.connect.redhat.com": { "auth": "<encoded_string>", "email": "email@example.com" }, "registry.redhat.io": { "auth": "<encoded_string>", "email": "email@example.com" }, "<private_registry>": { "username": "iamapikey", "password": "<encoded_string>", "email": "email@example.com", "auth": "<encoded_string>" } } } -
Para selecionar as mudanças de configuração globais, recarregue todos os nós do trabalhador em seu cluster.
-
Anote o ID dos nós do trabalhador em seu cluster.
ibmcloud oc worker ls -c <cluster_name_or_ID> -
Para Clusters Clássicos Recarregar cada nó do trabalhador Você pode recarregar vários nós de trabalho incluindo várias opções de
-w, mas certifique-se de deixar um número suficiente de nós de trabalho em execução ao mesmo tempo para que seus aplicativos evitem uma interrupção.ibmcloud oc worker reload -c <cluster_name_or_ID> -w <workerID_1> -w <workerID_2> -
Para clusters de VPC Substitua cada nó do trabalhador Antes de começar, certifique-se de que seu cluster tenha outros nós do trabalhador para que seus pods possam ser reprogramados e continuem sendo executados.
ibmcloud oc worker replace --cluster <cluster_name_or_ID> --worker <worker_node_ID>
-
-
Depois que os nós do trabalhador estiverem novamente em um estado funcional, verifique se o segredo de extração global é atualizado em um nó do trabalhador.
-
Inicie um pod de depuração para fazer login em um nó do trabalhador. Use o IP privado que você recuperou anteriormente para o
<node_name>.oc debug node/<node_name> -
Mude o diretório-raiz para o host para que seja possível visualizar arquivos no nó do trabalhador.
chroot /host -
Verifique se o arquivo de configuração do Docker tem as credenciais de registro que correspondem ao segredo de extração global que você configurou.
vi /.docker/config.json
-
Atualização do segredo global de pull
Nós de trabalho RHCOS Nós de trabalho RHEL
Em clusters que usam workers do RHCOS ou uma combinação de workers do RHCOS e do RHEL, você pode concluir as etapas a seguir para atualizar o segredo de pull global no seu cluster Red Hat OpenShift on IBM Cloud.
Por padrão, seu cluster Red Hat OpenShift on IBM Cloud tem um segredo de extração de imagem global para os registros a seguir, de modo que os componentes padrão do Red Hat OpenShift podem ser implementados.
cloud.openshift.comquay.ioregistry.connect.redhat.comregistry.redhat.io
Não substitua o segredo de extração global por um segredo de extração que não tenha credenciais para os registros padrão do Red Hat. Se você fizer, os componentes padrão Red Hat OpenShift que estão instalados em seu cluster, como o OperatorHub, podem falhar porque eles não conseguem fazer pull de imagens desses registros.
- Crie um segredo que tenha as credenciais do registro que você deseja usar.
oc create secret docker-registry docker-auth-secret \ --docker-server=REGISTRY \ --docker-username=USERNAME \ --docker-password=PASSWORD \ --namespace kube-system - Crie um DaemonSet para aplicar o segredo em todos os nós de trabalho.
ocp_release_pull_secret_image=$(oc get ds -n openshift-dns node-resolver -o jsonpath='{.spec.template.spec.containers[0].image}') cat << EOF | oc create -f - apiVersion: apps/v1 kind: DaemonSet metadata: name: update-docker-config namespace: kube-system labels: app: update-docker-config spec: selector: matchLabels: name: update-docker-config template: metadata: labels: name: update-docker-config spec: initContainers: - command: ["/bin/sh", "-c"] args: - > echo "Checking if RHEL or RHCOS host"; [[ -s /docker-config/.docker/config.json ]] && CONFIG_PATH=/docker-config/.docker || CONFIG_PATH=/docker-config/root/.docker; echo "Backing up or restoring config.json"; [[ -s \$CONFIG_PATH/config.json ]] && cp \$CONFIG_PATH/config.json \$CONFIG_PATH/config.json.bak || cp \$CONFIG_PATH/config.json.bak \$CONFIG_PATH/config.json; echo "Merging secret with config.json"; /host/usr/bin/jq -s '.[0] * .[1]' \$CONFIG_PATH/config.json /auth/.dockerconfigjson > \$CONFIG_PATH/config.tmp; mv \$CONFIG_PATH/config.tmp \$CONFIG_PATH/config.json; echo "Sending signal to reload crio config"; pidof crio; kill -1 \$(pidof crio) image: ${ocp_release_pull_secret_image} imagePullPolicy: IfNotPresent name: updater resources: {} securityContext: privileged: true volumeMounts: - name: docker-auth-secret mountPath: /auth - name: docker mountPath: /docker-config - name: bin mountPath: /host/usr/bin - name: lib64 mountPath: /lib64 containers: - resources: requests: cpu: 0.01 image: ${ocp_release_pull_secret_image} name: sleepforever command: ["/bin/sh", "-c"] args: - > while true; do sleep 100000; done hostPID: true volumes: - name: docker-auth-secret secret: secretName: docker-auth-secret - name: docker hostPath: path: / - name: bin hostPath: path: /usr/bin - name: lib64 hostPath: path: /lib64 hostPathType: Directory EOF - Verifique se os pods estão em execução.
oc get daemonset -n kube-system update-docker-config
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 depois que os nós de trabalho são recarregados ou reiniciados.
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.