Kubernetes용 GitLab 에이전트 문제 해결

GitLab Kubernetes용 에이전트를 사용할 때 문제를 겪을 수 있습니다. 이 문제를 해결해야 합니다.

먼저 서비스 로그를 보고 시작할 수 있습니다:

kubectl logs -f -l=app.kubernetes.io/name=gitlab-agent -n gitlab-agent

GitLab 관리자인 경우 GitLab 에이전트 서버 로그도 볼 수 있습니다.

Transport: WebSocket 다이얼링 실패 오류

{
  "level": "warn",
  "time": "2020-11-04T10:14:39.368Z",
  "msg": "GetConfiguration failed",
  "error": "rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing failed to WebSocket dial: failed to send handshake request: Get \\\"https://gitlab-kas:443/-/kubernetes-agent\\\": dial tcp: lookup gitlab-kas on 10.60.0.10:53: no such host\""
}

이 오류는 kas-address와 에이전트 pod 간의 연결 문제가 있을 때 발생합니다. 이 문제를 해결하려면 kas-address가 정확한지 확인하세요.

{
  "level": "error",
  "time": "2021-06-25T21:15:45.335Z",
  "msg": "Reverse tunnel",
  "mod_name": "reverse_tunnel",
  "error": "Connect(): rpc error: code = Unavailable desc = connection error: desc= \"transport: Error while dialing failed to WebSocket dial: expected handshake response status code 101 but got 301\""
}

이 오류는 kas-address에 슬래시가 포함되지 않았을 때 발생합니다. 이 문제를 해결하려면 wss 또는 ws URL이 슬래시로 끝나도록 확인하세요. 예를 들어 wss://GitLab.host.tld:443/-/kubernetes-agent/ 또는 ws://GitLab.host.tld:80/-/kubernetes-agent/와 같이 말입니다.

ValidationError(Deployment.metadata)

{
  "level": "info",
  "time": "2020-10-30T08:56:54.329Z",
  "msg": "Synced",
  "project_id": "root/kas-manifest001",
  "resource_key": "apps/Deployment/kas-test001/nginx-deployment",
  "sync_result": "error validating data: [ValidationError(Deployment.metadata): unknown field \"replicas\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta, ValidationError(Deployment.metadata): unknown field \"selector\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta, ValidationError(Deployment.metadata): unknown field \"template\" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta]"
}

이 오류는 매니페스트 파일이 잘못되었고 Kubernetes가 지정된 객체를 생성할 수 없을 때 발생합니다. 매니페스트 파일이 유효한지 확인하세요.

추가적인 문제 해결을 위해 매니페스트 파일을 사용하여 Kubernetes에서 직접 객체를 생성해 보세요.

WebSocket 다이얼링 중 오류: 핸드셰이크 요청 전송 실패

{
  "level": "warn",
  "time": "2020-10-30T09:50:51.173Z",
  "msg": "GetConfiguration failed",
  "error": "rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing failed to WebSocket dial: failed to send handshake request: Get \\\"https://GitLabhost.tld:443/-/kubernetes-agent\\\": net/http: HTTP/1.x transport connection broken: malformed HTTP response \\\"\\\\x00\\\\x00\\\\x06\\\\x04\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x00\\\\x05\\\\x00\\\\x00@\\\\x00\\\"\""
}

이 오류는 에이전트 측에서 wsskas-address로 구성했지만 에이전트 서버가 wss에서 사용할 수 없을 때 발생합니다. 이 문제를 해결하려면 동일한 스키마가 양쪽에 구성되어 있는지 확인하세요.

grpc-encoding에 대한 압축 해제기가 설치되지 않았습니다.

{
  "level": "warn",
  "time": "2020-11-05T05:25:46.916Z",
  "msg": "GetConfiguration.Recv failed",
  "error": "rpc error: code = Unimplemented desc = grpc: Decompressor is not installed for grpc-encoding \"gzip\""
}

이 오류는 에이전트 버전이 에이전트 서버(KAS) 버전보다 최신인 경우 발생합니다. 해결하려면 agentk와 에이전트 서버의 버전이 동일한지 확인하세요.

알 수 없는 인증 기관에 의해 서명된 인증서

{
  "level": "error",
  "time": "2021-02-25T07:22:37.158Z",
  "msg": "Reverse tunnel",
  "mod_name": "reverse_tunnel",
  "error": "Connect(): rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing failed to WebSocket dial: failed to send handshake request: Get \\\"https://GitLabhost.tld:443/-/kubernetes-agent/\\\": x509: certificate signed by unknown authority\""
}

이 오류는 GitLab 인스턴스가 에이전트에서 알 수 없는 내부 인증 기관에 의해 서명된 인증서를 사용하는 경우 발생합니다.

이 문제를 해결하려면 /etc/gitlab/trusted-certs 디렉터리에 내부 CA의 공개 인증서를 설치하세요.

또는 에이전트 서버(KAS)가 사용자 지정 디렉터리에서 인증서를 읽도록 구성할 수 있습니다. /etc/gitlab/gitlab.rb에 다음 구성을 추가하세요:

gitlab_kas['env'] = {
   'SSL_CERT_DIR' => "/opt/gitlab/embedded/ssl/certs/"
 }

변경 사항을 적용하려면:

  1. GitLab을 다시 구성하세요.

    sudo gitlab-ctl reconfigure
    
  2. gitlab-kas를 다시 시작하세요.

    gitlab-ctl restart gitlab-kas
    

