Tiempo estimado para completar la actividad: 60 minutos
Propietario del componente operable: IACPerfil de habilidad: ingeniero de implementación
La infraestructura como código (IaC) en Google Distributed Cloud (GDC) aislado consta de dos sistemas:
Config Sync es un componente que se usa en la infraestructura como código (IaC) de Distributed Cloud para administrar los recursos a nivel del clúster y los servicios compartidos.
GitLab aloja un repositorio de Git que sirve como fuente de información (SoT) para el Sincronizador de configuración. Un clúster de destino es un clúster que Sincronizador de configuración administra desde la SoT en el repositorio.
- GitLab incluye un sistema de revisión de código para implementar la aprobación de varias partes (MPA) en los cambios de políticas y configuración.
En una implementación, se involucran los siguientes dos tipos de zonas:
- Zona de anclaje: Es la zona que ya forma parte del plano de control global. La primera zona es la zona de anclaje de una implementación.
- Zona de unión: Es la zona que se une al plano de control global.
Sincronizador de configuración administra objetos de Kubernetes en los clústeres root-admin y de administrador de la organización. Está configurado para leer desde el repositorio de IaC de Distributed Cloud que proporciona GitLab en el clúster principal root-admin.
Distributed Cloud instala IaC durante el arranque. Ejecuta los siguientes pasos manuales para completar la configuración de IaC.
23.1. Configura la primera zona de IaC
En esta sección, se incluyen los pasos para configurar la IaC en la primera zona de implementación.
23.2. Requisitos previos
- Se inició el clúster de administrador raíz.
- Crea un cliente de SAML en la instancia de Servicios de federación de Active Directory (ADFS) de OC IT como el cliente de federación de identidades en GitLab.
23.3. Acceso el día 0 a GitLab
Abre la consola web de GitLab en
https://iac.GDC_URL.GDC_URLes el dominio que se especificó en la 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}')Usa el nombre de usuario del día 0:
ioadmin.Ejecuta el siguiente comando para obtener la contraseña:
export IO_ADMIN_PWD=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG \ get secret gitlab-basic-users -n gitlab-system \ -o jsonpath='{.data.admin}' | base64 -d)Accede y navega a Menú > Proyectos > Explora proyectos gdch / iac para verificar que se haya creado el repositorio de Git
iac.
23.4. Crea usuarios administradores
- Crea usuarios administradores dedicados en ADFS. No debes usarlos para fines no administrativos y deben tener la extensión "-ga". Ten en cuenta que tus usuarios administradores iniciales DEBEN usar el mismo
emailaquí que el que usan en los Servicios de federación de Active Directory (ADFS). Ejecuta el siguiente comando para crear un usuario nuevo:
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. Actualiza la licencia de GitLab
Muchas funciones de GitLab requieren una licencia "Ultimate" para funcionar. En este paso, reemplazarás la licencia temporal que se incluye con GDC por la licencia propia del sitio. Activa GitLab EE con un archivo o una clave de licencia contiene todos los detalles.
La clave de licencia del sitio que recibiste es un archivo de texto ASCII codificado en base64 con una extensión .gitlab-license. Usarás esta clave para activar GitLab.
- Accede a la consola web de GitLab como
ioadmin. - En la barra de navegación, selecciona Menú y, luego, Administrador.
- En el menú de navegación, selecciona Configuración y, luego, General.
- En el área Add License, agrega una licencia subiendo el archivo o ingresando la clave.
- Selecciona la casilla de verificación de las Condiciones del Servicio.
- Selecciona Agregar licencia.
23.6. Configura el repositorio de GitLab
ConfigSync administra objetos de Kubernetes en clústeres de administrador raíz y clústeres de administrador de la organización, y está configurado para leer desde el repositorio de IaC de Distributed Cloud que GitLab entrega en el clúster de administrador raíz.
Debemos configurar las carpetas iniciales de GitLab para que Configsync consuma las configuraciones y las aplique al clúster de Kubernetes requerido.
infrastructure
│ └── zonal
│ └── zones
│ ├── ${anchor_zone_name}
│ ├── root-admin
│ ├── kustomization.yaml
│ └── global
│ └── orgs
│ ├── root
│ ├── kustomization.yaml
Sigue estos pasos para crear la estructura de archivos inicial:
Abre el repositorio
iacdesde "Menú -> Explorar proyectos".Abre el "IDE web".
Crea un archivo en
/infrastructure/zonal/zones/${anchor_zone_name}/root-admin/kustomization.yamlcon el siguiente contenido:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomizationHaz clic en el botón “Confirmar”.
Selecciona "Confirmar en la rama principal" y confirma.
23.7. Configura la aprobación de varias partes (MPA)
Usa esta sección para configurar el sistema de modo que exija la aprobación de cada solicitud de combinación en el repositorio iac y evitar cualquier confirmación directa (sin crear una solicitud de combinación) en la rama main para aplicar la aprobación de varias partes (MPA).
23.7.1. Habilita la aprobación de solicitudes de combinación en GitLab
Navega al repositorio
iac.Usa el IDE web para crear un archivo llamado
CODEOWNERSen la carpeta raíz y agrega el grupo de Distributed Cloud como propietario del repositorio en el primer paso:[Repository Owners] * @gdchSolo los usuarios agregados al archivo
CODEOWNERSpueden aprobar solicitudes de combinación en el repositorioiac. Este archivo genérico solo se usa para la configuración. En IAC-R0007, se proporcionan instrucciones más detalladas para los permisos de aprobación detallados.Haz clic en el botón Confirmar.
Selecciona Confirmar en la rama principal y confirma.
Para agregar más usuarios al archivo
CODEOWNERS, crea una solicitud de combinación para que la aprueben los usuarios existentes enCODEOWNERS.
23.8. Conecta los Servicios de federación de Active Directory (ADFS) a GitLab
Puedes conectar ADFS a GitLab con un cliente SAML a través del framework de Auth de GitLab.
Si usas una autoridad de certificación privada para tu proveedor de identidad, debes agregarla a la instancia de GitLab. Obtén la versión en base64 del certificado de la CA de ADFS y colócala en un secreto.
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. Configura ADFS para la autenticación de SAML
Antes de conectar GitLab a ADFS con la configuración de Helm, ADFS debe crear un cliente de SAML. En tu instancia de Windows, sigue estos pasos:
Ejecuta la app de Administración de AD FS como administrador.
En el directorio AD FS, haz clic en la carpeta Relación de confianza con la parte autenticada. En el panel Actions, haz clic en Add Relying Party Trust.

