Questa pagina introduce le operazioni del secondo giorno del flusso di lavoro Infrastructure as Code (IaC).
Prerequisiti
- Completa la configurazione dell'IaC.
- (Facoltativo) Scarica e installa lo strumento a riga di comando nomos
per il debug:
visita https://cloud.google.com/anthos-config-management/docs/how-to/nomos-command quando ti trovi al di fuori dell'ambiente air-gap e puoi accedere a questo URL.
Accedi a GitLab
Apri la console web GitLab all'indirizzo
https://iac.GDC_URL.Sostituisci
GDC_URLcon l'URL di base del progetto GDC.Nell'interfaccia utente di GitLab, fai clic sul pulsante SAML Login (Accesso SAML) per essere reindirizzato alla pagina di accesso di ADFS (Active Directory Federation Services) di Operations Center IT (OC IT).
Accedi con le tue credenziali OC IT ADFS per visualizzare la home page di GitLab.
L'accesso alla CLI richiede un token di accesso personale (PAT). Crea un PAT per il tuo utente con il livello di accesso richiesto seguendo questi passaggi dell'articolo di GitLab, Create a personal access token:
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token.Una volta creato un PAT, puoi eseguire l'autenticazione utilizzando lo strumento CLI.
Flusso di lavoro Infrastructure as Code
In generale, un flusso di lavoro IaC è costituito dai seguenti passaggi:
Genera le modifiche YAML corrispondenti nel repository GitLab
iacnel seguente modo:- Se il file non esiste, seleziona l'icona Nuovo file nella barra laterale.

- Nella finestra popup Crea nuovo file, inserisci il nome del nuovo file con il percorso completo e seleziona Crea file.

Se il file esiste, selezionalo nella barra laterale per aprirlo in un nuovo riquadro.
Apporta le modifiche necessarie al file.
Carica la modifica come commit Git e invia il commit per una revisione del codice obbligatoria come segue:
Seleziona l'opzione Commit nella barra laterale per espandere altre opzioni.

Scrivi un messaggio di commit nell'area di testo. Includi nel messaggio tutte le informazioni utili.
Seleziona l'opzione Crea un nuovo ramo.
Seleziona la casella di controllo Avvia una nuova richiesta di unione.
Fai clic su Esegui commit per aprire l'anteprima del modulo di richiesta di unione.
Crea una richiesta di unione e apporta le modifiche necessarie, ad esempio:
- Nel campo Titolo, inserisci un nome per la richiesta di unione.
- Nel campo Descrizione, inserisci una descrizione.
- Nella sezione Opzioni di unione, seleziona la casella di controllo Elimina il ramo di origine quando l'origine dell'unione viene accettata.
- Fai clic su Crea richiesta di unione. La richiesta di unione viene inviata
automaticamente al revisore.

