En esta página, se describe cómo configurar entradas de DNS para usar Container Registry o Artifact Registry con un clúster privado de Google Kubernetes Engine y los Controles del servicio de VPC. Estos pasos solo son necesarios si el clúster privado de GKE usa uno de estos servicios para el almacenamiento de contenedores.
Antes de comenzar
Antes de crear un perímetro de servicio, configura un clúster privado nuevo o identifica los clústeres privados existentes que deseas proteger.
Además, debes permitir la salida a 199.36.153.4/30 en el puerto 443. Por lo general, una red de VPC tiene una regla implícita que permite todo el tráfico de salida a cualquier destino. Sin embargo, si tienes una regla que rechaza dicho tráfico, debes crear una regla de firewall de salida para permitir el tráfico de TCP en el puerto 443 a 199.36.153.4/30.
Configura DNS
Para admitir clústeres privados de GKE que usan Container Registry o Artifact Registry dentro de un perímetro de servicio, primero debes configurar el servidor DNS a fin de que las solicitudes a las direcciones de registro se resuelvan en restricted.googleapis.com
, la VIP restringida. Para hacerlo, usa las zonas de DNS privadas de Cloud DNS.
Crea una zona privada administrada.
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
En el ejemplo anterior, se ilustra lo siguiente:
ZONE_NAME es un nombre para la zona que estás creando. Por ejemplo,
registry
. Este nombre se usará en cada uno de los siguientes pasos.PROJECT_ID es el ID del proyecto que aloja el clúster privado de GKE.
NETWORK es el nombre de la red del clúster de la que deseas redireccionar las solicitudes. La red predeterminada es
default
.DESCRIPTION es una descripción opcional y legible de la zona administrada.
REGISTRY_DOMAIN es el dominio de tu registro:
pkg.dev
para Artifact Registrygcr.io
para Container Registry
Inicia una transacción.
gcloud dns record-sets transaction start \ --zone=ZONE_NAME \ --project=PROJECT_ID
En el ejemplo anterior, se ilustra lo siguiente:
ZONE_NAME es el nombre de la zona que creaste en el primer paso.
PROJECT_ID es el ID del proyecto que aloja el clúster privado de GKE.
Agrega un registro CNAME en tu registro.
gcloud dns record-sets transaction add \ --name=*.REGISTRY_DOMAIN. \ --type=CNAME REGISTRY_DOMAIN. \ --zone=ZONE_NAME \ --ttl=300 \ --project=PROJECT_ID
En el ejemplo anterior, se ilustra lo siguiente:
ZONE_NAME es el nombre de la zona que creaste en el primer paso.
PROJECT_ID es el ID del proyecto que aloja el clúster privado de GKE.
REGISTRY_DOMAIN es el dominio de tu registro:
pkg.dev
para Artifact Registrygcr.io
para Container Registry
Agrega un registro A para la VIP restringida.
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
En el ejemplo anterior, se ilustra lo siguiente:
ZONE_NAME es el nombre de la zona que creaste en el primer paso.
PROJECT_ID es el ID del proyecto que aloja el clúster privado de GKE.
REGISTRY_DOMAIN es el dominio de tu registro:
pkg.dev
para Artifact Registrygcr.io
para Container Registry
Ejecuta la transacción.
gcloud dns record-sets transaction execute \ --zone=ZONE_NAME \ --project=PROJECT_ID
En el ejemplo anterior, se ilustra lo siguiente:
ZONE_NAME es el nombre de la zona que creaste en el primer paso.
PROJECT_ID es el ID del proyecto que aloja el clúster privado de GKE.
Configura el perímetro de servicio
Después de configurar los registros DNS, crea un perímetro de servicio nuevo o actualiza un perímetro existente y, luego, agrega el servicio de Container Registry o Artifact Registry a la lista de servicios que deseas proteger mediante el perímetro de servicio.
Verifica si el perímetro funciona
Después de configurar el perímetro de servicio, implementa un contenedor de muestra para verificar la configuración.
Crea una implementación en el clúster privado con el siguiente 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
Verifica el estado del Pod con el siguiente comando:
kubectl get pods
El comando muestra una tabla similar al siguiente ejemplo. Si la imagen se extrajo y se implementó de forma correcta, el estado del Pod es RUNNING
.
NAME READY STATUS RESTARTS AGE
hello-server-dbd86c8c4-h5wsf 1/1 Running 0 45s
Puedes usar el comando kubectl describe pod
para ver más detalles sobre la implementación. En el Pod del ejemplo anterior, el comando es el siguiente:
kubectl describe pod hello-server-dbd86c8c4-h5wsf