Kubernetes용 GitLab 에이전트 문제 해결

GitLab에서 Kubernetes용 에이전트를 사용하는 경우 문제가 발생할 수 있습니다. 이 문제를 해결해야 합니다.

서비스 로그를 확인하여 시작할 수 있습니다.

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

GitLab 관리자라면 GitLab 에이전트 서버 로그를 확인할 수도 있습니다.

전송: 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]"
}

이 오류는 Manifest 파일이 잘못되어 Kubernetes가 지정된 객체를 만들 수 없을 때 발생합니다. Manifest 파일이 유효한지 확인하십시오.

추가적인 문제 해결을 위해 Manifest 파일을 사용하여 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": "스캔 작업: jobs.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":"resource-name",
  "namespace":"namespace",
  "status":"Skipped",
  "timestamp":"2022-10-29T15:34:21Z",
  "type":"apply"
}

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

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

설치 중 구문 오류

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

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

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

대시보드의 GitLab Agent Server: Unauthorized 오류

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

  • 에이전트 구성 파일의 user_access 항목이 존재하지 않거나 올바르지 않습니다. 이를 해결하려면 사용자에게 Kubernetes 액세스 권한 부여을 참조하십시오.
  • 브라우저와 KAS로 전송된 여러 _gitlab_kas 쿠키가 있습니다. 가장 가능한 원인은 동일한 사이트에 호스팅된 여러 GitLab 인스턴스입니다.

예를 들어 gitlab.comkas.gitlab.com을 대상으로한 _gitlab_kas 쿠키를 설정하지만, 해당 쿠키가 kas.staging.gitlab.com로 전송되어 staging.gitlab.com에서 오류가 발생합니다.

임시 조치로 브라우저 쿠키 저장소에서 gitlab.com_gitlab_kas 쿠키를 삭제하십시오. 이 알려진 문제에 대한 수정 사항은 이슈 418998에 제안되어 있습니다. - GitLab 및 KAS가 서로 다른 사이트에서 실행됩니다. 예를 들어, GitLab이 gitlab.example.com 및 KAS가 kas.example.com에서 실행됩니다. GitLab은 이 사용 사례를 지원하지 않습니다. 자세한 내용은 이슈 416436을 참조하십시오.

에이전트 버전 불일치

GitLab의 Kubernetes 클러스터 페이지의 에이전트 탭에서 클러스터의 팟 간에 에이전트 버전 불일치: 클러스터의 파드 간에 에이전트 버전이 일치하지 않습니다. 라는 경고 메시지가 표시될 수 있습니다.

이 경고 메시지는 kas에 의해 오래된 버전의 에이전트가 캐시되어 있을 때 발생할 수 있습니다. kas가 주기적으로 오래된 에이전트 버전을 삭제하므로, 에이전트와 GitLab이 조화를 이루도록 하려면 적어도 20분을 기다려야 합니다.

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