MLOps Central Platform 은 기본 설정에서 몇 군데 인터넷에 접속. 폐쇄망에서는 그 지점마다 미리 반입하거나, 사내 미러로 전환하거나, 비활성화하는 준비 필요.

인터넷을 사용하는 곳

시점내려받는 대상폐쇄망 대응
앱 이미지 빌드(docker compose up --build)uv, kubectl, 파이썬 패키지외부망에서 빌드해 tar 로 반입
Compose 서비스 기동Postgres·RustFS·Prometheus 등 공개 이미지tar 로 반입
k3s 설치, device plugink3s 바이너리·이미지, nvcr.io/nvidia/k8s-device-plugink3s 공식 폐쇄망(에어갭) 설치 + 이미지 반입
공유 이미지 게시(클러스터 내부 빌드)docker.io/moby/buildkit:v0.18.2-rootless, 베이스 이미지(python:*-slim, 포인트 클라우드 런타임은 nvidia/cuda), pip·apt 패키지, PyTorch 휠사내 미러를 지정하거나, 외부에서 빌드한 이미지를 반입
학습 실행사전학습 가중치(체크포인트)가중치 미러에 미리 업로드하고 인터넷 내려받기를 비활성화

폐쇄망 반입 항목과 반입 위치: 앱·공개 이미지 tar 는 docker load 뒤 Compose 로, k3s 폐쇄망 설치 파일과 device plugin·BuildKit 이미지는 k3s 클러스터로, 직접 빌드한 이미지 tar 는 컨테이너 레지스트리 반입 뒤 외부 이미지 변형으로, 사전학습 가중치는 가중치 미러로, 웹 화면 dist/ 는 웹 서버로 반입. 사내 pip·apt 미러가 없으면 빌드 패키지 프록시 비활성화

1. 컨테이너 이미지 반입

  1. 외부망 PC 에서 같은 버전의 소스로 앱 이미지를 빌드하고, Compose 가 사용하는 이미지 이름 확인.

    docker compose -f /opt/geo-mlops/docker-compose.yml build
    docker compose -f /opt/geo-mlops/docker-compose.yml pull --ignore-buildable
    docker compose -f /opt/geo-mlops/docker-compose.yml config --images
  2. 위에서 출력된 이미지를 모두 한 tar 로 묶어 이동. 클러스터 파드용 이미지(BuildKit rootless, device plugin)는 따로 묶음.

    docker save -o geo-mlops-compose.tar $(docker compose -f /opt/geo-mlops/docker-compose.yml config --images)
    docker pull docker.io/moby/buildkit:v0.18.2-rootless
    docker pull nvcr.io/nvidia/k8s-device-plugin:v0.19.3
    docker save -o geo-mlops-k3s.tar docker.io/moby/buildkit:v0.18.2-rootless nvcr.io/nvidia/k8s-device-plugin:v0.19.3
  3. 폐쇄망 서버 에서 이미지를 불러오고, 빌드 없이 실행.

    docker load -i geo-mlops-compose.tar
    sudo k3s ctr images import geo-mlops-k3s.tar
    docker compose -f /opt/geo-mlops/docker-compose.yml up -d --no-build

학습 런타임처럼 플랫폼이 보통 클러스터 내부에서 빌드하는 이미지도 외부에서 빌드해 반입 가능. docker save 로 만든 tar 를 웹 화면 컨테이너 레지스트리 → 이미지 반입으로 업로드한 뒤, 학습 런타임 화면에서 그 이미지를 외부 이미지 변형으로 등록. 외부 이미지 변형은 게시(빌드) 단계 없음.

2. 빌드 패키지 프록시

Compose 에 포함된 proxpi(pip)·apt-cacher-ng(apt)는 캐시일 뿐 미러가 아님. 인터넷에 접근할 수 없으면 캐시를 채울 수도 없고, 비어 있는 캐시를 거친 빌드는 실패. 둘 중 하나 선택.

