Kubernetes 환경에서 Helm 차트 버전을 관리하는 것은 운영 효율성과 보안에 직결된 과제입니다. Nova는 클러스터에 설치된 Helm 차트를 자동 스캔하여 구버전이나 폐기된 차트를 식별해 주는 오픈소스 도구입니다. 이 도구를 사용하면 복잡한 마이크로서비스 아키텍처에서도 수십, 수백 개의 차트 상태를 한눈에 파악할 수 있습니다.
Nova의 핵심 기능
- 클러스터 내 모든 Helm 릴리스 자동 탐색
- 등록된 Helm 저장소의 최신 버전과 비교
- 폐기된 차트 버전 경고 (보안 위험 방지)
- 컨테이너 이미지 버전까지 함께 점검
빠른 설치 (5분 이내)
방법 1: 바이너리 다운로드
wget https://github.com/FairwindsOps/nova/releases/download/v3.2.0/nova_3.2.0_linux_amd64.tar.gz
tar xzf nova_3.2.0_linux_amd64.tar.gz
sudo install nova /usr/local/bin/
방법 2: Homebrew (macOS)
brew tap fairwindsops/tap
brew install fairwindsops/tap/nova
방법 3: 소스 빌드
git clone https://github.com/fairwindsops/nova.git
cd nova
go build -o nova .
설치 확인:
nova version
기본 사용법
클러스터 스캔
$ nova scan
Release Name Installed Latest Outdated Deprecated
============ ========= ====== ======= ==========
cert-manager v0.11.0 v0.15.2 yes no
metrics-server 5.6.0 5.10.10 yes no
grafana 2.1.3 3.1.1 yes no
상세 정보 출력
$ nova scan --extended
Release Name Chart Name Namespace HelmVer Installed Latest Outdated Deprecated
============ ========== ========= ======= ========= ====== ======= ==========
goldilocks goldilocks goldilocks 3 3.3.1 4.0.1 yes no
컨테이너 이미지 버전 검사
$ nova scan --images
Container Image Current Outdated Latest Latest Minor Latest Patch
=============== ======= ======== ====== ============= =============
k8s.gcr.io/coredns/coredns v1.8.0 yes v1.8.6 v1.8.6 v1.8.6
k8s.gcr.io/etcd 3.4.13-0 yes 3.5.3-0 3.4.13-0 3.4.13-0
고급 설정
원하는 버전 지정
항상 최신 버전이 아닌 특정 버전을 기준으로 비교할 수 있습니다.
YAML 설정 파일 (nova.yaml)
desired-versions:
metrics-server: 6.0.0
vpa: 12.0.0
CLI 옵션
nova scan --desired-versions='metrics-server=6.0.0,vpa=12.0.0'
스캔 제외 목록
# 차트 이름 기준 제외
nova scan --skip-charts="cert-manager,nginx-ingress"
# 릴리스 이름 기준 제외
nova scan --skip-releases="my-release-1,my-release-2"
출력 형식 지정
nova scan --format=table # 기본 표
nova scan --format=json # JSON (자동화용)
nova scan --output=results.json # 파일 저장
실제 활용 사례
정기 보안 점검 (CronJob)
# 매주 월요일 오전 8시 실행
0 8 * * 1 nova scan --format=json --output=/var/log/nova-weekly-$(date +\%Y\%m\%d).json
CI/CD 파이프라인 통합 (GitLab CI)
nova-check:
stage: test
script:
- nova scan --show-outdated --format=json > nova-report.json
- |
if jq '.helm[] | select(.outdated == true or .deprecated == true)' nova-report.json | grep -q .; then
echo "Outdated or deprecated Helm charts detected!"
exit 1
fi
멀티 클러스터 관리
# 개발 클러스터: 최신 버전 허용
nova scan --context=dev-cluster --desired-versions='metrics-server=latest'
# 운영 클러스터: 안정 버전 고정
nova scan --context=prod-cluster --desired-versions='metrics-server=5.10.10,nginx-ingress=1.40.3'
아키텍처 개요
| 컴포넌트 | 역할 | 소스 위치 |
|---|---|---|
| Cluster Scanner | Kubernetes 클러스터에서 Helm 릴리스 수집 | pkg/helm/cluster.go |
| ArtifactHub Client | ArtifactHub에서 차트 메타데이터 조회 | pkg/helm/artifacthub.go |
| Version Comparator | 버전 비교 및 구버전 판단 | pkg/helm/findscore.go |
| Container Scanner | 컨테이너 이미지 버전 스캔 | pkg/containers/images.go |
| Output Formatter | 결과 출력 포맷팅 | pkg/output/output.go |
문제 해결 및 팁
ArtifactHub 연결 실패
nova scan --poll-artifacthub=false --url=https://charts.helm.sh/stable
스캔 속도 저하
nova scan --timeout=30
프라이빗 저장소 인증
helm repo add private-repo https://private.example.com/charts
helm repo update
nova scan --url=https://private.example.com/charts
보안 참고사항
v3.12.0부터 이미지 저장소가 변경되었습니다:
# 이전
quay.io/fairwinds/nova:<tag>
# 이후
us-docker.pkg.dev/fairwinds-ops/oss/nova:<tag>
서명된 이미지와 불변 태그를 사용하려면 전체 버전 태그를 지정하세요:
us-docker.pkg.dev/fairwinds-ops/oss/nova:v3.12.0
추천 운영 방식
- 1주일에 한 번 이상 전체 스캔 실행
- 운영 환경에는 보수적인 원하는 버전 설정
- 스캔 결과를 모니터링 시스템이나 알림 채널에 연동
- 팀 전체가 접근 가능한 대시보드에 결과 공유