Se abrirá el Asistente para agregar relación de confianza con la parte autenticada. En el primer paso, selecciona Claims aware y haz clic en Start.

Selecciona Ingresar datos sobre el usuario de confianza de forma manual y haz clic en Siguiente.

Ingresa información reconocible sobre la instancia de ADFS en los campos Nombre visible y Notas. Haz clic en Siguiente.

Haz clic en Siguiente para omitir el paso Configurar certificado.
Haz clic en la casilla de verificación Habilitar compatibilidad con el protocolo SAML 2.0 WebSSO. En el campo URL del servicio SSO SAML 2.0 de la parte autenticada, ingresa lo siguiente:
https://iac.GDC_URL/users/auth/saml/callback.Reemplaza GDC_URL por la URL de la organización en GDC.

Asigna un nombre a la IaC y agrega lo siguiente:
https://iac.GDC_URL.sesame.street https://iac.GDC_URL.sesame.street/users/auth/saml/callbackHaz clic en Siguiente en los pasos Configurar identificadores, Elegir política de control de acceso y Listo para agregar confianza para finalizar el asistente.
# Replace GDC_URL with the cells URL, for example, bert.sesame.street https://iac.GDC_URL https://iac.GDC_URL/users/auth/saml/callbackLa pantalla se actualizará con la relación de confianza con la parte autenticada que acabas de crear. Haz clic con el botón derecho en tu elemento y selecciona Editar política de emisión de reclamaciones.
Haz clic en el botón Agregar regla y, en el paso Elige un tipo de regla, selecciona la Plantilla de regla de reclamación de Enviar atributos LDAP como reclamaciones. Haga clic en Siguiente.
En el paso Configurar regla de reclamación, completa los siguientes parámetros:
- En el campo Nombre de la regla de reclamo, ingresa
Email. - En la lista Attribute Store, selecciona Active Directory.
- En la tabla Mapping of LDAP attributes to outgoing claim types, en la columna LDAP attribute, selecciona o escribe
E-Mail-Addresses. En la columna Tipo de reclamo saliente de la tabla, selecciona o escribe
E-Mail Address.
Finaliza el asistente.
- En el campo Nombre de la regla de reclamo, ingresa
Haz clic en el botón Agregar regla.
Haz clic con el botón derecho en el elemento y, luego, vuelve a hacer clic en Edit Claim Issurance Policy.
En el paso Elige un tipo de regla, selecciona la Plantilla de regla de reclamación de Transformar una reclamación entrante. Haz clic en Siguiente.
En el paso Configurar regla de reclamación, completa los siguientes parámetros:
- En el campo Nombre de la regla de reclamo, ingresa
Transform email to nameid. - En el campo Tipo de reclamo entrante, selecciona o escribe
E-Mail Address. - En el campo Tipo de reclamo saliente, selecciona o escribe
Name ID. - En el campo Formato del ID de nombre saliente, selecciona o escribe
Persistent Identifier. Selecciona la opción Pasar todos los valores de la reclamación.

