Configure um registo de contentores privado

Esta página explica como configurar um servidor de registo de contentores existente para o Google Distributed Cloud (apenas software) para VMware.

Esta página destina-se a administradores, arquitetos e operadores que configuram, monitorizam e gerem a infraestrutura técnica. Para saber mais sobre as funções comuns e as tarefas de exemplo a que fazemos referência no Google Cloud conteúdo, consulte o artigo Funções e tarefas comuns do utilizador do GKE.

Vista geral

Por predefinição, durante a criação ou a atualização do cluster, o Google Distributed Cloud extrai imagens do sistema de gcr.io/gke-on-prem-release através da conta de serviço de acesso aos componentes. Opcionalmente, pode fornecer o seu próprio servidor de registo de contentores para que as imagens do sistema sejam extraídas do seu servidor de registo privado.

O Google Distributed Cloud não suporta registos de contentores não seguros. Quando inicia o servidor do registo de contentores, tem de fornecer um certificado e uma chave. O certificado pode ser assinado por uma autoridade de certificação (CA) pública ou pode ser autoassinado.

Crie um servidor de registo de contentores

Para saber como criar um servidor de registo de contentores, consulte o artigo Execute um registo acessível externamente na documentação do Docker.

Configure o registo

Para usar um registo de contentores privado, pode usar a gkectlferramenta de linha de comandos ou o Terraform.

gkectl

  1. Adicione a secção privateRegistry ao ficheiro de configuração do cluster de administrador antes de criar o cluster.

    Quando esta secção está preenchida:

    • Quando executa o comando gkectl prepare antes da criação ou da atualização do cluster, o comando extrai as imagens do ficheiro TAR especificado no campo bundlePath no ficheiro de configuração do cluster de administrador e envia as imagens para o servidor de registo privado.

    • Durante a criação ou a atualização do cluster, as imagens do sistema são extraídas do servidor de registo privado.

  2. Se a sua rede estiver protegida por um servidor proxy, preencha a secção proxy.

Terraform

  1. Siga os passos no separador Terraform em Crie um cluster de administrador para preencher o ficheiro de configuração do cluster de administrador.

  2. Adicione o seguinte ao ficheiro de configuração do cluster de administrador:

    private_registry_config {
      address = "ADDRESS"
      ca_cert = "CA_CERT"
    }
    

    Substitua o seguinte:

    • ADDRESS: o endereço IP ou o FQDN (nome do domínio totalmente qualificado) do computador que executa o seu registo privado.

    • CA_CERT: a chave pública do certificado da CA para o registo privado.

  3. Se a sua rede estiver protegida por um servidor proxy, adicione o seguinte:

    proxy {
      url: "PROXY_SERVER_ADDRESS"
      no_proxy: "BYPASS_LIST"
    }
    

    Substitua o seguinte:

    • PROXY_SERVER_ADDRESS: o endereço HTTP do seu servidor proxy. Inclua o número da porta, mesmo que seja o mesmo que a porta predefinida do esquema.

    • BYPASS_LIST: uma lista separada por vírgulas de endereços IP, intervalos de endereços IP, nomes de anfitriões e nomes de domínios que não devem passar pelo servidor proxy.

    Exemplo:

    url: "http://my-proxy.example.local:80"
    no_proxy: "192.0.2.0/24,my-host.example.local,198.51.100.0"
    

    Quando o Google Distributed Cloud envia um pedido para um destes endereços, anfitriões ou domínios, o pedido ignora o servidor proxy e é enviado diretamente para o destino.

  4. Continue com os passos no separador Terraform em Crie um cluster de administrador para validar o ficheiro de configuração e o plano do Terraform e, em seguida, crie o cluster de arranque.

  5. Quando executa o comando gkectl register bootstrap, o gkectl pede-lhe que introduza o nome de utilizador e, em seguida, a palavra-passe do registo privado.

Durante a criação do cluster, as imagens do sistema são extraídas do seu servidor de registo privado.

Limitações com clusters avançados e o pacote completo