선택설정(app.env)
사내 미러가 있는 경우: pip 인덱스·apt 미러를 사내에 운영GEO_MLOPS_BUILD_PIP_INDEX_URL=http://<사내 pip 미러>/simple/GEO_MLOPS_BUILD_APT_PROXY=http://<사내 apt 프록시>:3142필요하면 GEO_MLOPS_TRAINING_RUNTIME_TORCH_INDEX 도 사내 PyTorch 휠 인덱스로
미러가 없는 경우: 프록시 주입을 비활성화GEO_MLOPS_BUILD_PACKAGE_PROXY_ENABLED=false
# /etc/geo-mlops/app.env (프록시를 쓰지 않는 환경)
GEO_MLOPS_BUILD_PACKAGE_PROXY_ENABLED=false
  • 비활성화하는 설정은 이것 하나뿐. 주소 설정을 비우면 비활성화되지 않고 기본 주소(10.42.0.1:5000, :3142) 사용.
  • 비활성화하면 빌드가 PyPI·데비안 저장소에 직접 접속. 폐쇄망에서는 그 빌드 역시 실패하므로, 미러가 없으면 위 1절처럼 외부에서 빌드한 이미지를 반입해 사용.
  • 설정을 바꾼 뒤에는 앱 컨테이너를 다시 생성하고(docker compose … up -d app), 서빙 빌더를 한 번 다시 게시. 절차는 업그레이드의 "이미지 재게시" 참고.
  • 빌드 캐시 화면에서 두 프록시 카드가 "미사용" 이고 "꺼져 있음" 문구가 표시되면 정상적으로 비활성화된 상태. 활성화한 상태에서 프록시가 중단되어 있으면 "실패" 와 "닿지 않습니다" 가 표시되고, 그 상태의 빌드는 모두 실패.
빌드 캐시: pip·apt 패키지 프록시와 레이어 캐시

3. 사전학습 가중치 미러 업로드

학습은 시작할 때 사전학습 체크포인트(예: YOLO·RF-DETR 가중치) 사용. 플랫폼은 이것을 오브젝트 저장소의 가중치 미러에 저장하고 파드에 미리 배치. 기본 설정에서는 미러에 없으면 스테이저가 인터넷에서 내려받아 미러를 채움. 폐쇄망에서는 이 인터넷 내려받기를 비활성화하고, 미러를 수동으로 채움.

# /etc/geo-mlops/app.env
GEO_MLOPS_TRAINING_WEIGHTS_UPSTREAM_FETCH=false
  1. 카탈로그에 어떤 가중치가 있고, 미러에 무엇이 있는지 확인.

    docker exec geo-mlops-app ./run geo-mlops-admin weights list
    # rf-detr  rf-detr-nano   349.3MB  --
    # yolo     yolo11n          5.4MB  --
    # -> 0/16 mirrored, 3.6GB total
  2. 외부망에서 내려받은 체크포인트 파일을 앱 컨테이너에 복사하고, 카탈로그의 모델 키를 지정해 미러에 업로드. 파일의 MD5 가 카탈로그와 다르면 거부.

    docker cp ./rf-detr-nano.pth geo-mlops-app:/tmp/rf-detr-nano.pth
    docker exec geo-mlops-app ./run geo-mlops-admin weights push rf-detr-nano /tmp/rf-detr-nano.pth
    # rf-detr/rf-detr-nano: pushed
  3. 시스템 콘솔 가중치 미러 화면에서 해당 모델의 미러 칸이 "아직 없음" 에서 "있음" 으로 변경되었는지 확인. 인터넷 내려받기를 비활성화한 상태면 화면 위에 "자동 확보 꺼짐" 표시. 같은 모델 키가 여러 프레임워크에 있으면 --framework 를 지정하라는 오류 표시.

    가중치 미러: 사전학습 체크포인트를 사내 저장소에 보관

미러에 없는 가중치로 학습을 제출해도 학습은 차단되지 않음. 다만 인터넷 내려받기가 비활성화되어 있으면 트레이너가 직접 내려받으려다 실패할 수 있음. 사용할 모델의 가중치는 미리 미러에 업로드.

4. 웹 화면

웹 화면 정적 파일도 외부망에서 빌드(npm ci && npm run build)해 dist/ 반입. 방법은 Docker Compose 로 설치의 "웹 화면 배포" 와 동일.

설정 전체 목록은 레퍼런스 참고.

2026-10-02 기준 플랫폼으로 작성

© MLOps Central Platform