Finaliza el asistente.
- En el campo Nombre de la regla de reclamo, ingresa
23.8.2. Agrega la configuración de SAML a GitLab
En esta sección, se proporcionan los pasos para agregar la configuración de SAML a GitLab.
23.8.2.1. Registra GitLab en el proveedor de identidad
Abre la configuración del cliente SAML en ADFS. GitLab requiere los siguientes valores para integrarse con tu IdP:
assertion_customer_service_url: El IdP redirecciona a esta URL después de autenticar al usuario. Establécelo en
https://iac.GDC_URL/users/auth/saml/callback.Reemplaza GDC_URL por la URL de la organización en GDC.
idp_cert_fingerprint: GitLab usa esta huella digital para verificar el certificado de un mensaje SAML entrante. Para encontrar el
idp_cert_fingerprinten ADFS, sigue estos pasos:Ejecuta la app
AD FS Managementcomo administrador.En el árbol de directorios AD FS > Servicio > Certificados, haz clic en la carpeta Certificados. Verás un certificado en la sección Firma de token. Haz clic con el botón derecho en ese certificado y selecciona Ver certificado.
En la ventana Certificado, ve a la pestaña
Details. Desplázate por la lista hasta que veas un elemento llamadoThumbprint. Haz clic en el elemento y copia el contenido que se muestra en la consola.
idp_sso_target_url: GitLab segmentará este extremo cuando se autentique por SAML. Para encontrar elidp_sso_target_urlen ADFS, sigue estos pasos:Ejecuta la app de Administración de AD FS como administrador.
Haz clic en la carpeta Endpoints en el árbol de directorios AD FS > Service.
Endpoints
En la pantalla central, busca una fila con el tipo SAML 2.0/WS-Federation. El extremo de destino es tu URL de ADFS y el extremo de destino. Por ejemplo, si el nombre de dominio de tu instancia es
https://ocit.gdch.test/y el extremo de destino es/adfs/ls, elidp_sso_target_urleshttps://ocit.gdch.test/adfs/ls.
issuer: Es la URL que usa GitLab para identificarse. Usahttps://iac.GDC_URLPrepara los valores del IdP anteriores y escríbelos en una configuración personalizada llamada
custom_saml.yaml. Edita este archivo YAML para obtener la configuración necesaria para tu cliente de 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'] } EOFCuando esté todo listo, aplica tu configuración como un secreto llamado
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.yamlPuedes usar el secreto cuando crees
subcomponentoverride.yaml. Obtén más información sobre las variables en la documentación de 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
Esto crea la anulación del subcomponente. Para verificar que se creó la configuración, ejecuta el siguiente comando:
sh
kubectl get subcomponentoverride -n root
El resultado es similar a este:
NAME AGE
iac-gitlab 1s
23.8.2.2. Inicializa el primer usuario de SAML que accedió
Si habilitas SAML, se quitará el acceso local. Los usuarios deben seguir los procedimientos de acceso de emergencia para volver a habilitar el acceso local y recuperar el acceso a ioadmin.
Los primeros administradores inicializados que se crearon en Crear usuarios administradores funcionarán como administradores sin más modificaciones. No deberían tener acceso al proyecto. Para agregar usuarios al proyecto de Distributed Cloud, sigue los pasos que se indican en Incorpora un usuario nuevo desde ADFS.
23.8.3. Verifica la conexión de ADFS
Verifica el estado de los pods de GitLab
webservice:kubectl --kubeconfig $KUBECONFIG get pod -l app=webservice,release=gitlab -n gitlab-systemNOMBRE READY ESTADO REINICIOS EDAD gitlab-webservice-default-5d99b4d7c7-9fmln 2/2 En ejecución 0 4 min 6 s gitlab-webservice-default-5d99b4d7c7-w99p4 2/2 En ejecución 0 96 s gitlab-webservice-default-7884d4c8b9-qjhtv 2/2 Finalizando 0 18 h Ve a
https://iac.GDC_URLy verifica que veas esta pantalla, que muestra el botón ADFS SAML para usar el acceso con SSO y no muestra los campos directos de usuario y contraseña.Haz clic en SAML de ADFS. Verifica que se te solicite acceder a ADFS.
Después de acceder a ADFS, verifica que también hayas accedido a GitLab y que ahora puedas interactuar con la aplicación.
23.9. Bloquea la cuenta de administrador del día 0
Después de habilitar SAML, inhabilita la autenticación con contraseña para la interfaz web y, luego, restablece la contraseña de ioadmin, ya que persiste el acceso a la API.
Ejecuta la siguiente secuencia de comandos.
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}"Almacena la contraseña nueva en el secreto
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)"'}]'
Usa las cuentas de OI ADFS para acceder.
23.10. Configura la IaC de la zona de unión
En esta sección, se describen los pasos para configurar la IaC en la zona de unión de la implementación.
23.11. Requisitos previos
Antes de configurar la zona de unión, debes iniciar el clúster de administrador raíz.
23.12. Configura la credencial de configsync
Sigue estos pasos para configurar las credenciales del Sincronizador de configuración:
Conéctate al clúster de administrador raíz de la zona de anclaje.
Recupera las credenciales del Sincronizador de configuración:
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.jsonCopia el archivo
iac-creds-replica.json.Conéctate al clúster de administrador raíz de la zona que se une.
Pega el archivo
iac-creds-replica.json.Aplica las credenciales del Sincronizador de configuración al clúster de administrador raíz:
# Use the root kubeconfig of the root admin cluster. export JOINING_KUBECONFIG=JOINING_ZONE_KUBECONFIG kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-creds-replica.jsonAsegúrate de que la credencial del Sincronizador de configuración esté configurada:
kubectl --kubeconfig $JOINING_KUBECONFIG get secret -n config-management-system \ iac-creds-replica -o yaml
23.13. Configura la fuente de información del Sincronizador de configuración
Sigue estos pasos para configurar la fuente de información del Sincronizador de configuración:
Conéctate al clúster de administrador raíz de la zona de anclaje.
Obtén el FQDN de GitLab:
export primaryDnsFQDN=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get DNSRegistration \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Conéctate al clúster de administrador raíz de la zona que se une.
Crea el archivo
SubcomponentOverridede IaC:echo "apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac namespace: root spec: subComponentRef: "iac-configsync" backend: operableParameters: primaryDnsFQDN: ${primaryDnsFQDN}" > iac-subcomponentoverride.yamlConfigura el destino del Sincronizador de configuración:
kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-subcomponentoverride.yamlAsegúrate de que el repositorio de Git del Sincronizador de configuración esté configurado:
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync -n config-management-system \ root-sync -o jsonpath='{.spec.git.repo}'Asegúrate de que Config Sync no tenga errores en las zonas de anclaje y de unión.
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync \ -o jsonpath='{.status.source.errors[0].errorMessage}'Si
root-synccontiene el error KNV2004, la ruta de directorio que usa la zona de unión o anclaje no existe en el repositorioiac. Para encontrar el directorio requerido, ejecuta lo siguiente:kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync -o jsonpath='{.spec.git.dir}'Crea la ruta de acceso que generó el comando anterior en el repositorio
iacy agrega un archivokustomization.yamlgenérico. Luego, fusiona la ramamain.Vuelve a ejecutar el comando
get RootSyncoriginal para asegurarte de que el Sincronizador de configuración no tenga errores.