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 objetosRootSync
ouRepoSync
. - 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
ouRepoSync
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?
Se continuar a ter problemas, verifique se o seu problema é um problema conhecido.
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obter apoio técnico para obter mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio técnico através do contacto com o apoio ao cliente do Google Cloud.
- Receber apoio técnico da comunidade
fazendo perguntas no
StackOverflow.
Se usar kpt ou Kustomize, use a etiqueta
kpt
oukustomize
para pesquisar problemas semelhantes. - Abrir erros ou pedidos de funcionalidades através do controlador de problemas público no GitHub.