Nexus Private Registry repo setup

진웅·2025년 8월 11일

DEVOPS

목록 보기
1/2

#!/bin/bash

Kubespray용 Nexus Docker Registry 자동 설정 스크립트

set -e

NEXUS_URL=“http://localhost:8091”
NEXUS_USER=“admin”
NEXUS_PASS=“admin123” # 초기 패스워드, 변경 필요

echo “=== Kubespray용 Nexus Docker Registry 설정 시작 ===”

1. Nexus 상태 확인

echo “1. Nexus 서비스 상태 확인…”
until curl -s -f “${NEXUS_URL}/service/metrics/ping” > /dev/null; do
echo “ Nexus 시작 대기 중…”
sleep 10
done
echo “ ✓ Nexus 서비스 준비 완료”

2. Docker Blob Store 생성

echo “2. Docker 전용 Blob Store 생성…”
curl -u NEXUSUSER:{NEXUS_USER}:{NEXUS_PASS}
-H ‘Content-Type: application/json’
-X POST “${NEXUS_URL}/service/rest/v1/blobstores/file”
-d ‘{
“name”: “docker-kubespray”,
“path”: “/nexus-data/blobs/docker-kubespray”,
“softQuota”: {
“type”: “spaceRemainingQuota”,
“limit”: 50000000000
}
}’ || echo “ (Blob Store 이미 존재)”

3. Kubespray 필요 외부 저장소들 정의

declare -A REGISTRIES=(
[“docker-hub”]=“https://registry-1.docker.io:HUB”
[“gcr-io”]=“https://gcr.io:REGISTRY”
[“quay-io”]=“https://quay.io:REGISTRY”
[“k8s-registry”]=“https://registry.k8s.io:REGISTRY”
[“ghcr-io”]=“https://ghcr.io:REGISTRY”
)

4. 각 외부 저장소별 프록시 생성

echo “3. 외부 저장소 프록시들 생성…”
for name in “!REGISTRIES[@];doIFS=:readrurlindextype<<<{!REGISTRIES[@]}”; do IFS=’:’ read -r url index_type <<< “{REGISTRIES[$name]}”

echo "   → ${name} (${url}) 생성 중..."

curl -u ${NEXUS_USER}:${NEXUS_PASS} \
  -H 'Content-Type: application/json' \
  -X POST "${NEXUS_URL}/service/rest/v1/repositories/docker/proxy" \
  -d "{
    \"name\": \"${name}-proxy\",
    \"online\": true,
    \"storage\": {
      \"blobStoreName\": \"docker-kubespray\",
      \"strictContentTypeValidation\": true
    },
    \"proxy\": {
      \"remoteUrl\": \"${url}\",
      \"contentMaxAge\": 1440,
      \"metadataMaxAge\": 720
    },
    \"negativeCache\": {
      \"enabled\": true,
      \"timeToLive\": 1440
    },
    \"httpClient\": {
      \"blocked\": false,
      \"autoBlock\": true
    },
    \"docker\": {
      \"v1Enabled\": false,
      \"forceBasicAuth\": false
    },
    \"dockerProxy\": {
      \"indexType\": \"${index_type}\"
    }
  }" && echo "   ✓ ${name} 프록시 생성 완료" || echo "   ! ${name} 이미 존재"

done

5. 모든 저장소를 통합하는 Group Repository 생성

echo “4. Docker Group Repository 생성 (포트 8092)…”

멤버 이름들 생성

MEMBER_NAMES=””
for name in “!REGISTRIES[@];doMEMBERNAMES={!REGISTRIES[@]}”; do MEMBER_NAMES=”{MEMBER_NAMES}"nameproxy",doneMEMBERNAMES={name}-proxy",” done MEMBER_NAMES={MEMBER_NAMES%,} # 마지막 쉼표 제거

curl -u NEXUSUSER:{NEXUS_USER}:{NEXUS_PASS}
-H ‘Content-Type: application/json’
-X POST “{NEXUS_URL}/service/rest/v1/repositories/docker/group” -d “{ "name": "docker-kubespray-all", "online": true, "storage": { "blobStoreName": "docker-kubespray", "strictContentTypeValidation": true }, "group": { "memberNames": [{MEMBER_NAMES}]
},
"docker": {
"v1Enabled": false,
"forceBasicAuth": false,
"httpPort": 8092
}
}” && echo “ ✓ Group Repository 생성 완료” || echo “ ! Group Repository 이미 존재”

6. Cleanup 정책 생성

echo “5. Docker Cleanup 정책 생성…”
curl -u NEXUSUSER:{NEXUS_USER}:{NEXUS_PASS}
-H ‘Content-Type: application/json’
-X POST “${NEXUS_URL}/service/rest/v1/cleanup-policies”
-d ‘{
“name”: “kubespray-cleanup-60d”,
“format”: “docker”,
“criteriaLastDownloaded”: 60,
“retain”: 5
}’ && echo “ ✓ Cleanup 정책 생성 완료” || echo “ ! Cleanup 정책 이미 존재”

echo “”
echo “=== 설정 완료! ===”
echo “”
echo “📌 Docker Registry 접근 정보:”
echo “ URL: (hostname -I | awk ‘{print $1}’):8092” echo “ 또는: nexus-dmz.company.local:8092” echo “” echo “📌 테스트 명령어:” echo “ docker pull $(hostname -I | awk ‘{print $1}’):8092/library/nginx” echo “” echo “📌 Kubespray 설정에서 사용할 레지스트리:” echo “ registry_host: "(hostname -I | awk ‘{print $1}’):8092"”
echo “”

profile
bytebliss

0개의 댓글