Resolva problemas de ligação à fonte de verdade

Esta página mostra como resolver problemas que ocorrem quando o Config Sync não consegue estabelecer uma ligação com a sua fonte de verdade.

Problemas de autenticação

Se a autenticação falhar, o Config Sync não consegue estabelecer ligação à fonte de verdade. As secções seguintes mostram como resolver alguns problemas de autenticação.

Falha na validação do certificado do servidor para servidores Git

As ligações a servidores Git privados usam o TLS para validar a autenticidade do servidor. Para fazer esta validação, tem de fornecer um certificado que identifique a autoridade de certificação raiz e quaisquer autoridades de certificação intermédias que certifiquem a identidade do servidor Git. Se a validação do certificado do servidor Git falhar, significa que não é possível estabelecer a cadeia de confiança.

Se receber um erro a indicar que a validação do certificado do servidor falhou, um dos seguintes problemas pode ser a causa:

  • O certificado da autoridade de certificação (CACert) não está especificado. Para corrigir este problema, adicione o CACert como um segredo e faça referência ao segredo no campo spec.git.caCertSecretRef dos objetos RootSync ou RepoSync.
  • O CACert está incompleto. Para corrigir este problema, corrija o segredo do certificado emitido pela AC para que contenha a cadeia de confiança completa, incluindo o certificado raiz e todos os certificados intermédios.
  • O CACert é inválido. Para corrigir este problema, transfira a cadeia de certificados a partir do link especificado pelo certificado apresentado pelo servidor e, em seguida, atualize o segredo do CACert.

Não é possível montar o secret do Git

Se receber o seguinte erro quando o contentor git-sync tenta sincronizar um repositório com um segredo, significa que o segredo do Git não foi montado com êxito no contentor 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

O erro pode ser causado pela mudança do tipo de autenticação do repositório Git de none, gcenode ou gcpserviceaccount para outros tipos que precisam de um segredo.

Para resolver este problema, execute os seguintes comandos para reiniciar o Reconciler Manager e os reconciliadores:

# 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 configuração

Muitas vezes, os problemas com a configuração podem impedir que o Config Sync se ligue à sua fonte de verdade. As secções seguintes explicam como identificar e resolver problemas de configuração comuns.

Nome do gráfico inválido

Quando sincronizar a partir de um repositório Helm, certifique-se de que define o valor correto para spec.helm.chart. O nome do gráfico não contém o nome do repositório, a versão do gráfico nem .tgz. Pode validar o nome do gráfico com o comando helm template.

Diretório de configuração inválido

Verifique se existem erros nas suas configurações, como um valor incorreto para policyDir no objeto ConfigManagement ou spec.git.dir ou spec.oci.dir no objeto RootSync ou RepoSync. O valor do diretório está incluído em quaisquer mensagens de erro que receber. Valide o valor em relação ao seu repositório Git ou imagem OCI.KNV2004

Ramo do Git inválido

Verifique se existem erros no contentor git-sync, como Remote branch BRANCH_NAME not found in upstream origin ou warning: Could not find remote branch BRANCH_NAME to clone.. Se não for especificado, o ramo predefinido é master.

Credenciais do Git, Helm ou OCI inválidas

Verifique os registos do Config Sync do contentor git-sync, helm-sync ou oci-sync para um dos seguintes erros:

  • 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 um repositório Git, verifique se as credenciais do Git e o segredo git-creds estão configurados corretamente.

Para um repositório Helm, verifique se as credenciais do Helm estão configuradas corretamente.

Para imagens OCI, verifique se as credenciais OCI estão configuradas corretamente.

URL do repositório Git inválido

Verifique se existe um erro no contentor git-sync, como Repository not found.

Verifique se está a usar o formato de URL correto. Por exemplo, se estiver a usar um par de chaves SSH para autenticar no repositório Git, certifique-se de que o URL que introduz para o repositório Git quando configura o Config Sync usa o protocolo SSH.

URL do repositório Helm inválido

Verifique se existe um erro no contentor helm-sync, como ...not a valid chart repository. Pode validar o URL do repositório Helm com o comando helm template.

URL do registo OCI inválido

Um valor inválido no campo spec.oci.image ou spec.oci.dir de um objeto RootSync ou RepoSync pode causar problemas de ligação. Verifique se estes valores estão corretos. Por exemplo, se estiver a sincronizar a partir de um registo da OCI, o URL deve começar por oci://.

Também pode consultar os registos do contentor oci-sync para mais informações.

Problemas de rede

Se suspeitar que o problema está relacionado com a rede do cluster, comece por seguir estes passos de resolução de problemas.

Não foi possível resolver o anfitrião: github.com

Quando o Config Sync tenta estabelecer ligação ao seu repositório Git, usa o DNS para resolver o IP do nome do anfitrião especificado. Se não for possível resolver o anfitrião, isto indica normalmente um problema com o DNS ou a rede de clusters.

Para diagnosticar o problema, consulte o artigo Resolva problemas do Cloud DNS no GKE ou Resolva problemas do kube-dns no GKE, consoante o serviço que está a usar como fornecedor de DNS.

Não é possível alcançar o repositório Git a partir do cluster

Por vezes, o contentor git-sync gera um erro nos respetivos registos que indica que não consegue aceder ao repositório. Por exemplo, ssh: connect to host source.developers.google.com port 2022: Network is unreachable. Para corrigir o problema, ajuste a firewall ou a configuração de rede do cluster.

Número elevado de pedidos da API de origem

O Config Sync usa uma estratégia de várias instâncias para dimensionar e isolar inquilinos e domínios de falhas. Por este motivo, cada objeto RootSync e RepoSync tem a sua própria instância de reconciliação. Cada instância do reconciliador tem o seu próprio sidecar específico da origem: git-sync, oci-sync ou helm-sync. Estes sidecars sondam a fonte de verdade. Quando adiciona objetos RootSync ou RepoSync, isto provoca um aumento linear no número de pedidos da API feitos pelos reconciliadores que sondam a fonte de verdade. Assim, se tiver muitos objetos RootSync e RepoSync a sondar a mesma fonte de informações fidedignas, isto pode, por vezes, causar uma carga de tráfego significativa no servidor de origem.

Considere uma das seguintes estratégias para mitigar este problema:

  • Combine vários objetos RootSyncs ou RepoSync para reduzir o número de reconciliadores que fazem pedidos à API de origem.
  • Altere o tipo de origem de Git para OCI. Os repositórios OCI, como o Artifact Registry, tendem a ser mais escaláveis do que a maioria dos servidores Git, porque podem ser escalados horizontalmente sem necessidade de sincronização entre réplicas do servidor.

O que se segue?