프로젝트를 찾을 수 없음

{
  "level ": "error",
  "time ": "2022-01-05T15:18:11.331Z",
  "msg ": "GetObjectsToSynchronize.Recv failed",
  "mod_name ": "gitops",
  "error ": "rpc error: code = NotFound desc = project not found",
}

이 오류는 매니페스트를 유지하는 프로젝트가 공개되지 않은 경우 발생합니다. 이를 해결하려면 프로젝트가 공개되어 있는지 또는 매니페스트 파일이 에이전트가 구성된 리포지터리에 저장되어 있는지 확인하세요.

작업 부하에 대한 취약점 검사를 수행하지 못했습니다: jobs.batch가 이미 있음

{
  "level": "error",
  "time": "2022-06-22T21:03:04.769Z",
  "msg": "작업 부하에 대한 취약점 검사를 수행하지 못했습니다",
  "mod_name": "starboard_vulnerability",
  "error": "스캔 작업 실행 중: 작업.batch \"scan-vulnerabilityreport-b8d497769\"이(가) 이미 존재합니다"
}

GitLab 에이전트는 각 작업 부하를 스캔하기 위해 작업을 생성하여 취약점을 검사합니다. 스캔이 중단된 경우 이러한 작업이 남을 수 있으며 더 많은 작업이 실행되기 전에 정리해야 합니다. 다음 명령을 실행하여 이러한 작업을 정리할 수 있습니다:

kubectl delete jobs -l app.kubernetes.io/managed-by=starboard -n gitlab-agent

우리는 이러한 작업을 보다 견고하게 정리하도록 노력하고 있습니다.

인벤토리 정책이 구동을 막음 (전략: 적용, 상태: 비어 있음, 정책: 일치해야 함)

{
  "error": "인벤토리 정책이 구동을 막음 (전략: 적용, 상태: 비어 있음, 정책: 일치해야 함)",
  "group": "networking.k8s.io",
  "kind": "Deployment",
  "name": "리소스-이름",
  "namespace": "네임스페이스",
  "status": "스킵됨",
  "timestamp": "2022-10-29T15:34:21Z",
  "type": "적용"
}

이 오류는 GitLab 에이전트가 객체를 업데이트하려고 시도하고 해당 객체에 필요한 주석이 없는 경우 발생합니다. 이 오류를 해결하려면 다음을 수행할 수 있습니다:

  • 필요한 주석을 매뉴얼으로 추가합니다.
  • 객체를 삭제하고 에이전트가 다시 생성하도록 합니다.
  • inventory_policy 설정을 변경합니다.

설치 중 구문 분석 오류

에이전트를 설치하는 중에 다음과 같은 오류가 발생할 수 있습니다:

오류: parse error at (gitlab-agent/templates/observability-secret.yaml:1): unclosed action

이 오류는 일반적으로 호환되지 않는 Helm 버전으로 인해 발생합니다. 문제를 해결하려면 Kubernetes 버전과 호환되는 Helm 버전을 사용하는지 확인하세요.

대시보드에 나타난 GitLab Agent Server: Unauthorized 오류

대시보드 for Kubernetes 페이지에서 GitLab Agent Server: Unauthorized. Trace ID: <...>와 같은 오류가 나타날 수 있습니다. 이는 다음 중 하나로 인해 발생할 수 있습니다:

  • 에이전트 구성 파일의 user_access 항목이 존재하지 않거나 잘못된 경우. 해결 방법은 사용자에게 Kubernetes 액세스 권한 부여을 참조하세요.
  • 브라우저에 여러 _gitlab_kas 쿠키가 존재하며 KAS에 전송되는 경우. 가장 가능성이 높은 원인은 동일 사이트에서 호스팅되는 여러 GitLab 인스턴스인데, 예를 들어 gitlab.comkas.gitlab.com을 대상으로 하는 _gitlab_kas 쿠키를 설정하고 있지만 해당 쿠키가 staging.gitlab.com에서도 발견되어 staging.gitlab.com에서 오류가 발생하는 경우입니다. 임시로 해결하려면 브라우저 쿠키 리포지터리에서 gitlab.com_gitlab_kas 쿠키를 삭제하세요. 이미 알려진 이 문제에 대한 수정안은 Issue 418998에서 제안되었습니다.
  • GitLab 및 KAS가 다른 사이트에서 실행되는 경우, 예를 들어 GitLab이 gitlab.example.com에 있고 KAS가 kas.example.com에 있는 경우. GitLab은 이러한 사용 사례를 지원하지 않습니다. 자세한 내용은 이슈 416436를 참조하세요.

에이전트 버전 불일치

GitLab의 쿠버네티스 클러스터 페이지 에이전트 탭에서 클러스터의 각 파드에서 에이전트 버전 불일치: 클러스터의 파드 간에 에이전트 버전이 일치하지 않습니다.라는 경고가 나타날 수 있습니다.

이 경고는 에이전트 서버 for Kubernetes (kas)가 캐시한 이전 버전의 에이전트로 인한 것일 수 있습니다. kas는 주기적으로 오래된 에이전트 버전을 삭제하므로, 적어도 20분을 기다려야 에이전트와 GitLab이 조정될 수 있습니다.

경고가 지속되면 클러스터에 설치된 에이전트를 업데이트하세요.