Chiedi al proprietario appropriato di esaminare e approvare il commit come procedura di approvazione di più parti.
Esegui il push del commit.
Verifica il risultato nel cluster corrispondente.
Suggerimenti per il debug
Questa sezione descrive suggerimenti di debug facoltativi per l'IaC. Per verificare che le configurazioni siano accurate, devi aver installato lo strumento a riga di comando nomos.
Visualizzare l'anteprima e convalidare le configurazioni sottoposte a rendering
Prima che Config Sync esegua il rendering delle configurazioni e le sincronizzi con il cluster, assicurati
che le configurazioni siano accurate eseguendo nomos hydrate per visualizzare l'anteprima della configurazione
e nomos vet per verificare che il formato sia corretto.
Passa alla directory principale di Git locale.
Esegui il seguente comando
nomos hydratecon i seguenti flag:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYIn questo comando:
--source-format=unstructuredconsente anomos hydratedi lavorare su un repository non strutturato. Poiché utilizzi configurazioni Kustomize e grafici Helm, devi utilizzare un repository non strutturato e aggiungere questo flag.--output=OUTPUT_DIRECTORYti consente di definire un percorso per le configurazioni sottoposte a rendering. Sostituisci OUTPUT_DIRECTORY con la posizione in cui vuoi salvare l'output.
Controlla la sintassi e la validità delle configurazioni eseguendo
nomos vetcon i seguenti flag:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYIn questo comando:
--source-format=unstructuredconsente anomos vetdi lavorare su un repository non strutturato.--keep-output=truesalva le configurazioni sottoposte a rendering.--output=OUTPUT_DIRECTORYè il percorso delle configurazioni renderizzate.
Verificare la procedura
Per verificare lo stato della sincronizzazione, segui questi passaggi:
Utilizza l'alias della shell
ka:$ alias ka='kubectl --kubeconfig $HOME/root-admin-kubeconfig'
L'alias
kaconfigurakubectlper comunicare con il clusterroot-admin.Verifica che la sincronizzazione funzioni:
$ ka get rootsync/root-sync -n config-management-systemViene visualizzato il commit utilizzato da Config Sync e l'eventuale errore.
Una volta verificato lo stato della sincronizzazione, utilizza una delle seguenti opzioni:
Controlla se hai applicato correttamente l'ultimo commit nel repository Git:
Controlla il campo
.status.syncnell'oggetto RootSync o RepoSync. Puoi accedere al campo.status.synccon il seguente comando:# get .status.sync of a RootSync object ka get rootsync ROOT_SYNC -n config-management-system -o jsonpath='{.status.sync}' # get .status.sync of a RepoSync object ka get reposync REPO_SYNC -n REPO_SYNC_NAMESPACE -o jsonpath='{.status.sync}'Sostituisci
ROOT_SYNCcon il nome dell'oggetto RootSync che vuoi cercare.Sostituisci
REPO_SYNCcon il nome dell'oggetto RepoSync che vuoi cercare.Sostituisci
REPO_SYNC_NAMESPACEcon il nome dell'oggetto RepoSync che vuoi cercare.- Il valore del campo
.status.sync.commitdeve essere uguale al tuo ultimo commit. - Il campo
.status.syncnon contiene "errori".
- Il valore del campo
Verifica che tutte le risorse nell'ultimo commit siano riconciliate. Per ogni oggetto RootSync o RepoSync, esiste un oggetto ResourceGroup univoco che acquisisce lo stato di riconciliazione delle risorse gestite dichiarate nel repository Git. L'oggetto ResourceGroup ha lo stesso spazio dei nomi e lo stesso nome dell'oggetto RootSync o RepoSync.
Ad esempio, per l'oggetto RootSync con il nome
root-syncnello spazio dei nomiconfig-management- system, l'oggetto ResourceGroup corrispondente è ancheroot-syncnello spazio dei nomiconfig-management-system. Una volta applicato correttamente l'ultimo commit, l'oggetto ResourceGroup contiene il gruppo, il tipo, lo spazio dei nomi e il nome delle risorse gestite dell'ultimo commit.Esegui questo comando per ottenere un oggetto ResourceGroup:
# get the ResourceGroup object for a RootSync object ka get resourcegroup ROOT_SYNC -n config-management-system -o yaml # get the ResourceGroup object for a RepoSync object ka get resourcegroup REPO_SYNC -n REPO_SYNC_NAMESPACE -o yamlSostituisci
ROOT_SYNCcon il nome dell'oggetto ResourceGroup che vuoi cercare.Sostituisci
REPO_SYNCcon il nome dell'oggetto ResourceGroup che vuoi cercare.Sostituisci
REPO_SYNC_NAMESPACEcon il nome dell'oggetto ResourceGroup che vuoi cercare.- Verifica che
.status.observedGenerationsia uguale al valore del campo.metadata.generationnell'oggetto ResourceGroup. - Verifica che la condizione
Stallede la condizioneReconcilingabbiano entrambestatuscome"False". - Controlla che ogni elemento nel campo
.status.resourceStatusesabbia lo statoCurrent.
- Verifica che
Controlla se esegui un commit utilizzando un file YAML:
(Facoltativo) Utilizza il comando
nomosse configuri i contestikubectl:$ nomos status Connecting to clusters... *root-admin-admin@root-admin -------------------- <root>:root-sync https://iac.zone1.google.gdch.test/gdch/iac.git/infrastructure/zonal/zones/ZONE_NAME/root-admin@main SYNCED 4a276fb67d17471f1ba812c725b75a76a1715009 Managed resources: NAMESPACE NAME STATUS default service/hello UnknownSe esegui il commit di un file YAML di esempio, esegui:
$ ka get svc/helloViene visualizzato un servizio creato dall'esempio YAML.
Esegui questo comando:
ka describe svc/helloViene visualizzato il seguente oggetto:
Name: myrole Labels: app.kubernetes.io/managed-by=configmanagement.gke.io configsync.gke.io/declared-version=v1 Annotations: config.k8s.io/owning-inventory: config-management-system_root-sync configmanagement.gke.io/cluster-name: my-cluster configmanagement.gke.io/managed: enabled configmanagement.gke.io/source-path: config-sync-quickstart/multirepo/root/gamestore-myrole.yaml configmanagement.gke.io/token: 747b843a7ddbd945c0616034a935cf648b58e7b5 configsync.gke.io/declared-fields: {"f:rules":{}} configsync.gke.io/git-context: {"repo":"https://github.com/GoogleCloudPlatform/anthos-config-management-samples","branch":"main","rev":"HEAD"} configsync.gke.io/manager: :root configsync.gke.io/resource-id: rbac.authorization.k8s.io_role_gamestore_myrole PolicyRule: Resources Non-Resource URLs Resource Names Verbs --------- ----------------- -------------- ----- pods [] [] [get list]Aggiungi una nuova annotazione al servizio:
$ ka annotate --overwrite svc/hello google.com/test=aaaEsegui di nuovo
describe, conferma che l'annotazione esiste e verifica che Config Sync non l'abbia sovrascritta.Eseguire l'override di un'annotazione gestita da IaC:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=value-from-kubectlLa modifica viene negata nel seguente messaggio di errore:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=asfas Error from server (Forbidden): admission webhook "v1.admission-webhook.configsync.gke.io" denied the request: kubernetes-admin cannot modify fields of object "_service_default_hello" managed by Config Sync: .metadata.annotations.google.com/annotation-in-iac
Risolvere i problemi di installazione
Se ricevi errori di rendering, ad esempio Kustomize non esegue il rendering delle configurazioni, utilizza:
$ ka logs -n config-management-system deployment/root-reconciler -c hydration-controller -f
I container in root-reconciler sono i seguenti:
git-sync: clona il repository Git remoto.Hydration-controller:esegue il rendering delle configurazioni Kustomize e dei grafici Helm se il file di configurazione Kustomization esiste nella directory principale.reconciler:Appiattisce la gerarchia del repository, la riconcilia tramite il server API e verifica la presenza di errori.
Per ulteriori informazioni, segui la guida ufficiale Risolvi i problemi di Config Sync
Config Management Google Cloud:
https://cloud.google.com/anthos-config-management/docs/how-to/troubleshooting-config-sync.
Risoluzione dei problemi
Eseguire il rollback dell'accesso solo ADFS
A scopo di debug, può essere utile accedere come utente ioadmin iniziale utilizzando l'accesso con password predefinita. Per aggiungere di nuovo
l'accesso tramite password con GitLab, esegui i seguenti comandi kubectl.
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: true)"
Al termine dell'utilizzo dell'utente locale, riattiva l'autenticazione solo ADFS utilizzando:
export TOOLBOX=$(kubectl get pods --no-headers=true -n gitlab-system -lapp=toolbox,release=gitlab -o name | cut -c 5-)
# Wait for pod to be ready.
kubectl wait pods -n gitlab-system -lapp=toolbox,release=gitlab --for condition=Ready
kubectl exec $TOOLBOX -n gitlab-system -- /srv/gitlab/bin/rails runner "Gitlab::CurrentSettings.update!(password_authentication_enabled_for_web: false)"
Eseguire l'onboarding di un nuovo utente da ADFS
Un utente accede a Distributed Cloud con ADFS. In questo modo viene creato un account utente all'interno di GitLab con il relativo account AD.
Come amministratore, completa i seguenti passaggi per aggiungere manualmente un utente appena creato al gruppo GitLab:
Accedi a GitLab come amministratore di GitLab o amministratore del gruppo Distributed Cloud in GitLab.
Vai al gruppo Distributed Cloud in GitLab o
https://iac.GDC_URL/gdch.Fai clic su Visualizza gruppo nell'area amministratore di
https://iac.GDC_URL/admin/groups/gdch.Aggiungi un account di un utente appena creato al gruppo Distributed Cloud come sviluppatore.
Confermare lo stato di riconciliazione
Per ulteriori passaggi per la risoluzione dei problemi, verifica che la subcomponent sia stata riconciliata:
root@count-bootstrapper:~/adfs# kr get subcomponent -n root iac-gitlab
NAME AGE STATUS
iac-gitlab 10d ReconciliationCompleted
e assicurati che la CR gitlab sia nello stato Running:
root@count-bootstrapper:~/adfs# kr get gitlab -n gitlab-system gitlab
NAME STATUS VERSION
gitlab Running 7.11.10
Infine, se un job di migrazione sembra bloccato, controlla il grafico Helm del sottocomponente e assicurati che non manchino secret.