Como configurar o Container Registry ou o Artifact Registry para clusters privados do GKE

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Nesta página, descrevemos como configurar entradas DNS para usar o Container Registry ou o Artifact Registry com um cluster particular do Google Kubernetes Engine e o VPC Service Controls.

Essas etapas só serão necessárias se o cluster particular do GKE usar o Artifact Registry ou o Container Registry para armazenamento de contêineres e você ainda não tiver configurado o roteamento dos domínios de registro pkg.dev ou gcr.io para restricted.googleapis.com.

Embora os clusters particulares em perímetros de serviço possam usar o Container Registry ou o Artifact Registry sem o VIP restrito, você não precisa fazer isso. Se o VIP restrito não for usado, os dados poderão ser exfiltrados de um serviço compatível para um não compatível.

Antes de começar

Antes de criar um perímetro de serviço, configure um novo cluster privado ou identifique os clusters particulares atuais que você quer proteger.

Além disso, é preciso permitir a saída para 199.36.153.4/30 na porta 443. Normalmente, uma rede VPC tem uma regra implícita que permite todo o tráfego de saída para qualquer destino. No entanto, se você tiver uma regra que negue esse tráfego, será necessário criar uma regra de firewall de saída para permitir o tráfego TCP na porta 443 para 199.36.153.4/30.

Como configurar DNS

Para dar suporte a clusters privados do GKE que usam o Container Registry ou o Artifact Registry dentro de um perímetro de serviço, primeiro é necessário configurar seu servidor DNS para que as solicitações enviadas aos endereços de registro sejam resolvidas para restricted.googleapis.com, o VIP restrito. É possível fazer isso usando zonas de DNS particular do Cloud DNS.

  1. Criar uma zona particular gerenciada

    gcloud beta dns managed-zones create ZONE_NAME \
        --visibility=private \
        --networks=https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK \
        --description=DESCRIPTION \
        --dns-name=REGISTRY_DOMAIN \
        --project=PROJECT_ID
    

    Em que:

    • ZONE_NAME é um nome para a zona que você está criando. Por exemplo, registry; Esse nome será usado em cada uma das etapas a seguir.

    • PROJECT_ID é o código do projeto que hospeda seu cluster particular do GKE.

    • NETWORK é uma lista opcional de nomes da rede de clusters de que você quer redirecionar solicitações.

    • DESCRIPTION é uma descrição legível da zona gerenciada.

    • REGISTRY_DOMAIN é o domínio do registro:

      • pkg.dev para o Artifact Registry
      • gcr.io para o Container Registry
  2. Inicie uma transação.

    gcloud dns record-sets transaction start \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    Em que:

    • ZONE_NAME é o nome da zona que você criou na primeira etapa.

    • PROJECT_ID é o código do projeto que hospeda seu cluster particular do GKE.

  3. Adicione um registro CNAME ao seu registro.

    gcloud dns record-sets transaction add \
      --name=*.REGISTRY_DOMAIN. \
      --type=CNAME REGISTRY_DOMAIN. \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    Em que:

    • ZONE_NAME é o nome da zona que você criou na primeira etapa.

    • PROJECT_ID é o código do projeto que hospeda seu cluster particular do GKE.

    • REGISTRY_DOMAIN é o domínio do registro:

      • pkg.dev para o Artifact Registry
      • gcr.io para o Container Registry
  4. Adicione um registro A ao VIP restrito.

    gcloud dns record-sets transaction add \
      --name=REGISTRY_DOMAIN. \
      --type=A 199.36.153.4 199.36.153.5 199.36.153.6 199.36.153.7 \
      --zone=ZONE_NAME \
      --ttl=300 \
      --project=PROJECT_ID
    

    Em que:

    • ZONE_NAME é o nome da zona que você criou na primeira etapa.

    • PROJECT_ID é o código do projeto que hospeda seu cluster particular do GKE.

    • REGISTRY_DOMAIN é o domínio do registro:

      • pkg.dev para o Artifact Registry
      • gcr.io para o Container Registry
  5. Execute a transação.

    gcloud dns record-sets transaction execute \
      --zone=ZONE_NAME \
      --project=PROJECT_ID
    

    Em que:

    • ZONE_NAME é o nome da zona que você criou na primeira etapa.

    • PROJECT_ID é o código do projeto que hospeda seu cluster particular do GKE.

Como configurar o perímetro de serviço

Depois de configurar os registros DNS, crie um novo perímetro de serviço ou atualize um perímetro atual e adicione o serviço do Container Registry ou do Artifact Registry à lista de serviços que você quer proteger usando o perímetro de serviço.

Além disso:

  • Adicione outros serviços compatíveis que você usa com o registro ao perímetro de serviço, como o Cloud Build, o Container Analysis e a autorização binária.
  • Para o Container Registry, também é preciso adicionar o Cloud Storage ao perímetro de serviço.

Como verificar se o perímetro funciona

Depois de configurar o perímetro de serviço, verifique a configuração implantando um contêiner de amostra.

Crie uma implantação no cluster privado com o seguinte comando:

Artifact Registry

kubectl create deployment hello-server --image=us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

Container Registry

kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0

Verifique o status do pod com o comando:

kubectl get pods

O comando retorna uma tabela semelhante ao exemplo a seguir. Se a imagem foi extraída e implantada com sucesso, o status do pod será RUNNING.

NAME                            READY   STATUS    RESTARTS   AGE
hello-server-dbd86c8c4-h5wsf   1/1     Running   0          45s

Use o comando kubectl describe pod para ver mais detalhes sobre a implantação. Para o pod no exemplo anterior, o comando é:

kubectl describe pod hello-server-dbd86c8c4-h5wsf