Soluciona problemas de conexión a la fuente de confianza

En esta página, se muestra cómo resolver problemas que se producen cuando el Sincronizador de configuración no puede establecer una conexión con tu fuente de confianza.

Problemas de autenticación

Si la autenticación falla, el Sincronizador de configuración no puede conectarse a la fuente de información. En las siguientes secciones, se muestra cómo resolver algunos problemas de autenticación.

No se pudo verificar el certificado del servidor para los servidores de Git.

Las conexiones a servidores Git privados usan TLS para verificar la autenticidad del servidor. Para hacer esta validación, debes proporcionar un certificado que identifique la autoridad certificadora raíz y cualquier autoridad certificadora intermedia que certifique la identidad del servidor de Git. Si la verificación del certificado del servidor de Git falló, significa que no se puede establecer la cadena de confianza.

Si recibes un error que indica que falló la verificación del certificado del servidor, es posible que uno de los siguientes problemas sea la causa:

  • No se especifica el certificado de la autoridad certificadora (CACert). Para corregir este problema, agrega el certificado de la AC como un secreto y haz referencia a él en el campo spec.git.caCertSecretRef de tus objetos RootSync o RepoSync.
  • El certificado de AC está incompleto. Para solucionar este problema, corrige el secreto de CACert para que contenga la cadena de confianza completa, incluidos el certificado raíz y cualquier certificado intermedio.
  • El certificado de AC no es válido. Para solucionar este problema, descarga la cadena de certificados del vínculo que especifica el certificado que presenta el servidor y, luego, actualiza el secreto de CACert.

No se puede activar el Secret de Git

Si recibes el siguiente error cuando el contenedor git-sync intenta sincronizar un repositorio con un Secret, entonces el Secret de Git no se activó correctamente en el contenedor git-sync:

KNV2004: unable to sync repo Error in the git-sync container: ERROR: can't configure SSH: can't access SSH key: stat /etc/git-secret/ssh: no such file or directory: lstat /repo/root/rev: no such file or directory

Esto puede deberse a que cambiaste el tipo de autenticación del repositorio de Git de none, gcenode o gcpserviceaccount a otros tipos que necesiten un Secret.

Para resolver este problema, ejecuta los siguientes comandos a fin de reiniciar Reconciler Manager y los conciliadores:

# Stop the reconciler-manager Pod. The reconciler-manager Deployment spins
# up a new Pod which can pick up the latest `spec.git.auth`.
kubectl delete po -l app=reconciler-manager -n config-management-system

# Delete the reconciler Deployments. The reconciler-manager recreates the
# reconciler Deployments with correct volume mount.
kubectl delete deployment -l app=reconciler -n config-management-system

Problemas de configuración

A menudo, los problemas con la configuración pueden hacer que el Sincronizador de configuración no pueda conectarse a tu fuente de información. En las siguientes secciones, se explica cómo identificar y resolver problemas de configuración comunes.

Nombre de gráfico no válido

Cuando realices la sincronización desde un repositorio de Helm, asegúrate de establecer el valor correcto para spec.helm.chart. El nombre del gráfico no contiene el nombre del repositorio, la versión del gráfico ni .tgz. Puedes verificar el nombre del gráfico con el comando helm template.

Directorio de configuración no válido

Verifica si hay errores en tus parámetros de configuración, como un valor incorrecto para policyDir en el objeto ConfigManagement, spec.git.dir o spec.oci.dir en el objeto RootSync o RepoSync. El valor del directorio se incluye en cualquier mensaje de error de KNV2004 que recibas. Verifica el valor en tu repositorio de Git o en la imagen de OCI.

La rama de Git no es válida

Revisa los registros del contenedor git-sync para ver si hay un error como Remote branch BRANCH_NAME not found in upstream origin o warning: Could not find remote branch BRANCH_NAME to clone.. Ten en cuenta que la rama predeterminada se establece en master si no se especifica.

Credenciales de Git, Helm o OCI no válidas

Revisa los registros del Sincronizador de configuración del contenedor git-sync, helm-sync o oci-sync en busca de uno de los siguientes errores:

  • Could not read from remote repository. Ensure you have the correct access rights and the repository exists.
  • Invalid username or password. Authentication failed for ...
  • 401 Unauthorized

