En esta página se presenta el segundo día de operaciones del flujo de trabajo de infraestructura como código (IaC).
Requisitos previos
- Completa la configuración de IaC.
- Opcional: Descarga e instala la herramienta de línea de comandos de nomos para depurar:
Visita https://cloud.google.com/anthos-config-management/docs/how-to/nomos-command cuando estés fuera del entorno aislado y puedas acceder a esta URL.
Iniciar sesión en GitLab
Abre la consola web de GitLab en
https://iac.GDC_URL.Sustituye
GDC_URLpor la URL base del proyecto de GDC.En la interfaz de usuario de GitLab, haz clic en el botón Inicio de sesión con SAML para que se te redirija a la página de inicio de sesión de Servicios de federación de Active Directory (ADFS) del centro de operaciones de TI (OC IT).
Inicia sesión con tus credenciales de ADFS de OC IT para ver la página principal de GitLab.
Para acceder a la CLI, se necesita un token de acceso personal (PAT). Crea un token de acceso personal para tu usuario con el nivel de acceso necesario siguiendo estos pasos del artículo de GitLab Crear un token de acceso personal:
https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html#create-a-personal-access-token.Una vez que hayas creado un PAT, podrás realizar la autenticación con la herramienta de la CLI.
Flujo de trabajo de infraestructura como código
Por lo general, un flujo de trabajo de IaC consta de los siguientes pasos:
Genera los cambios de YAML correspondientes en el repositorio
iacde GitLab de la siguiente manera:- Si el archivo no existe, selecciona el icono Nuevo archivo en la barra lateral.

- En la ventana emergente Crear archivo, introduce el nombre del nuevo archivo con la ruta completa y selecciona Crear archivo.

Si el archivo existe, en la barra lateral, selecciónalo para abrirlo en un panel nuevo.
Haz los cambios necesarios en el archivo.
Sube el cambio como una confirmación de Git y envía la confirmación para que se haga una revisión de código obligatoria de la siguiente manera:
Selecciona la opción Confirmar en la barra lateral para ver más opciones.

Escribe un mensaje de confirmación en el área de texto. Incluye toda la información útil en el mensaje.
Selecciona la opción Crear una rama.
Selecciona la casilla Iniciar una nueva solicitud de combinación.
Haz clic en Confirmar para abrir la vista previa del formulario de solicitud de combinación.
Crea una solicitud de combinación y haz los cambios necesarios, como los siguientes:
- En el campo Título, introduce un nombre para la solicitud de combinación.
- En el campo Descripción, introduce una descripción.
- En la sección Opciones de combinación, marca la casilla Eliminar rama de origen cuando se acepte la combinación de origen.
- Haz clic en Crear solicitud de combinación. La solicitud de combinación se envía automáticamente al revisor.

