Kubesphere DevOps 파이프라인에서 인증되지 않은 Docker Registry 접속 문제

Kubernetes v1.28 환경에서 containerd를 런타임으로 구성하고, Kubesphere 3.4를 설치한 후 DevOps 기능을 활성화한 상태입니다. 이 환경에서 Jenkins 기반의 CI 파이프라인을 통해 로컬 Nexus 레지스트리로 Docker 이미지를 푸시하려고 할 때 문제가 발생했습니다. 기존에는 Docker를 컨테이너 런타임으로 사용하는 클러스터에서 /etc/docker/daemon.json 파일에 insecure registry 항목을 추가하여 문제없이 Nexus로 이미지를 푸시할 수 있었는대, 현재 클러스터는 containerd를 사용하고 있으며, docker가 설치되어 있지 않아 동일한 방식이 적용되지 않습니다.

containerd 설정을 위해 /etc/containerd/config.toml 파일 내에 다음과 같은 구성을 추가했습니다:

[plugins."io.containerd.grpc.v1.cri".registry]
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["https://registry-1.docker.io"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."192.168.1.2:8082"]
      endpoint = ["http://192.168.1.2:8082"]

  [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.1.2:8082".tls]
    insecure_skip_verify = true

근데, Jenkins 파이프라인에서 다음과 같은 오류가 발생하며 이미지 푸시에 실패합니다:

Error: error authenticating creds for "192.168.1.2:8082": error pinging docker registry 192.168.1.2:8082: Get "https://192.168.1.2/v2/": http: server gave HTTP response to HTTPS client

확인해보니 Jenkins는 kubesphere/builder-base:v3.2.2-podman 이미지를 기반으로 하는 worker pod에서 동작 중이며, /var/run/docker.sock 경로를 hostPath로 마운트하고 있습니다. 문제는 해당 소켓이 존재함에도 불구하고, host에는 Docker가 설치되어 있지 않다는 점입니다. 이 소켓의 생성 주체나 기능적 역할도 명확하지 않습니다.

결론적으로 containerd 환경에서 insecure registry 사용 시, Jenkins의 Podman 기반 빌더와 containerd 설정 간에 통합되지 않아 문제가 발생하고 있습니다.

도움이 필요합니다.

[CloudBro AI Bot Response]
Kubesphere DevOps 파이프라인에서 인증되지 않은 Docker Registry 접속 문제는 보통 파이프라인이 프라이빗 레지스트리에 접근할 때 인증 정보가 없거나 잘못 설정되어 발생합니다. 이를 해결하기 위해 다음 사항을 점검해 보세요.

  1. Docker Registry 인증 정보 설정
    • Kubesphere에서 사용하는 네임스페이스에 Docker Registry 인증용 시크릿(Secret)을 생성해야 합니다.
    • 예를 들어, kubectl create secret docker-registry <secret-name> --docker-server=<registry-url> --docker-username=<username> --docker-password=<password> --docker-email=<email> 명령어로 시크릿을 생성합니다.
  2. 파이프라인에 시크릿 연결
    • DevOps 파이프라인 설정에서 빌드 스텝 혹은 이미지 풀링 단계에 위에서 생성한 시크릿을 참조하도록 설정합니다.
    • Kubesphere 파이프라인의 “Image Pull Secret” 항목에 해당 시크릿 이름을 입력하거나, 빌드 YAML에 imagePullSecrets를 명시합니다.
  3. 파이프라인 실행 권한 확인
    • 파이프라인이 실행되는 서비스 계정에 시크릿을 사용할 권한이 있는지 확인합니다.
    • 필요하다면 서비스 계정에 시크릿 접근 권한을 부여하세요.
  4. 레지스트리 URL 및 인증 정보 재확인
    • 레지스트리 주소가 정확한지, 계정과 비밀번호가 올바른지 다시 한번 검토하세요.
  5. 로그 확인 및 문제 진단
    • 파이프라인 실행 로그에서 인증 관련 에러 메시지를 확인하고, 그에 맞게 조치합니다.
      만약 위 방법으로도 문제가 해결되지 않는다면, 구체적인 파이프라인 설정과 에러 로그를 공유해 주시면 더 자세한 도움을 드릴 수 있습니다.