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 설정 간에 통합되지 않아 문제가 발생하고 있습니다.