Resolver problemas de conexão com a fonte de informações

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

Problemas de autenticação

Se a autenticação falhar, o Config Sync não poderá se conectar à fonte da verdade. As seções a seguir mostram como resolver alguns problemas de autenticação.

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

As conexões com servidores Git particulares usam o TLS para verificar a autenticidade do servidor. Para fazer essa validação, é necessário fornecer um certificado que identifique a autoridade certificadora raiz e quaisquer autoridades de certificação intermediárias que certifiquem a identidade do servidor Git. Se a verificação do certificado do servidor Git falhar, isso significa que a cadeia de confiança não pode ser estabelecida.

Se você receber um erro indicando que a verificação do certificado do servidor falhou, um dos problemas a seguir pode ser a causa:

  • O certificado da autoridade certificadora (CACert) não foi especificado. Para corrigir esse problema, adicione o CACert como um secret e faça referência ao secret no campo spec.git.caCertSecretRef dos seus objetos RootSync ou RepoSync.
  • O CACert está incompleto. Para corrigir esse problema, corrija o secret CACert para conter a cadeia completa de confiança, incluindo os certificados raiz e intermediários.
  • O CACert é inválido. Para corrigir esse problema, faça o download da cadeia de certificados pelo link especificado pelo certificado apresentado pelo servidor e atualize o secret CACert.

Não foi possível montar a chave secreta do Git

Se você receber o seguinte erro quando o contêiner git-sync tentar sincronizar um repositório com um secret, ele não será ativado no contêiner 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

Esse 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 secret.

Para resolver esse problema, execute os seguintes comandos para reiniciar o Reconciler Manager e o Reconcilers:

# 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, problemas com a configuração podem fazer com que o Config Sync não se conecte à sua fonte de verdade. As seções abaixo explicam como identificar e resolver problemas comuns de configuração.

Nome de gráfico inválido

Ao sincronizar de um repositório do Helm, certifique-se de definir 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 ou .tgz. Verifique o nome do gráfico com o comando helm template.

Diretório de configuração inválido

Verifique se há 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 todas as mensagens de erro KNV2004 que você receber. verifique o valor em relação ao repositório Git ou à imagem OCI.

Ramificação do Git inválida

Verifique se há um erro nos registros do contêiner git-sync, como Remote branch BRANCH_NAME not found in upstream origin ou warning: Could not find remote branch BRANCH_NAME to clone.. A ramificação padrão está definida como master, se não for especificada.

Credenciais Git, Helm ou OCI inválidas

Verifique se há um dos seguintes erros nos registros do Config Sync do contêiner git-sync, helm-sync ou oci-sync:

  • 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 Git e o secret git-creds estão configurados corretamente.

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

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

URL do repositório Git inválido

Verifique os registros do contêiner git-sync para um erro como Repository not found

Verifique se você está usando o formato de URL correto. Por exemplo, se você estiver usando um par de chaves SSH para autenticar o repositório do Git, verifique se o URL que você inseriu para o repositório do Git quando você configurar o Config Sync usa o protocolo SSH.

URL do repositório do Helm inválido

Verifique os registros do contêiner helm-sync para um erro como ...not a valid chart repository Verifique o URL do repositório do Helm com o comando helm template.

URL do registro da 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 conexão. Verifique se esses valores estão corretos. Por exemplo, se você estiver sincronizando a partir de um registro OCI, o URL precisará começar com oci://.

Também é possível verificar os registros do contêiner oci-sync para mais informações.

Problemas na rede

Se você suspeitar que o problema está relacionado à rede do cluster, comece com estas etapas de solução de problemas.

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

Quando o Config Sync tenta se conectar ao seu repositório Git, ele usa o DNS para resolver o IP do nome do host especificado. Se o host não puder ser resolvido, isso geralmente indica um problema com o DNS ou a rede do cluster.

Para diagnosticar o problema, consulte Como solucionar problemas de DNS no GKE.

O repositório Git está inacessível no cluster

Às vezes, o contêiner git-sync gera um erro nos registros indicando que não é possível acessar o repositório. Por exemplo, ssh: connect to host source.developers.google.com port 2022: Network is unreachable. Para corrigir o problema, ajuste o firewall ou a configuração de rede do cluster.

Alto número de solicitações de API de origem

O Config Sync usa uma estratégia de várias instâncias para escalonar e isolar locatários e domínios de falha. Por isso, cada objeto RootSync e RepoSync recebe a própria instância de reconciliação. Cada instância de reconciliador tem o próprio arquivo secundário específico da origem, git-sync, oci-sync ou helm-sync. Esses arquivos secundários sonham a fonte da verdade. Quando você adiciona mais objetos RootSync ou RepoSync, isso causa um aumento linear no número de solicitações de API feitas pelos reconciliadores que pesquisam a fonte de informações. Portanto, se você tiver muitos objetos RootSync e RepoSync pesquisando a mesma fonte de verdade, às vezes isso pode causar uma carga significativa de tráfego no servidor de origem.

Considere uma das seguintes estratégias para atenuar esse problema:

  • Combine vários objetos RootSyncs ou RepoSync para reduzir o número de reconciliadores que fazem solicitações de API de origem.
  • Mude o tipo de origem do Git para OCI. Os repositórios OCI, como o Artifact Registry, costumam ter um escalonamento melhor do que a maioria dos servidores Git, porque podem ser escalonados horizontalmente sem precisar sincronizar entre as réplicas do servidor.

Outros problemas

Esta seção contém outros problemas diversos que não se enquadram nas seções anteriores.

Arquivo de bloqueio do Git persistente

Se você encontrar o seguinte erro de git-sync, uma invocação git anterior pode ter falhado e deixado um arquivo de bloqueio persistente no contêiner:

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

Para resolver esse problema, reinicie o pod de reconciliação afetado para atribuir um novo volume temporário:

kubectl delete pod -n config-management-system RECONCILER_NAME

A seguir