在ArgoCD添加Git仓库应用失败,遇argocd-repo-server查询超时错误
错误信息
ComparisonError
Failed to load target state: failed to generate manifest for source 1 of 1: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing: dial tcp: lookup argocd-repo-server: i/o timeout"
已验证操作
- 重启过ArgoCD部署
- 在ArgoCD Pod内手动克隆Git仓库成功
- K8s DNS Pod运行状态正常
排查方向与解决步骤
1. 检查argocd-repo-server服务与Pod状态
先确认argocd-repo-server服务是否存在且正常:
kubectl get svc argocd-repo-server -n argocd
若服务不存在,重新部署repo-server组件;若存在,检查服务关联的Endpoints是否有正常Pod:
kubectl get endpoints argocd-repo-server -n argocd
如果Endpoints为空,查看repo-server Pod的运行状态与日志,排查启动异常:
kubectl get pods -n argocd | grep argocd-repo-server kubectl logs argocd-repo-server-xxx -n argocd # 替换xxx为实际Pod名称
2. 检查命名空间内的网络策略
如果集群启用了NetworkPolicy,可能限制了ArgoCD组件间的通信。查看argocd命名空间下的网络策略:
kubectl get networkpolicy -n argocd
确保存在允许argocd-server访问argocd-repo-server的策略,可临时删除网络策略验证是否为该问题导致。
3. 验证ArgoCD组件Pod的DNS解析能力
进入argocd-server Pod,直接测试解析argocd-repo-server:
kubectl exec -it argocd-server-xxx -n argocd -- nslookup argocd-repo-server
若解析失败,检查Pod的DNS配置文件是否正常:
kubectl exec -it argocd-server-xxx -n argocd -- cat /etc/resolv.conf
确认nameserver指向集群DNS服务的ClusterIP(通常是kube-dns或coredns的IP),若配置异常,重启argocd-server Pod或检查节点DNS设置。
4. 检查ArgoCD配置文件的自定义地址
查看argocd-cm ConfigMap,确认是否错误配置了repo-server地址:
kubectl get configmap argocd-cm -n argocd -o yaml
若存在repo.server字段,删除该配置项并重启argocd-server。
5. 验证集群DNS的跨命名空间解析能力
在其他命名空间创建临时Pod,测试跨命名空间解析argocd-repo-server:
kubectl run -it --rm test-dns --image=busybox -- nslookup argocd-repo-server.argocd.svc.cluster.local
若解析失败,即使DNS Pod运行正常,可能存在CoreDNS配置错误或DNS服务ClusterIP无法访问的问题,需检查CoreDNS的Corefile配置或DNS服务的可达性。
内容的提问来源于stack exchange,提问作者Vasilis Kokkinis