Estão disponíveis dois pacotes do Google Distributed Cloud: completo e normal. Para determinar que pacote está na sua estação de trabalho de administração, verifique o campo bundlePath no ficheiro de configuração do cluster de administração. Se o nome do ficheiro terminar em -full, o pacote completo está na estação de trabalho do administrador. Se o nome do ficheiro não terminar em -full, o pacote normal está na estação de trabalho do administrador.

Se criou a estação de trabalho de administrador com o comando gkeadm, o comando cria a VM da estação de trabalho de administrador com o pacote completo e configura o campo bundlePath no ficheiro de configuração do cluster de administrador.

Se o cluster avançado estiver ativado, existem limitações na utilização do pacote completo com um registo privado, da seguinte forma:

  • Versão 1.31: o pacote completo não é suportado com um registo privado. Para usar um registo privado num cluster avançado:

    1. Transfira o pacote de tamanho normal para a estação de trabalho do administrador.
    2. Atualize o nome do ficheiro no campo bundlePath no ficheiro de configuração do cluster de administrador.
  • Versão 1.32: a utilização do pacote completo é suportada, mas o comando gkectl prepare extrai imagens de gcr.io/gke-on-prem-release em vez do ficheiro tar. No entanto, o comando envia as imagens para o seu registo privado, para que as imagens do sistema sejam extraídas do seu registo privado durante a criação ou a atualização do cluster.

Diferenças entre clusters normais e clusters avançados

O cluster avançado introduz várias diferenças importantes em comparação com os clusters padrão:

  • Quando usa um registo privado, as imagens parecem ser extraídas de gcr.io e não do nome do anfitrião do seu registo privado. Esta alteração é esperada, mesmo que as imagens sejam extraídas do seu servidor de registo privado.
  • As obtenções de imagens usam credenciais do ficheiro /etc/containerd/config.toml em cada máquina que se liga ao registo privado, em vez do segredo private-registry-creds no cluster.
  • Para todas as imagens gcr.io, o cluster tenta primeiro extrair do registo privado. Se a imagem não estiver no registo privado, o sistema extrai-a de gcr.io através da Internet. Para parar esta alternativa, configure noProxy ou use regras de firewall para bloquear o tráfego gcr.io.

Para verificar se as imagens são extraídas da origem correta, consulte o artigo Verifique se as imagens são extraídas do servidor de registo.

Verifique se as imagens são extraídas do seu servidor de registo

A forma como verifica se as imagens estão a ser extraídas do servidor de registo depende de o cluster avançado estar ativado ou não.

  • Se o cluster avançado não estiver ativado, execute o seguinte comando:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
        --all-namespaces -o jsonpath="{.items[*].spec['initContainers', 'containers'][*].image}"
    

    Substitua ADMIN_CLUSTER_KUBECONFIG pelo caminho do ficheiro kubeconfig para o cluster de administrador.

    O resultado deste comando apresenta todas as imagens no seu cluster. Pode verificar se todas as imagens do Google Distributed Cloud são do seu próprio servidor de registo.

  • Se o cluster avançado estiver ativado, siga estes passos:

    Pode determinar se o containerd está a extrair imagens do seu registo local examinando o conteúdo de um ficheiro denominado config.toml, conforme mostrado nos passos seguintes:

    1. Inicie sessão num nó e examine o conteúdo do ficheiro /etc/containerd/config.toml.
    2. Verifique o campo plugins."io.containerd.grpc.v1.cri".registry.mirrors do ficheiro config.toml para ver se o seu servidor de registo está listado no campo endpoint.

      Segue-se um excerto de um exemplo de ficheiro config.toml.

      version = 2
      root = "/var/lib/containerd"
      state = "/run/containerd"
      ...
      [plugins."io.containerd.grpc.v1.cri".registry]
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."gcr.io"]
      [plugins."io.containerd.grpc.v1.cri".registry.configs."privateregistry2.io".tls]
      ca_file = '/etc/containerd/certs.d/privateregistry2.io/ca.crt'
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
      [plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
      endpoint = ["http://privateregistry.io", "http://privateregistry2.io"]
      ...
      
    3. Se o seu espelho do registo aparecer no campo endpoint, significa que o nó está a obter imagens do seu espelho do registo e não do Artifact Registry.