정보 소스 연결 문제 해결

이 페이지에서는 구성 동기화가 정보 소스와 연결을 설정할 수 없을 때 발생하는 문제를 해결하는 방법을 보여줍니다.

인증 문제

인증이 실패하면 구성 동기화가 정보 소스에 연결할 수 없습니다. 다음 섹션에서는 몇 가지 인증 문제를 해결하는 방법을 보여줍니다.

Git 서버에 대한 서버 인증서 확인 실패

비공개 Git 서버에 대한 연결은 TLS를 사용하여 서버 신뢰성을 확인합니다. 이 검증을 수행하려면 루트 인증 기관과 Git 서버의 ID를 인증하는 중간 인증 기관을 식별하는 인증서를 제공해야 합니다. Git 서버 인증서 확인에 실패하면 신뢰 사슬을 설정할 수 없습니다.

서버 인증서 확인에 실패했음을 나타내는 오류가 표시되면 다음 문제 중 하나가 원인일 수 있습니다.

  • 인증 기관 인증서(CACert)가 지정되지 않았음. 이 문제를 해결하려면 CACert를 보안 비밀로 추가하고 RootSync 또는 RepoSync 객체의 spec.git.caCertSecretRef 필드에서 보안 비밀을 참조합니다.
  • CACert가 불완전함. 이 문제를 해결하려면 루트 및 모든 중간 인증서를 포함하여 전체 신뢰 사슬을 포함하도록 CACert 보안 비밀을 수정합니다.
  • CACert가 잘못되었음. 이 문제를 해결하려면 서버에서 제공한 인증서에 지정된 링크에서 인증서 체인을 다운로드한 후 CACert 보안 비밀을 업데이트합니다.

Git 보안 비밀을 마운트할 수 없음

git-sync가 보안 비밀을 사용해서 저장소를 동기화하려고 시도할 때 다음 오류가 수신되면 Git 보안 비밀이 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

이 오류는 Git 저장소 인증 유형을 none, gcenode, gcpserviceaccount에서 보안 비밀이 필요한 다른 유형으로 전환할 때 발생할 수 있습니다.

이 문제를 해결하려면 다음 명령어를 실행하여 조정자 관리자 및 조정자를 다시 시작합니다.

# 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

구성 관련 문제

구성 문제로 인해 구성 동기화가 정보 소스에 연결할 수 없는 경우가 많습니다. 다음 섹션에서는 일반적인 구성 문제를 식별하고 해결하는 방법을 설명합니다.

잘못된 차트 이름

Helm 저장소에서 동기화할 때 spec.helm.chart에 대해 올바른 값을 설정해야 합니다. 차트 이름에는 저장소 이름, 차트 버전 또는 .tgz가 포함되지 않습니다. helm template 명령어로 차트 이름을 확인할 수 있습니다.

잘못된 구성 디렉터리

구성에 ConfigManagement 객체의 policyDir 값 또는 RootSync 또는 RepoSync 객체의 spec.git.dir 또는 spec.oci.dir과 같은 잘못된 값이 있는지 확인합니다. 디렉터리 값은 수신된 모든 KNV2004 오류 메시지에 포함됩니다. Git 저장소 또는 OCI 이미지와 비교하여 값을 확인합니다.

잘못된 Git 브랜치

git-sync 컨테이너의 로그를 통해 Remote branch BRANCH_NAME not found in upstream origin 또는 warning: Could not find remote branch BRANCH_NAME to clone.와 같은 오류가 있는지 확인합니다. 기본 브랜치는 지정하지 않은 경우 master로 설정됩니다.

잘못된 Git, Helm, OCI 사용자 인증 정보

다음 오류 중 하나에 대해 git-sync, helm-sync 또는 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

Git 저장소의 경우 Git 사용자 인증 정보 및 git-creds 보안 비밀이 올바르게 구성되었는지 확인합니다.

Helm 저장소의 경우 Helm 사용자 인증 정보가 올바르게 구성되었는지 확인합니다.

OCI 이미지의 경우 OCI 사용자 인증 정보가 올바르게 구성되었는지 확인합니다.

잘못된 Git 저장소 URL

git-sync 컨테이너의 로그를 통해 Repository not found와 같은 오류가 있는지 확인합니다.

사용 중인 URL 형식이 올바른지 확인합니다. 예를 들어 SSH 키 쌍을 사용하여 Git 저장소 인증을 수행하는 경우 구성 동기화를 구성할 때 Git 저장소에 입력하는 URL에 SSH 프로토콜이 사용되는지 확인합니다.

잘못된 Helm 저장소 URL

helm-sync 컨테이너의 로그를 통해 ...not a valid chart repository와 같은 오류가 있는지 확인합니다. helm template 명령어를 사용하여 Helm 저장소 URL을 확인할 수 있습니다.

잘못된 OCI 레지스트리 URL

RootSync 또는 RepoSync 객체의 spec.oci.image 또는 spec.oci.dir 필드에 잘못된 값이 있으면 연결 문제가 발생할 수 있습니다. 이 값이 올바른지 확인하세요. 예를 들어 OCI 레지스트리에서 동기화하는 경우 URL이 oci://로 시작합니다.

oci-sync 컨테이너의 로그에서 자세한 내용을 확인할 수도 있습니다.

네트워크 문제

클러스터 네트워크와 관련된 문제가 의심되는 경우 다음 문제 해결 단계를 시작하세요.

호스트를 확인할 수 없음: github.com

구성 동기화는 Git 저장소에 연결을 시도할 때 DNS를 사용하여 지정된 호스트 이름의 IP를 확인합니다. 호스트를 확인할 수 없는 경우 이는 일반적으로 DNS 또는 클러스터 네트워킹에 문제가 있음을 나타냅니다.

문제를 진단하려면 GKE에서 DNS 문제 해결을 참조하세요.

클러스터 내에서 Git 저장소에 연결할 수 없음

git-sync 컨테이너가 저장소에 연결할 수 없음을 나타내는 오류를 로그에 표시하는 경우가 있습니다. 예를 들면 ssh: connect to host source.developers.google.com port 2022: Network is unreachable입니다. 이 문제를 해결하려면 클러스터의 방화벽 또는 네트워크 구성을 조정하세요.

많은 소스 API 요청

구성 동기화는 멀티 인스턴스 전략을 사용하여 테넌트 및 오류 도메인을 확장하고 격리합니다. 이 때문에 각 RootSyncRepoSync 객체는 자체 조정자 인스턴스를 가져옵니다. 각 조정자 인스턴스에는 자체 소스별 사이드카인 git-sync, oci-sync 또는 helm-sync가 있습니다. 이러한 사이드카는 정보 소스를 폴링합니다. RootSync 또는 RepoSync 객체를 추가하면 정보 소스를 폴링하는 조정자가 수행하는 API 요청 수가 선형적으로 증가합니다. 따라서 동일한 정보 소스를 폴링하는 여러 RootSyncRepoSync 객체가 있는 경우 소스 서버에 상당한 트래픽 부하가 발생할 수 있습니다.

이 문제를 완화하려면 다음 전략 중 하나를 고려하세요.

  • 여러 RootSyncs 또는 RepoSync 객체를 결합하여 소스 API 요청을 수행하는 조정자 수를 줄입니다.
  • 소스 유형을 Git에서 OCI로 변경합니다. Artifact Registry와 같은 OCI 저장소는 서버 복제본 간에 동기화할 필요 없이 수평적으로 확장할 수 있기 때문에 대부분의 Git 서버보다 더 잘 확장되는 경향이 있습니다.

다음 단계