Découvrez comment créer une instance Config Controller préinstallée avec Config Connector, Policy Controller et Config Sync. Découvrez ensuite comment utiliser votre instance en effectuant les tâches suivantes :
- Utilisez Config Connector pour créer et gérer une ressource Google Cloud.
- Créer une contrainte Policy Controller pour appliquer une règle et détecter un cas de non-respect des règles avant son déploiement
- Configurer GitOps en configurant Config Sync pour la synchronisation à partir d'un exemple de dépôt contenant une ressource Google Cloud.
Avant de commencer
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
Create or select a Google Cloud project.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_ID
with a name for the Google Cloud project you are creating. -
Select the Google Cloud project that you created:
gcloud config set project PROJECT_ID
Replace
PROJECT_ID
with your Google Cloud project name.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the KRM, GKE, GKE Enterprise, Resource Manager, and Service Usage APIs:
gcloud services enable krmapihosting.googleapis.com
container.googleapis.com anthos.googleapis.com cloudresourcemanager.googleapis.com serviceusage.googleapis.com
Créer une instance Config Controller
Dans le terminal, créez une instance Config Controller Autopilot :
gcloud anthos config controller create cc-example \ --location=us-central1 \ --full-management
Cette opération peut prendre jusqu'à 15 minutes.
Le résultat est le suivant :
Created instance [cc-example]. Fetching cluster endpoint and auth data. kubeconfig entry generated for krmapihost-cc-example.
Pour configurer
kubectl
afin de communiquer avec le point de terminaison Config Controller, obtenez les identifiants d'authentification et les informations de point de terminaison requis :gcloud anthos config controller get-credentials cc-example \ --location us-central1
Vérifiez que votre instance a été créée en affichant la liste des instances Config Controller :
gcloud anthos config controller list --location=us-central1
Le résultat est le suivant :
NAME LOCATION STATE cc-example us-central1 RUNNING
Accorder l'autorisation requise à Config Controller
Dans cette section, vous autorisez Config Controller à gérer les ressources Google Cloud :
Définissez une variable d'environnement pour l'adresse e-mail de votre compte de service :
export SA_EMAIL="$(kubectl get ConfigConnectorContext -n config-control \ -o jsonpath='{.items[0].spec.googleServiceAccount}' 2> /dev/null)"
Créez la liaison de stratégie :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member "serviceAccount:${SA_EMAIL}" \ --role "roles/owner" \ --project PROJECT_ID
Remplacez
PROJECT_ID
par l'ID du projet.Le résultat ressemble à ce qui suit :
Updated IAM policy for project [PROJECT_ID]. auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: gkehub.googleapis.com # Remainder of output omitted
Utiliser votre instance Config Controller
Les sections suivantes présentent les différentes manières d'utiliser votre instance Config Controller.
Créer une ressource Google Cloud avec Config Connector
Avec votre instance Config Controller, vous pouvez tirer parti de Config Connector pour gérer de nombreux services et ressources Google Cloud à l'aide d'outils et d'API Kubernetes. Dans cette section, vous allez utiliser Config Controller pour créer une ressource PubSubTopic
.
Pour créer un sujet Pub/Sub à l'aide de Config Connector, procédez comme suit :
Utilisez Config Connector pour activer l'API Pub/Sub :
À l'aide de l'éditeur de texte de votre choix, créez un fichier nommé
enable-pubsub.yaml
et copiez-y le code YAML suivant :# enable-pubsub.yaml apiVersion: serviceusage.cnrm.cloud.google.com/v1beta1 kind: Service metadata: name: pubsub.googleapis.com namespace: config-control spec: projectRef: external: projects/PROJECT_ID
Remplacez
PROJECT_ID
par l'ID du projet.Pour activer l'API Pub/Sub, appliquez le fichier manifeste à votre cluster :
kubectl apply -f enable-pubsub.yaml
L'activation de cette API peut prendre plusieurs minutes.
Utilisez Config Connector pour créer un sujet Pub/Sub :
Créez un fichier nommé
pubsub-topic.yaml
et copiez-y le YAML ci-dessous :# pubsub-topic.yaml apiVersion: pubsub.cnrm.cloud.google.com/v1beta1 kind: PubSubTopic metadata: annotations: cnrm.cloud.google.com/project-id: PROJECT_ID labels: label-one: "value-one" name: example-topic namespace: config-control
Créez le sujet Pub/Sub :
kubectl apply -f pubsub-topic.yaml
Vérifiez que Config Controller a créé votre ressource dans Google Cloud en affichant la liste des sujets Pub/Sub :
gcloud pubsub topics list
Le résultat ressemble à ce qui suit :
--- name: projects/PROJECT_ID/topics/start-instance-event --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
Appliquer une stratégie à l'aide de Policy Controller
Votre instance Config Controller vous permet d'utiliser les contraintes Policy Controller et Policy Controller. Dans le cadre de l'installation de Policy Controller, Config Controller installe automatiquement la bibliothèque de modèles de contraintes. Vous pouvez utiliser les modèles de cette bibliothèque pour appliquer divers contrôles de sécurité et de conformité courants sur vos instances Config Controller.
Dans cette section, vous allez créer une contrainte à l'aide du modèle de contrainte GCPStorageLocationConstraintV1
. Ce modèle vous permet de limiter l'emplacement dans lequel vous pouvez créer des buckets Cloud Storage. La contrainte que vous créez à l'aide de ce modèle limite l'emplacement à us-central1
. Vous pouvez utiliser cette contrainte pour vous assurer que vos buckets sont créés dans la région qui offre le meilleur prix et les meilleures performances.
Pour créer la contrainte, procédez comme suit :
Créez un fichier nommé
bucket-constraint.yaml
et copiez-y le YAML ci-dessous :# bucket-constraint.yaml apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GCPStorageLocationConstraintV1 metadata: name: storage-only-in-us-central1 spec: match: kinds: - apiGroups: - storage.cnrm.cloud.google.com kinds: - StorageBucket parameters: locations: - us-central1
Créez la contrainte :
kubectl apply -f bucket-constraint.yaml
Le résultat est le suivant :
gcpstoragelocationconstraintv1.constraints.gatekeeper.sh/storage-only-in-us-central1 created`
Démontrez que la contrainte fonctionne en essayant d'utiliser Config Connector pour créer une ressource StorageBucket dans
asia-southeast1
:Créez un fichier nommé
asia-storage-bucket.yaml
et copiez-y le YAML ci-dessous :# asia-storage-bucket.yaml apiVersion: storage.cnrm.cloud.google.com/v1beta1 kind: StorageBucket metadata: name: bucket-in-disallowed-location namespace: config-control spec: location: asia-southeast1
Essayez de créer le bucket Cloud Storage :
kubectl apply -f asia-storage-bucket.yaml
Le résultat est le suivant :
Error from server (Forbidden): error when creating "STDIN": admission webhook "validation.gatekeeper.sh" denied the request: [storage-only-in-us-central1] Cloud Storage bucket <bucket-in-disallowed-location> uses a disallowed location <asia-southeast1>, allowed locations are ["us-central1"]
Configurer GitOps avec Config Sync
Config Sync est un service GitOps qui vous permet de synchroniser votre instance Config Controller avec les configurations, les règles et les ressources Google Cloud stockées dans un dépôt Git, une image OCI ou un dépôt Helm. Étant donné que Config Sync consolide continuellement l'état de Config Controller avec les configurations de votre source, vous pouvez vous assurer que vos instances ont une configuration cohérente.
Dans cette section, vous allez synchroniser votre instance Config Controller avec un dépôt GitHub public. Ce dépôt contient une autre ressource PubSubTopic
. En synchronisant votre instance à partir de ce dépôt, la ressource est automatiquement créée et appliquée à votre instance. Vous pouvez choisir de créer vos ressources à l'aide de Config Sync (au lieu d'appliquer directement la ressource) si vous souhaitez utiliser un workflow GitOps.
Pour effectuer la synchronisation à partir de GitHub, configurez Cloud NAT. Cette démarche est nécessaire, car votre instance Config Controller s'appuie sur un cluster privé Google Kubernetes Engine (GKE) Enterprise Edition et les nœuds de cluster privé ne disposent pas d'un accès Internet sortant :
Créez un routeur Cloud NAT. Vous en aurez besoin pour configurer votre passerelle NAT.
gcloud compute routers create cc-nat-router \ --network default \ --region us-central1
Le résultat ressemble à ce qui suit :
Creating router [cc-nat-router]...done. NAME REGION NETWORK cc-nat-router us-central1 default
Configurez une passerelle NAT sur le routeur que vous avez créé à l'étape précédente :
gcloud compute routers nats create cc-nat-config \ --router-region us-central1 \ --router cc-nat-router \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips
Le résultat est le suivant :
Creating NAT [cc-nat-config] in router [cc-nat-router]...done.
Pour configurer votre instance Config Controller afin qu'elle se synchronise à partir d'un exemple de dépôt, créez un fichier nommé
cc-rootsync.yaml
et copiez-y le code YAML suivant :# cc-rootsync.yaml apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync namespace: config-management-system spec: sourceFormat: unstructured git: repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples branch: main dir: config-controller-quickstart auth: none
Appliquez la configuration :
kubectl apply -f cc-rootsync.yaml
Une fois votre instance synchronisée à partir du dépôt, Config Sync crée le sujet Pub/Sub et l'applique à votre instance Config Controller.
Vérifiez que Config Sync synchronise le dépôt Git avec votre instance Config Controller :
nomos status --contexts gke_PROJECT_ID_us-central1_krmapihost-cc-example
Le résultat ressemble à ce qui suit :
*gke_PROJECT_ID_us-central1_krmapihost-cc-example -------------------- <root>:root-sync https://github.com/GoogleCloudPlatform/anthos-config-management-samples/config-controller-quickstart@main SYNCED @ 2023-01-10 18:31:02 +0000 UTC 715b4295d3eac07b057cce2543275c1ee104cad8 Managed resources: NAMESPACE NAME STATUS SOURCEHASH config-control pubsubtopic.pubsub.cnrm.cloud.google.com/pubsub-topic-sample-sync Current 715b429 config-control service.serviceusage.cnrm.cloud.google.com/pubsub.googleapis.com Current 715b429
Si cette sortie n'apparaît pas, attendez quelques minutes, puis réessayez.
Vérifiez que Config Controller a créé votre ressource :
gcloud pubsub topics list
Le résultat ressemble à ce qui suit :
name: projects/PROJECT_ID/topics/start-instance-event --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/sample-topic --- labels: managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/pubsub-topic-sample-sync --- labels: label-one: value-one managed-by-cnrm: 'true' name: projects/PROJECT_ID/topics/example-topic
Dans ce résultat, vous pouvez voir le Pub/Sub que vous avez créé dans la section Créer une instance Config Controller et celui que vous avez créé en synchronisant votre instance avec un dépôt GitHub.
Effectuer un nettoyage
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez chaque ressource individuellement.
Supprimer le projet
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
Supprimer les ressources individuelles
Supprimez la ressource
PubSubTopic
de Config Connector :kubectl delete -f pubsub-topic.yaml
Supprimez la contrainte Policy Controller :
kubectl delete -f bucket-constraint.yaml
Supprimez le routeur NAT :
gcloud compute routers delete cc-nat-router \ --project=PROJECT_ID \ --region=us-central1
Appuyez sur
y
lorsque vous y êtes invité.Supprimez la ressource Pub/Sub créée par Config Sync :
kubectl delete PubSubTopic pubsub-topic-sample-sync -n config-control
Supprimez la ressource RootSync :
kubectl delete rootsync root-sync -n config-management-system
À l'aide de l'éditeur de texte de votre choix, supprimez tous les fichiers YAML que vous avez créés :
enable-pubsub.yaml
pubsub-topic.yaml
bucket-constraint.yaml
asia-storage-bucket.yaml
cc-rootsync.yaml
Supprimez l'instance Config Controller :
gcloud anthos config controller delete --location=us-central1 cc-example
Appuyez sur
y
lorsque vous y êtes invité.