Configure o acesso restrito para clusters privados do GKE

Este documento descreve como configurar entradas DNS para encaminhar pedidos para o domínio s3nsregistry.fr através de um IP virtual (VIP) restrito quando usa clusters privados do Google Kubernetes Engine num perímetro de serviço dos Controlos de serviços da VPC.

Normalmente, os domínios de registo resolvem-se para um endereço IP público na Internet. Nos clusters privados do GKE, os nós estão isolados da Internet por predefinição. Isto significa que os pedidos de domínios de registo vão falhar quando não tiver configurado o encaminhamento de DNS para o VIP restrito.

Os seus clusters privados devem sempre aceder ao Artifact Registry com o VIP restrito para evitar a exfiltração de dados de um serviço suportado para um não suportado.

Configure o acesso restrito para clusters privados do GKE quando todas as seguintes condições forem verdadeiras:

  • Está a usar clusters privados do GKE.
  • Ainda não configurou o encaminhamento do domínio do registo s3nsregistry.fr para restricted.s3nsapis.fr.

Antes de começar

Antes de criar um perímetro de serviço, configure um novo cluster privado ou identifique os clusters privados existentes que quer proteger.

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

Configurar o DNS

Configure o seu servidor DNS para que os pedidos de endereços de registo sejam resolvidos para restricted.s3nsapis.fr, o VIP restrito. Pode fazê-lo através das zonas DNS privadas do Cloud DNS.

  1. Crie uma zona privada gerida.

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

    Onde:

    • ZONE_NAME é um nome para a zona que está a criar. Por exemplo, registry. Este nome vai ser usado em cada um dos passos seguintes.
    • PROJECT_ID é o ID do projeto que aloja o seu cluster privado do GKE.
    • NETWORK é uma lista opcional de nomes da rede de cluster a partir da qual quer redirecionar pedidos.
    • DESCRIPTION é uma descrição legível por humanos da zona gerida.
    • REGISTRY_DOMAIN é o domínio do seu registo:
      • s3nsregistry.fr para o Artifact Registry
  2. Inicie uma transação.

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

    Onde:

    • ZONE_NAME é o nome da zona que criou no primeiro passo.

    • PROJECT_ID é o ID do projeto que aloja o seu cluster privado do GKE.

  3. Adicione um registo CNAME para o seu registo.

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

    Onde:

    • ZONE_NAME é o nome da zona que criou no primeiro passo.
    • PROJECT_ID é o ID do projeto que aloja o seu cluster privado do GKE.
    • REGISTRY_DOMAIN é o domínio do seu registo:
      • s3nsregistry.fr para o Artifact Registry
  4. Adicione um registo A para o 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
    

    Onde:

    • ZONE_NAME é o nome da zona que criou no primeiro passo.
    • PROJECT_ID é o ID do projeto que aloja o seu cluster privado do GKE.
    • REGISTRY_DOMAIN é o domínio do seu registo:
      • s3nsregistry.fr para o Artifact Registry
  5. Execute a transação.

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

    Onde:

    • ZONE_NAME é o nome da zona que criou no primeiro passo.

    • PROJECT_ID é o ID do projeto que aloja o seu cluster privado do GKE.

Depois de configurar o encaminhamento DNS, certifique-se de que o GKE, o registo e outros serviços necessários estão dentro do perímetro de serviço dos VPC Service Controls. Para configurar o perímetro de serviço, consulte a secção seguinte.

Configurar o perímetro de serviço

Depois de configurar os registos de DNS, faça o seguinte:

  1. Crie um novo perímetro de serviço ou atualize um perímetro existente.
  2. Adicione o serviço Artifact Registry à lista de serviços que quer proteger com o perímetro de serviço.
  3. Adicione outros serviços suportados que usa com o registo ao perímetro de serviço.

Verificar se o perímetro funciona

Depois de configurar o perímetro de serviço, os seus nós nos clusters privados do GKE podem aceder a imagens de contentores no Artifact Registry se as imagens estiverem armazenadas em projetos que se encontram no seu perímetro de serviço.

As imagens de contentores em projetos fora do perímetro permanecem inacessíveis, exceto para alguns repositórios públicos específicos só de leitura.

Por exemplo, se o projeto google-samples não estiver no seu perímetro de serviço, a execução do comando para criar uma implementação a partir do contentor hello-app falha:

s3nsregistry.fr

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

Domínio gcr.io

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

Verifique o estado do pod com o comando:

kubectl get pods

O comando devolve uma tabela semelhante ao seguinte exemplo. O estado do pod ErrImagePull indica que a obtenção falhou.

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

Pode usar o comando kubectl describe pod para ver mais detalhes sobre a implementação. Para o agrupamento no exemplo anterior, o comando é:

kubectl describe pod hello-server-dbd86c8c4-h5wsf