Pide al propietario correspondiente que revise y apruebe la confirmación como parte del proceso de aprobación multiparte.
Inserta la confirmación.
Verifica el resultado en el clúster correspondiente.
Consejos de depuración
En esta sección se describen consejos de depuración opcionales para IaC. Para verificar que tus configuraciones son precisas, debes tener instalada la herramienta de línea de comandos de nomos.
Previsualizar y validar las configuraciones renderizadas
Antes de que Config Sync renderice las configuraciones y las sincronice con el clúster, asegúrate de que las configuraciones sean precisas ejecutando nomos hydrate para previsualizar la configuración renderizada y nomos vet para validar que el formato sea correcto.
Cambia al directorio raíz de Git local.
Ejecuta el siguiente
nomos hydratecon las siguientes marcas:nomos hydrate \ --source-format=unstructured \ --output=OUTPUT_DIRECTORYEn este comando:
--source-format=unstructuredpermite quenomos hydratefuncione en un repositorio no estructurado. Como usas configuraciones de Kustomize y charts de Helm, debes usar un repositorio no estructurado y añadir esta marca.--output=OUTPUT_DIRECTORYte permite definir una ruta a las configuraciones renderizadas. Sustituye OUTPUT_DIRECTORY por la ubicación en la que quieras guardar el resultado.
Comprueba la sintaxis y la validez de tus configuraciones ejecutando
nomos vetcon las siguientes marcas:nomos vet \ --source-format=unstructured \ --keep-output=true \ --output=OUTPUT_DIRECTORYEn este comando:
--source-format=unstructuredpermite quenomos vetfuncione en un repositorio sin estructurar.--keep-output=trueguarda las configuraciones renderizadas.--output=OUTPUT_DIRECTORYes la ruta a las configuraciones renderizadas.
Verificar el proceso
Para verificar el estado de la sincronización, sigue estos pasos:
Usa el alias de shell
ka:$ alias ka='kubectl --kubeconfig $HOME/root-admin-kubeconfig'
El alias
kaconfigurakubectlpara comunicarse con el clústerroot-admin.Verifica que la sincronización funciona:
$ ka get rootsync/root-sync -n config-management-systemVerás la confirmación que usa Config Sync y cualquier error, si lo hay.
Una vez que hayas verificado el estado de la sincronización, utiliza una de las siguientes opciones:
Comprueba si has aplicado la última confirmación en el repositorio de Git correctamente:
Consulta el campo
.status.syncdel objeto RootSync o RepoSync. Puedes acceder al campo.status.synccon el siguiente 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}'Sustituye
ROOT_SYNCpor el nombre del objeto RootSync que quieras buscar.Sustituye
REPO_SYNCpor el nombre del objeto RepoSync que quieras buscar.Sustituye
REPO_SYNC_NAMESPACEpor el nombre del objeto RepoSync que quieras buscar.- El valor del campo
.status.sync.commitdebe ser igual a tu confirmación más reciente. - El campo
.status.syncno tiene ningún error.
- El valor del campo
Comprueba que todos los recursos de la última confirmación se hayan conciliado. Por cada objeto RootSync o RepoSync, hay un objeto ResourceGroup único que registra el estado de conciliación de los recursos gestionados declarados en el repositorio de Git. El objeto ResourceGroup tiene el mismo espacio de nombres y nombre que el objeto RootSync o RepoSync.
Por ejemplo, en el caso del objeto RootSync con el nombre
root-syncen el espacio de nombresconfig-management- system, el objeto ResourceGroup correspondiente también esroot-syncen el espacio de nombresconfig-management-system. Cuando hayas aplicado la última confirmación correctamente, el objeto ResourceGroup contendrá el grupo, el tipo, el espacio de nombres y el nombre de los recursos gestionados de la última confirmación.Ejecuta el siguiente comando para obtener un objeto 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 yamlSustituye
ROOT_SYNCpor el nombre del objeto ResourceGroup que quieras buscar.Sustituye
REPO_SYNCpor el nombre del objeto ResourceGroup que quieras buscar.Sustituye
REPO_SYNC_NAMESPACEpor el nombre del objeto ResourceGroup que quieras buscar.- Comprueba que
.status.observedGenerationsea igual al valor del campo.metadata.generationdel objeto ResourceGroup. - Verifica que la condición
Stalledy la condiciónReconcilingtenganstatuscomo"False". - Comprueba que cada elemento del campo
.status.resourceStatusestiene el estadoCurrent.
- Comprueba que
Comprueba si haces una confirmación con un archivo YAML:
Opcional: Usa el comando
nomossi configuras tuskubectlcontextos:$ 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 UnknownSi confirmas un archivo YAML de ejemplo, ejecuta lo siguiente:
$ ka get svc/helloVerás un servicio creado a partir del archivo YAML de ejemplo.
Ejecuta el siguiente comando:
ka describe svc/helloVerás el siguiente objeto:
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]Añade una nueva anotación al servicio:
$ ka annotate --overwrite svc/hello google.com/test=aaaVuelve a ejecutar
describe, confirma que la anotación existe y comprueba que Config Sync no la ha sobrescrito.Anular una anotación que gestiona IaC:
$ ka annotate --overwrite svc/hello google.com/annotation-in-iac=value-from-kubectlEl cambio se deniega y aparece el siguiente mensaje de error:
$ 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
Solucionar problemas de instalación
Si recibe errores de renderizado, como que Kustomize no renderiza las configuraciones, utilice lo siguiente:
$ ka logs -n config-management-system deployment/root-reconciler -c hydration-controller -f
Los contenedores de root-reconciler son los siguientes:
git-sync: clona el repositorio de Git remoto.Hydration-controller:renderiza las configuraciones de Kustomize y los gráficos de Helm si el archivo de configuración de Kustomization se encuentra en el directorio raíz.reconciler:Aplana la jerarquía del repositorio, la reconcilia a través del servidor de la API y comprueba si hay errores.
Para obtener más información, sigue la guía oficial Solucionar problemas de Config Sync
Config Management Google Cloud:
https://cloud.google.com/anthos-config-management/docs/how-to/troubleshooting-config-sync.
Solución de problemas
Restaurar el inicio de sesión solo con ADFS
Para depurar, puede ser útil iniciar sesión como usuario inicial ioadmin con la contraseña predeterminada. Para volver a añadir el inicio de sesión con una contraseña en GitLab, ejecuta los siguientes comandos de 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)"
Cuando hayas terminado de usar el usuario local, vuelve a habilitar la autenticación solo con ADFS mediante el siguiente comando:
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)"
Incorporar un nuevo usuario desde ADFS
Un usuario inicia sesión en Distributed Cloud con ADFS. De esta forma, se crea una cuenta de usuario en GitLab con su cuenta de AD.
Como administrador, sigue estos pasos para añadir manualmente a un usuario recién creado al grupo de GitLab:
Inicia sesión en GitLab como administrador de GitLab o administrador del grupo Distributed Cloud en GitLab.
Ve al grupo Distributed Cloud en GitLab o
https://iac.GDC_URL/gdch.En el área de administración de
https://iac.GDC_URL/admin/groups/gdch, haz clic en Ver grupo.Añade la cuenta de un usuario recién creado al grupo Distributed Cloud como desarrollador.
Confirmar el estado de la conciliación
Para seguir solucionando el problema, comprueba que se haya completado la conciliación de subcomponent:
root@count-bootstrapper:~/adfs# kr get subcomponent -n root iac-gitlab
NAME AGE STATUS
iac-gitlab 10d ReconciliationCompleted
Asegúrate de que el CR gitlab esté en el estado Running:
root@count-bootstrapper:~/adfs# kr get gitlab -n gitlab-system gitlab
NAME STATUS VERSION
gitlab Running 7.11.10
Por último, si una tarea de migración parece que se ha bloqueado, comprueba el gráfico de Helm del subcomponente y asegúrate de que no falte ningún secreto.