Para un repositorio de Git, verifica que las credenciales de Git y el Secret git-creds estén configurados de forma correcta.

Para un repositorio de Helm, verifica que las credenciales de Helm estén configuradas correctamente.

En el caso de las imágenes de OCI, verifica que las credenciales de OCI estén configuradas correctamente.

La URL del repositorio de Git no es válida

Revisa los registros del contenedor git-sync para ver si hay un error como Repository not found.

Verifica que estés usando el formato de URL correcto. Por ejemplo, si usas un par de claves SSH a fin de autenticar en el repositorio de Git, asegúrate de que la URL que ingreses para tu repositorio Git cuando configures el Sincronizador de configuración mediante el protocolo SSH.

La URL del repositorio de Helm no es válida

Revisa los registros del contenedor helm-sync para ver si hay un error como ...not a valid chart repository. Puedes verificar la URL de tu repositorio de Helm con el comando helm template.

URL del registro de OCI no válida

Un valor no válido en el campo spec.oci.image o spec.oci.dir de un objeto RootSync o RepoSync puede causar problemas de conexión. Verifica que estos valores sean correctos. Por ejemplo, si sincronizas desde un registro de OCI, la URL debe comenzar con oci://.

También puedes consultar los registros del contenedor oci-sync para obtener más información.

Problemas de red

Si sospechas que el problema está relacionado con la red de tu clúster, comienza con estos pasos para solucionar problemas.

No se pudo resolver el host: github.com

Cuando el Sincronizador de configuración intenta conectarse a tu repositorio de Git, usa DNS para resolver la IP del nombre de host especificado. Si no se puede resolver el host, por lo general, esto indica un problema con el DNS o la red del clúster.

Para diagnosticar el problema, consulta Solución de problemas de DNS en GKE.

No se puede acceder al repositorio de Git desde el clúster

El contenedor git-sync muestra un error en sus registros que indica que no puede acceder al repositorio. Un ejemplo es ssh: connect to host source.developers.google.com port 2022: Network is unreachable. Para solucionar el problema, ajusta el firewall o la configuración de red del clúster.

Gran cantidad de solicitudes a la API de la fuente

El Sincronizador de configuración usa una estrategia de instancias múltiples para escalar y aislar usuarios y dominios de fallas. Debido a esto, cada objeto RootSync y RepoSync obtiene su propia instancia de conciliador. Cada instancia de reconciliador tiene su propio contenedor lateral específico de la fuente, git-sync, oci-sync o helm-sync. Estos Sidecars sondean la fuente de verdad. Cuando agregas objetos RootSync o RepoSync adicionales, se produce un aumento lineal en la cantidad de solicitudes a la API que realizan los agentes de conciliación que sondean la fuente de información. Por lo tanto, si tienes muchos objetos RootSync y RepoSync que sondean la misma fuente de información, a veces esto puede causar una carga de tráfico significativa en el servidor de origen.

Considera una de las siguientes estrategias para mitigar este problema:

  • Combina varios objetos RootSyncs o RepoSync para reducir la cantidad de conciliadores que realizan solicitudes a la API de Kubernetes.
  • Cambia el tipo de fuente de Git a OCI. Los repositorios de OCI, como Artifact Registry, suelen escalar mejor que la mayoría de los servidores de Git, ya que pueden escalar horizontalmente sin necesidad de sincronizarse entre réplicas de servidores.

Otros problemas

En esta sección, se incluyen otros problemas diversos que no se incluyen en las secciones anteriores.

Archivo de bloqueo de Git persistente

Si ves el siguiente error de git-sync, es posible que una invocación git anterior haya fallado y haya dejado un archivo de bloqueo persistente en el contenedor:

KNV2004: error in the git-sync container: ... fatal: Unable to create '/repo/source/.git/shallow.lock': File exists. ...

Para resolver este problema, reinicia el Pod del conciliador afectado para darle un nuevo volumen efímero:

kubectl delete pod -n config-management-system RECONCILER_NAME

¿Qué sigue?