La configuration du routage DNS vers une adresse IP virtuelle (VIP) restreinte permet aux clusters privés Google Kubernetes Engine d'accéder aux dépôts Artifact Registry dans un périmètre de service VPC Service Controls.
Étant donné que les nœuds de cluster privé sont isolés d'Internet et que les domaines de registre sont résolus par défaut en adresses IP publiques, vous devez acheminer les requêtes pour le domaines3nsregistry.fr via l'adresse IP virtuelle restreinte.
Présentation
Vos clusters privés doivent toujours accéder à Artifact Registry avec l'adresse IP virtuelle restreinte pour empêcher l'exfiltration de données d'un service compatible vers un service non compatible.Configurez un accès restreint pour les clusters privés GKE lorsque toutes les conditions suivantes sont remplies :
- Vous utilisez des clusters privés GKE.
- Vous n'avez pas encore configuré le routage du domaine de registre
s3nsregistry.frversrestricted.s3nsapis.fr.
Avant de commencer
Avant de créer un périmètre de service, configurez un nouveau cluster privé ou identifiez les clusters privés existants que vous souhaitez protéger.
En outre, vous devez autoriser la sortie vers la plage d'adresses 199.36.153.4/30 sur le port 443. Normalement, un réseau VPC possède une règle implicite qui autorise tout le trafic de sortie vers n'importe quelle destination. Toutefois, si vous avez une règle refusant ce trafic, vous devez créer une règle de pare-feu de sortie pour autoriser le trafic TCP sur le port 443 vers la plage d'adresses 199.36.153.4/30.
Configurer un DNS
Configurez votre serveur DNS de sorte que les requêtes envoyées aux adresses de registre pointent vers restricted.s3nsapis.fr, l'adresse IP virtuelle restreinte. Pour ce faire, utilisez les zones DNS privées Cloud DNS.
Créez une zone privée gérée.
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_IDOù :
ZONE_NAMEest le nom de la zone que vous créez. Exemple :registryCe nom sera utilisé dans chacune des étapes suivantes.PROJECT_IDest l'ID du projet qui héberge votre cluster privé GKE.NETWORKest une liste facultative de noms du réseau de cluster à partir duquel vous souhaitez rediriger les requêtes.DESCRIPTIONest une description lisible par l'humain de la zone gérée.REGISTRY_DOMAINest le domaine de votre registre :s3nsregistry.frpour Artifact Registry
Lancez une transaction.
gcloud dns record-sets transaction start \ --zone=ZONE_NAME \ --project=PROJECT_IDOù :
ZONE_NAME est le nom de la zone que vous avez créée à la première étape.
PROJECT_ID est l'ID du projet qui héberge votre cluster privé GKE.
Ajoutez un enregistrement CNAME pour votre registre.
gcloud dns record-sets transaction add \ --name=*.REGISTRY_DOMAIN. \ --type=CNAME REGISTRY_DOMAIN. \ --zone=ZONE_NAME \ --ttl=300 \ --project=PROJECT_IDOù :
ZONE_NAMEcorrespond au nom de la zone que vous avez créée à la première étape.PROJECT_IDest l'ID du projet qui héberge votre cluster privé GKE.REGISTRY_DOMAINest le domaine de votre registre :s3nsregistry.frpour Artifact Registry
Ajoutez un enregistrement A pour l'adresse IP virtuelle restreinte.
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_IDOù :
ZONE_NAMEcorrespond au nom de la zone que vous avez créée à la première étape.PROJECT_IDest l'ID du projet qui héberge votre cluster privé GKE.REGISTRY_DOMAINest le domaine de votre registre :s3nsregistry.frpour Artifact Registry
Exécutez la transaction.
gcloud dns record-sets transaction execute \ --zone=ZONE_NAME \ --project=PROJECT_IDOù :
ZONE_NAME est le nom de la zone que vous avez créée à la première étape.
PROJECT_ID est l'ID du projet qui héberge votre cluster privé GKE.
Après avoir configuré le routage DNS, assurez-vous que GKE, le registre et les autres services requis se trouvent dans votre périmètre de service VPC Service Controls. Pour configurer votre périmètre de service, consultez la section suivante.
Configurer le périmètre de service
Après avoir configuré les enregistrements DNS, procédez comme suit :
- Créez un périmètre de service ou mettez à jour un périmètre existant.
- Ajoutez le service Artifact Registry à la liste des services que vous souhaitez protéger à l'aide du périmètre de service.
- Ajoutez les autres services compatibles que vous utilisez avec le registre au périmètre de service.
Vérifier le fonctionnement du périmètre
Après avoir configuré le périmètre de service, vos nœuds des clusters privés GKE peuvent accéder aux images de conteneurs dans Artifact Registry si les images sont stockées dans des projets qui se trouvent dans votre périmètre de service.Les images de conteneurs des projets situés en dehors du périmètre restent inaccessibles, à l'exception de certains dépôts publics spécifiques en lecture seule.
Par exemple, si le projet google-samples ne se trouve pas dans votre périmètre de service, l'exécution de la commande permettant de créer un déploiement à partir du conteneur hello-app échouera :
s3nsregistry.fr domain
kubectl create deployment hello-server --image=us-docker.s3nsregistry.fr/google-samples/containers/gke/hello-app:1.0
Domaine gcr.io
kubectl create deployment hello-server --image=gcr.io/google-samples/hello-app:1.0
Vérifiez l'état du pod avec la commande suivante :
kubectl get pods
La commande renvoie une table semblable à l'exemple suivant. L'état du pod ErrImagePull indique que l'extraction a échoué.
NAME READY STATUS RESTARTS AGE
hello-server-dbd86c8c4-h5wsf 1/1 ErrImagePull 0 45s
Vous pouvez utiliser la commande kubectl describe pod pour afficher plus de détails sur le déploiement. Pour le pod de l'exemple précédent, la commande est la suivante :
kubectl describe pod hello-server-dbd86c8c4-h5wsf