Temps estimé pour suivre la totalité du cours : 60 minutes
Propriétaire du composant exploitable : IACProfil de compétences : ingénieur de déploiement
L'infrastructure en tant que code (IaC) dans Google Distributed Cloud (GDC) sous air gap se compose de deux systèmes :
Config Sync est un composant utilisé dans l'infrastructure as code (IaC) Distributed Cloud pour gérer les ressources au niveau du cluster et les services partagés.
GitLab héberge un dépôt Git qui sert de source fiable pour Config Sync. Un cluster cible est un cluster que Config Sync gère à partir de la source de vérité dans le dépôt.
- GitLab inclut un système d'examen du code pour implémenter l'approbation multipartite (MPA) sur les modifications apportées aux règles et à la configuration.
Les deux types de zones suivants sont impliqués dans un déploiement :
- Zone d'ancrage : zone qui fait déjà partie du plan de contrôle mondial. La première zone est la zone d'ancrage d'un déploiement.
- Zone de connexion : zone qui rejoint le plan de contrôle mondial.
Config Sync gère les objets Kubernetes dans les clusters root-admin et d'administrateur de l'organisation. Il est configuré pour lire à partir du dépôt IaC Distributed Cloud fourni par GitLab dans le cluster root-admin principal.
Distributed Cloud installe l'IaC lors de l'amorçage. Exécutez les étapes manuelles suivantes pour terminer la configuration de l'IaC.
23.1. Configurer la première zone IaC
Cette section décrit les étapes à suivre pour configurer l'IaC dans la première zone de déploiement.
23.2. Prérequis
- Amorçage du cluster d'administrateur racine.
- Créez un client SAML dans l'instance OC IT d'Active Directory Federation Services (ADFS) en tant que client de fédération d'identité dans GitLab.
23.3. Accès à GitLab le jour 0
Ouvrez la console Web GitLab à l'adresse
https://iac.GDC_URL.GDC_URLest le domaine spécifié dans le CIQ.# Use the root kubeconfig of the root admin cluster. export ANCHOR_KUBECONFIG=ANCHOR_ZONE_KUBECONFIG echo https://$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get dnsregistrations \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Utilisez le nom d'utilisateur du jour 0 :
ioadmin.Exécutez la commande suivante pour obtenir le mot de passe :
export IO_ADMIN_PWD=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG \ get secret gitlab-basic-users -n gitlab-system \ -o jsonpath='{.data.admin}' | base64 -d)Connectez-vous et accédez à Menu > Projets > Explorer les projets gdch / iac pour vérifier que le dépôt Git
iaca été créé.
23.4. Créer des utilisateurs administrateurs
- Créez des utilisateurs administrateurs dédiés dans AD FS. Vous ne devez pas les utiliser à des fins non administratives et ils doivent avoir une extension "-ga". Notez que vos utilisateurs administrateurs initiaux DOIVENT utiliser le même
emailici que celui qu'ils utilisent dans les services ADFS (Active Directory Federation Services). Exécutez la commande suivante pour créer un utilisateur :
export NEW_USER_NAME=NEW_USER_NAME export NEW_USER_USERNAME=NEW_USERNAME export NEW_USER_PWD=NEW_USER_PWD export NEW_USER_EMAIL=NEW_USER_EMAIL export GDC_URL=GDC_URL export TOKEN=$(curl -X POST https://iac.$GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${IO_ADMIN_PWD}" \ | jq -r '.access_token') USERID=$(curl -X GET https://iac.$GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ sed -E 's/.*"id":"?([^,"]*)"?.*/\1/') curl -X POST https://iac.$GDC_URL/api/v4/users \ -d username=${NEW_USER_USERNAME} -d password=${NEW_USER_PWD} -d name=${NEW_USER_NAME} \ -d email=${NEW_USER_EMAIL} -d admin=true -d access_token=${TOKEN} curl -X POST https://iac.$GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"
23.5. Mettre à jour la licence GitLab
De nombreuses fonctionnalités de GitLab nécessitent une licence "Ultimate" pour fonctionner. Dans cette étape, vous allez remplacer la licence temporaire fournie avec GDC par la licence propre au site. Pour en savoir plus, consultez Activer GitLab EE avec un fichier ou une clé de licence.
La clé de licence du site que vous avez reçue est un fichier texte ASCII encodé en base64 avec une extension .gitlab-license. Vous utiliserez cette clé pour activer GitLab.
- Connectez-vous à la console Web GitLab en tant que
ioadmin. - Dans la barre de navigation, sélectionnez Menu, puis Admin.
- Dans le menu de navigation, sélectionnez Paramètres, puis Général.
- Dans la section "Ajouter une licence", ajoutez une licence en important le fichier ou en saisissant la clé.
- Cochez la case "Conditions d'utilisation".
- Sélectionnez "Ajouter une licence".
23.6. Configurer le dépôt GitLab
ConfigSync gère les objets Kubernetes dans les clusters administrateur racine et administrateur d'organisation, et est configuré pour lire à partir du dépôt Distributed Cloud IaC fourni par GitLab dans le cluster administrateur racine.
Nous devons configurer les dossiers GitLab initiaux pour que Configsync puisse consommer les configurations et les appliquer au cluster Kubernetes requis.
infrastructure
│ └── zonal
│ └── zones
│ ├── ${anchor_zone_name}
│ ├── root-admin
│ ├── kustomization.yaml
│ └── global
│ └── orgs
│ ├── root
│ ├── kustomization.yaml
Suivez les étapes ci-dessous pour créer la structure de fichier initiale :
Ouvrez le dépôt
iacà partir de "Menu -> Explore Projects" (Menu -> Explorer les projets).Ouvrez l'IDE Web.
Créez un fichier dans
/infrastructure/zonal/zones/${anchor_zone_name}/root-admin/kustomization.yamlavec le contenu suivant :apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomizationCliquez sur le bouton "Commit" (Valider).
Sélectionnez "Effectuer un commit dans la branche principale", puis confirmez.
23.7. Configurer l'approbation multipartite
Utilisez cette section pour configurer le système afin d'exiger une approbation pour chaque demande de fusion dans le dépôt iac et d'empêcher tout commit direct (sans créer de demande de fusion) dans la branche main afin d'appliquer l'approbation multipartite (MPA).
23.7.1. Activer l'approbation des demandes de fusion dans GitLab
Accédez au dépôt
iac.Utilisez l'IDE Web pour créer un fichier nommé
CODEOWNERSdans le dossier racine et ajoutez le groupe Distributed Cloud en tant que propriétaire du dépôt.[Repository Owners] * @gdchSeuls les utilisateurs ajoutés au fichier
CODEOWNERSpeuvent approuver les demandes de fusion dans le dépôtiac. Ce fichier générique est destiné à la configuration uniquement. Pour obtenir des instructions plus détaillées sur les autorisations d'approbation précises, consultez IAC-R0007.Cliquez sur le bouton Valider.
Sélectionnez Valider sur la branche principale, puis confirmez.
Pour ajouter des utilisateurs au fichier
CODEOWNERS, créez une demande de fusion qui devra être approuvée par les utilisateurs existants dansCODEOWNERS.
23.8. Connecter Active Directory Federation Services (ADFS) à GitLab
Vous pouvez connecter ADFS à GitLab avec un client SAML à l'aide du framework Auth de GitLab.
Si vous utilisez une autorité de certification privée pour votre fournisseur d'identité, vous devez l'ajouter à l'instance GitLab. Obtenez la version base64 du certificat de l'autorité de certification ADFS et placez-la dans un secret.
cat <<EOF > adfs-ca-cert-secret.yaml
apiVersion: v1
data:
tls.crt: ADFS_CA_CERTIFICATE_BASE64
kind: Secret
metadata:
name: adfs-ca-cert-secret
namespace: gitlab-system
type: Opaque
EOF
kubectl apply -f adfs-ca-cert-secret.yaml
23.8.1. Configurer ADFS pour l'authentification SAML
Avant de connecter GitLab à ADFS à l'aide de la configuration Helm, ADFS doit créer un client SAML. Dans votre instance Windows, procédez comme suit :
Exécutez l'application Gestion AD FS en tant qu'administrateur.
Dans le répertoire AD FS, cliquez sur le dossier Approbation de partie de confiance. Dans le panneau Actions, cliquez sur Ajouter une approbation de partie de confiance.

L'assistant Ajouter une approbation de partie de confiance s'ouvre. Pour la première étape, sélectionnez Claims aware (Prise en charge des revendications), puis cliquez sur Start (Démarrer).

Sélectionnez Saisir manuellement les données concernant le tiers de confiance, puis cliquez sur Suivant.

Saisissez des informations reconnaissables sur l'instance ADFS dans les champs Nom à afficher et Notes. Cliquez sur Next (Suivant).

Ignorez l'étape Configurer le certificat en cliquant sur Suivant.
Cochez la case Enable support for the SAML 2.0 WebSSO protocol (Activer la prise en charge du protocole WebSSO SAML 2.0). Dans le champ URL du service d'authentification unique SAML 2.0 de confiance, saisissez l'URL suivante :
https://iac.GDC_URL/users/auth/saml/callback.Remplacez GDC_URL par l'URL de l'organisation dans GDC.

Donnez un nom à IaC et ajoutez les éléments suivants :
https://iac.GDC_URL.sesame.street https://iac.GDC_URL.sesame.street/users/auth/saml/callbackCliquez sur Suivant pour les étapes Configurer les identifiants, Choisir une stratégie de contrôle d'accès et Prêt à ajouter la confiance afin de terminer l'assistant.
# Replace GDC_URL with the cells URL, for example, bert.sesame.street https://iac.GDC_URL https://iac.GDC_URL/users/auth/saml/callbackL'affichage est mis à jour avec l'approbation de partie de confiance que vous venez de créer. Effectuez un clic droit sur votre élément, puis sélectionnez Modifier la stratégie d'émission de revendication.
Cliquez sur le bouton Ajouter une règle. À l'étape Choisir le type de règle, sélectionnez le modèle de règle de revendication Envoyer les attributs LDAP en tant que revendications. Cliquez sur Suivant.
Dans l'étape Configurer la règle de revendication, renseignez les paramètres suivants :
- Dans le champ Nom de la règle de revendication, saisissez
Email. - Dans la liste Magasin d'attributs, sélectionnez Active Directory.
- Dans le tableau Mappage des attributs LDAP aux types de revendications sortantes, dans la colonne Attribut LDAP, sélectionnez ou saisissez
E-Mail-Addresses. Dans la colonne Type de revendication sortante du tableau, sélectionnez ou saisissez
E-Mail Address.
Terminez l'assistant.
- Dans le champ Nom de la règle de revendication, saisissez
Cliquez sur le bouton Ajouter une règle.
Effectuez un clic droit sur l'élément, puis cliquez à nouveau sur Modifier la stratégie d'émission de revendication.
À l'étape Choisir le type de règle, sélectionnez le modèle de règle de revendication Transformer une revendication entrante. Cliquez sur Suivant.
Dans l'étape Configurer la règle de revendication, renseignez les paramètres suivants :
- Dans le champ Nom de la règle de revendication, saisissez
Transform email to nameid. - Dans le champ Type de revendication entrante, sélectionnez ou saisissez
E-Mail Address. - Dans le champ Type de revendication sortante, sélectionnez ou saisissez
Name ID. - Dans le champ Format de l'ID de nom sortant, sélectionnez ou saisissez
Persistent Identifier. Sélectionnez l'option Transmettre toutes les valeurs de revendication.

Terminez l'assistant.
- Dans le champ Nom de la règle de revendication, saisissez
23.8.2. Ajouter une configuration SAML à GitLab
Cette section décrit la procédure à suivre pour ajouter une configuration SAML à GitLab.
23.8.2.1. Enregistrer GitLab dans le fournisseur d'identité
Ouvrez la configuration de votre client SAML dans ADFS. GitLab nécessite les valeurs suivantes pour s'intégrer à votre IdP :
assertion_customer_service_url : URL vers laquelle le fournisseur d'identité redirige l'utilisateur après l'avoir authentifié. Définissez-la sur
https://iac.GDC_URL/users/auth/saml/callback.Remplacez GDC_URL par l'URL de l'organisation dans GDC.
idp_cert_fingerprint : GitLab utilise cette empreinte digitale pour valider le certificat d'un message SAML entrant. Pour trouver le
idp_cert_fingerprintdans ADFS, procédez comme suit :Exécutez l'application
AD FS Managementen tant qu'administrateur.Dans l'arborescence des répertoires AD FS > Service > Certificats, cliquez sur le dossier Certificats. Un certificat s'affiche dans la section Signature de jetons. Effectuez un clic droit sur ce certificat, puis sélectionnez Afficher le certificat.
Dans la fenêtre Certificate (Certificat), accédez à l'onglet
Details. Faites défiler la liste jusqu'à ce que vous trouviez un élément appeléThumbprint. Cliquez sur l'élément et copiez le contenu affiché dans la console.
idp_sso_target_url: GitLab ciblera ce point de terminaison lors de l'authentification par SAML. Pour trouver leidp_sso_target_urldans ADFS, procédez comme suit :Exécutez l'application Gestion AD FS en tant qu'administrateur.
Cliquez sur le dossier Points de terminaison dans l'arborescence AD FS > Service.
Points de terminaison
Sur l'écran central, recherchez une ligne de type SAML 2.0/WS-Federation. Le point de terminaison cible est votre URL ADFS et le point de terminaison cible. Par exemple, si le nom de domaine de votre instance est
https://ocit.gdch.test/et que le point de terminaison cible est/adfs/ls,idp_sso_target_urlesthttps://ocit.gdch.test/adfs/ls.
issuer: URL utilisée par GitLab pour s'identifier. Utilisezhttps://iac.GDC_URL.Préparez les valeurs du fournisseur d'identité ci-dessus et écrivez-les dans une configuration personnalisée appelée
custom_saml.yaml. Modifiez ce fichier YAML pour obtenir la configuration nécessaire à votre client SAML.cat <<EOF > custom_saml.yaml name: saml label: "ADFS SAML" # This is the label the login button will use. args: assertion_consumer_service_url: "https://iac.GDC_URL/users/auth/saml/callback" idp_cert_fingerprint: "ADFS_IDP_CERT_FINGERPRINT" idp_sso_target_url: "ADFS_IDP_SSO_TARGET_URL" issuer: "https://iac.GDC_URL" # These parameters are necessary for ADFS to connect to GitLab. Do not change unless you are sure of what you're doing. name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" attribute_statements: { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] } EOFLorsque vous êtes prêt, appliquez votre configuration en tant que secret appelé
custom-gitlab-saml-provider.cat <<EOF > custom-gitlab-saml-provider.yaml apiVersion: v1 data: provider: | $(cat custom_saml.yaml | base64 -w 0) kind: Secret metadata: name: custom-gitlab-saml-provider namespace: gitlab-system annotations: "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "-5" EOF kubectl apply -f custom-gitlab-saml-provider.yamlVous pouvez utiliser le secret lors de la création de
subcomponentoverride.yaml. Pour en savoir plus sur les variables, consultez la documentation GitLab.cat <<EOF > subcomponentoverride.yaml apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac-gitlab namespace: root spec: subComponentRef: "iac-gitlab" backend: operableParameters: omniauth: enabled: true providers: - secret: custom-gitlab-saml-provider certificates: customCAs: - secret: adfs-ca-cert-secret - configMap: trust-store-root-ext EOF kubectl apply -f subcomponentoverride.yaml
Cela crée le remplacement du sous-composant. Pour vérifier que la configuration a été créée, exécutez la commande suivante :
sh
kubectl get subcomponentoverride -n root
Le résultat ressemble à ce qui suit :
NAME AGE
iac-gitlab 1s
23.8.2.2. Initialiser le premier utilisateur SAML connecté
L'activation de SAML supprime la connexion locale. Les utilisateurs doivent suivre les procédures d'accès d'urgence pour réactiver la connexion locale et accéder de nouveau à ioadmin.
Les premiers administrateurs initialisés créés dans Créer des utilisateurs administrateurs fonctionneront sans autre modification. Ils ne doivent pas avoir accès au projet. Pour ajouter des utilisateurs au projet Distributed Cloud, suivez la procédure Intégrer un nouvel utilisateur depuis ADFS.
23.8.3. Vérifier la connexion ADFS
Vérifiez l'état des pods
webserviceGitLab :kubectl --kubeconfig $KUBECONFIG get pod -l app=webservice,release=gitlab -n gitlab-systemNOM READY ÉTAT REDÉMARRAGES ÂGE gitlab-webservice-default-5d99b4d7c7-9fmln 2/2 En cours d'exécution 0 4m6s gitlab-webservice-default-5d99b4d7c7-w99p4 2/2 En cours d'exécution 0 96s gitlab-webservice-default-7884d4c8b9-qjhtv 2/2 En cours d'arrêt 0 18 h Accédez à
https://iac.GDC_URLet vérifiez que l'écran ADFS SAML s'affiche. Il permet d'utiliser la connexion SSO et ne comporte pas de champs directs pour le nom d'utilisateur et le mot de passe.Cliquez sur ADFS SAML. Vérifiez que vous êtes invité à vous connecter à ADFS.
Après vous être connecté à ADFS, vérifiez que vous êtes connecté à GitLab et que vous pouvez désormais interagir avec l'application.
23.9. Verrouiller le compte administrateur du jour 0
Une fois SAML activé, désactivez l'authentification par mot de passe pour l'interface Web, puis réinitialisez le mot de passe de ioadmin, car l'accès à l'API persiste.
Exécutez le script ci-après.
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig export PWD=$(kubectl get secret gitlab-basic-users -n gitlab-system -o yaml \ | grep admin | head -n1 | awk '{print $2}' | xargs echo | base64 -d) export TOKEN=$(curl -X POST https://iac.GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${PWD}" \ | jq -r '.access_token') curl -X PUT https://iac.GDC_URL/api/v4/application/settings \ -d access_token=${TOKEN} \ -d password_authentication_enabled_for_web=false NEWPASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) USERID=$(curl -X GET https://iac.GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ jq -r '.[] | .id') curl -X PUT https://iac.GDC_URL/api/v4/users/${USERID} \ -d access_token=${TOKEN} -d username=ioadmin \ -d "password=${NEWPASS}" \ -d user_id=${USERID} curl -X POST https://iac.GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"Stockez le nouveau mot de passe dans le secret
gitlab-basic-users.kubectl patch secret gitlab-basic-users -n gitlab-system --type=json -p'[{"op": "replace", "path": "/data/admin", "value": '"$(echo $NEWPASS | base64 -w0)"'}]'
Utilisez les comptes dans OI ADFS pour vous connecter.
23.10. Configurer l'IaC de la zone de connexion
Cette section décrit la procédure à suivre pour configurer l'IaC dans la zone de déploiement.
23.11. Prérequis
Avant de configurer la zone de jonction, vous devez amorcer le cluster d'administrateur racine.
23.12. Configurer les identifiants Config Sync
Pour configurer les identifiants Config Sync, procédez comme suit :
Connectez-vous au cluster d'administrateur racine de la zone d'ancrage.
Récupérez les identifiants Config Sync :
kubectl --kubeconfig $ANCHOR_KUBECONFIG get secret -n config-management-system iac-creds-replica -o json |\ jq 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid)' > iac-creds-replica.jsonCopiez le fichier
iac-creds-replica.json.Connectez-vous au cluster d'administrateur racine de la zone à laquelle vous souhaitez vous joindre.
Collez le fichier
iac-creds-replica.json.Appliquez les identifiants Config Sync au cluster d'administrateur racine :
# Use the root kubeconfig of the root admin cluster. export JOINING_KUBECONFIG=JOINING_ZONE_KUBECONFIG kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-creds-replica.jsonAssurez-vous que les identifiants Config Sync sont configurés :
kubectl --kubeconfig $JOINING_KUBECONFIG get secret -n config-management-system \ iac-creds-replica -o yaml
23.13. Configurer la source de vérité Config Sync
Procédez comme suit pour configurer la source de référence Config Sync :
Connectez-vous au cluster d'administrateur racine de la zone d'ancrage.
Obtenez le FQDN de GitLab :
export primaryDnsFQDN=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get DNSRegistration \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Connectez-vous au cluster d'administrateur racine de la zone à laquelle vous souhaitez vous joindre.
Créez le fichier IaC
SubcomponentOverride:echo "apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac namespace: root spec: subComponentRef: "iac-configsync" backend: operableParameters: primaryDnsFQDN: ${primaryDnsFQDN}" > iac-subcomponentoverride.yamlConfigurez la cible Config Sync :
kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-subcomponentoverride.yamlAssurez-vous que le dépôt Git Config Sync est configuré :
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync -n config-management-system \ root-sync -o jsonpath='{.spec.git.repo}'Assurez-vous que Config Sync ne présente aucune erreur dans les zones d'ancrage et de jonction.
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync \ -o jsonpath='{.status.source.errors[0].errorMessage}'Si
root-synccontient l'erreur KNV2004, cela signifie que le chemin d'accès au répertoire utilisé par la zone d'ancrage ou de jonction n'existe pas dans le dépôtiac. Recherchez le répertoire requis en exécutant la commande suivante :kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync -o jsonpath='{.spec.git.dir}'Créez le chemin d'accès généré par la commande précédente dans le dépôt
iacet ajoutez un fichierkustomization.yamlgénérique. Ensuite, fusionnez-le dans la branchemain.Réexécutez la commande
get RootSyncd'origine pour vous assurer que Config Sync ne présente aucune erreur.