Criar projetos do Harbor

No Harbor, um projeto serve como uma unidade lógica para organizar e gerenciar uma coleção de imagens de contêiner. Ele oferece uma maneira de agrupar artefatos relacionados e aplicar políticas, controles de acesso e regras de replicação específicos a toda a coleção. Não é possível enviar ou extrair imagens para o Harbor antes que um projeto seja criado.

Antes de começar

Antes de começar, inicialize sua identidade com o registro do Harbor fazendo login na interface do Harbor pelo menos uma vez.

Papel do IAM obrigatório

Para criar projetos do Harbor e gerenciar namespaces de imagem, entre em contato com o administrador do projeto do IAM para solicitar o papel de Criador de projetos do Harbor (harbor-project-creator), que permite criar, receber e assistir projetos do Harbor no namespace do projeto. Esse papel inclui as permissões necessárias para definir novos namespaces de imagem, para que você possa estabelecer limites de segurança para seus aplicativos em contêineres.

Criar um projeto do Harbor

Crie um projeto do Harbor usando o console do GDC, a CLI gdcloud ou a API.

Console

No console do GDC, siga estas etapas:

  1. Clique no link Harbor Container Registry na seção CI/CD no menu de navegação.
  2. Clique em Criar um projeto do Harbor.
  3. Insira o nome do projeto.
  4. Opcional: a verificação de vulnerabilidades é ativada por padrão. Para desativar a verificação automática de vulnerabilidades em projetos do Harbor, clique no botão Ativar verificação de vulnerabilidades para o projeto. Para mais informações, consulte Verificar vulnerabilidades.
  5. Clique em Criar.
  6. Uma mensagem de confirmação aparece informando que o projeto foi criado.
  7. Depois que o projeto do Harbor for criado, faça login na interface do Harbor para confirmar que você consegue visualizar o projeto.

gdcloud

Crie o projeto do Harbor:

  gdcloud harbor harbor-projects create HARBOR_PROJECT \
    --project=PROJECT \
    --instance=INSTANCE

Substitua:

  • HARBOR_PROJECT: o nome do projeto do Harbor a ser criado.
  • PROJECT: o nome do projeto do GDC.
  • INSTANCE: o nome da instância.

API

O console do GDC e a CLI gdcloud definem o criador do projeto do Harbor como sua conta de usuário. Ao usar a API, é necessário definir o campo spec.creatorSubject por conta própria.

  1. Crie um recurso personalizado HarborInstanceProject no servidor de API de gerenciamento zonal. Não é possível alterar o campo creatorSubject ou autoScan depois de criar o recurso. Portanto, verifique os dois valores antes de criá-lo.

    kubectl --kubeconfig MANAGEMENT_API_SERVER create -f - <<EOF
    apiVersion: artifactregistry.gdc.goog/v1
    kind: HarborInstanceProject
    metadata:
      name: INSTANCE-HARBOR_PROJECT
      namespace: PROJECT
    spec:
      projectName: HARBOR_PROJECT
      harborInstanceRef:
        name: INSTANCE
      creatorSubject:
        apiGroup: rbac.authorization.k8s.io
        kind: User
        name: HARBOR_USERNAME
      autoScan: true
    EOF
    

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho para o arquivo kubeconfig do servidor de API de gerenciamento zonal. Para mais informações, consulte Alternar para um contexto zonal.
    • INSTANCE: o nome da instância do registro do Harbor.
    • HARBOR_PROJECT: o nome do projeto do Harbor a ser criado.
    • PROJECT: o nome do projeto do GDC que contém a instância do registro do Harbor.
    • HARBOR_USERNAME: seu nome de usuário do Harbor, exatamente como mostrado no menu de usuário da interface do Harbor depois que você faz login. Esse usuário se torna o administrador do projeto do Harbor. Use o nome de usuário de uma pessoa, não uma conta de serviço. Para mais informações, consulte Antes de começar.

    O campo autoScan ativa a verificação automática de vulnerabilidades em imagens enviadas ao projeto. Para desativar a verificação automática, defina-a como false. Para mais informações, consulte Verificar vulnerabilidades.

  2. Verifique se o projeto do Harbor foi criado e se o criador foi atribuído:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    A coluna PROJECTCREATEDSTATUS mostra Created, e a coluna PROJECTSUBJECTASSIGNEDSTATUS mostra SubjectAssigned.

    Se a coluna PROJECTSUBJECTASSIGNEDSTATUS mostrar SubjectAssignError, verifique a mensagem de condição:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      describe harborinstanceproject INSTANCE-HARBOR_PROJECT \
      -n PROJECT
    

    Uma mensagem user ... not found significa que o usuário especificado no campo creatorSubject ainda não fez login na interface do Harbor. O serviço do Harbor tenta novamente a cada 30 segundos, então o status muda para SubjectAssigned depois que o usuário faz login.

Corrigir um projeto do Harbor criado sem um criador

Se um recurso HarborInstanceProject em qualquer projeto da sua organização não definir o campo spec.creatorSubject, o serviço do Harbor vai parar de processar mudanças nos recursos do Harbor em toda a organização. Os sintomas incluem instâncias do Harbor que não ficam prontas, novos projetos do Harbor que permanecem sem status e extrações de imagem que falham com erros x509: certificate signed by unknown authority.

Para corrigir esse problema, você precisa do papel de Administrador de instâncias do Harbor (harbor-instance-admin) no projeto que contém o recurso afetado. Se você não tiver esse papel, peça a um usuário que o tenha para concluir essas etapas. Se você não souber qual recurso foi afetado, entre em contato com o operador de infraestrutura (IO, na sigla em inglês), que pode encontrá-lo nos registros do serviço do Harbor.

  1. Verifique se o recurso HarborInstanceProject afetado define o campo spec.creatorSubject:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT -o jsonpath='{.spec.creatorSubject}'
    

    Substitua:

    • MANAGEMENT_API_SERVER: o caminho para o arquivo kubeconfig do servidor de API de gerenciamento zonal. Para mais informações, consulte Alternar para um contexto zonal.
    • HARBOR_INSTANCE_PROJECT: o nome do recurso HarborInstanceProject. Os recursos criados na guia API nesta página são chamados de INSTANCE-HARBOR_PROJECT.
    • PROJECT: o nome do projeto do GDC que contém o recurso.

    Uma saída vazia significa que o campo não está definido.

  2. Confirme o nome de usuário do Harbor a ser atribuído como administrador do projeto do Harbor com o proprietário do projeto do GDC. Como não é possível alterar o campo spec.creatorSubject depois de defini-lo, verifique o nome de usuário antes de adicionar o campo a cada recurso afetado:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      patch harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT --type merge \
      -p '{"spec":{"creatorSubject":{"apiGroup":"rbac.authorization.k8s.io","kind":"User","name":"HARBOR_USERNAME"}}}'
    

    Substitua HARBOR_USERNAME pelo nome de usuário do Harbor do usuário a ser atribuído como administrador do projeto do Harbor. Esse papel pode excluir imagens e gerenciar membros do projeto. O usuário precisa ter feito login na interface do Harbor pelo menos uma vez, e o nome de usuário precisa corresponder exatamente ao nome mostrado no menu de usuário da interface do Harbor.

  3. Verifique se o criador foi atribuído:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      get harborinstanceproject HARBOR_INSTANCE_PROJECT \
      -n PROJECT
    

    Depois que todos os recursos afetados forem corrigidos, o serviço do Harbor será reiniciado e retomará o processamento das alterações em cerca de 10 minutos, e a coluna PROJECTSUBJECTASSIGNEDSTATUS mostrará SubjectAssigned. Se as extrações de imagem do Harbor ainda falharem após 15 minutos, entre em contato com o IO. Informe ao IO os nomes e projetos dos recursos que você corrigiu para que ele possa verificar outros recursos afetados e reiniciar o serviço do Harbor, se necessário.

A seguir

Depois de criar um projeto do Harbor, configure os clientes do Docker e do Helm para se conectarem ao registro do Harbor: