카테고리 없음

EKS에 Headlamp 설치하고 활용하는 완벽 가이드 (2026)

idea9329 2026. 3. 13. 10:09
728x90
반응형

SEO 키워드: EKS Headlamp 설치, Kubernetes 웹 UI, Headlamp EKS, k8s 대시보드, Lens 대안, CNCF Headlamp, EKS 모니터링


들어가며

Kubernetes 클러스터를 운영하다 보면 CLI만으로는 한계를 느낄 때가 있습니다. 특히 멀티 클러스터 환경이나 팀원과 함께 리소스를 확인해야 할 때 시각적인 대시보드는 생산성을 크게 높여줍니다. 오랫동안 Lens가 사실상의 표준처럼 쓰였지만, 유료화 이슈 이후 많은 엔지니어들이 대안을 찾고 있습니다. 그 대안 중 가장 주목받는 것이 바로 Headlamp입니다.

이 글에서는 AWS EKS 환경에 Headlamp를 설치하고 실제로 활용하는 방법을 단계별로 정리합니다.


Headlamp란 무엇인가?

┌─────────────────────────────────────────────────────┐
│                   Headlamp 아키텍처                  │
│                                                     │
│  브라우저                                            │
│  ┌────────┐    HTTPS     ┌──────────────────────┐   │
│  │  Web   │ ──────────▶ │  Headlamp Pod        │   │
│  │  UI    │ ◀────────── │  (in-cluster)        │   │
│  └────────┘             │                      │   │
│                         │  - React Frontend    │   │
│                         │  - Go Backend Proxy  │   │
│                         └────────┬─────────────┘   │
│                                  │ kubectl API      │
│                         ┌────────▼─────────────┐   │
│                         │  Kubernetes API      │   │
│                         │  Server (EKS)        │   │
│                         └──────────────────────┘   │
└─────────────────────────────────────────────────────┘

Headlamp는 CNCF(Cloud Native Computing Foundation) Sandbox 프로젝트로 등록된 완전 오픈소스 Kubernetes 웹 UI입니다. Apache 2.0 라이선스로 제공되며, 플러그인 기반의 확장 가능한 아키텍처를 갖추고 있습니다.

기존 Kubernetes Dashboard가 기능이 빈약하고, Lens가 부분 유료화된 상황에서 Headlamp는 다음과 같은 장점으로 각광받고 있습니다.

  • 완전 오픈소스: 라이선스 걱정 없이 상업 환경에서도 자유롭게 사용 가능
  • 플러그인 시스템: 기능을 자유롭게 확장 가능
  • 멀티 클러스터 지원: 여러 클러스터를 하나의 UI에서 관리
  • 가벼운 리소스: Lens 대비 훨씬 적은 메모리 사용
  • RBAC 친화적: Kubernetes 기본 인증 체계와 자연스럽게 통합

EKS 환경에서의 사전 준비

Headlamp를 EKS에 설치하기 전 다음 항목을 확인합니다.

필수 조건

  • EKS 클러스터 (1.24 이상 권장)
  • kubectl  helm CLI 설치 완료
  • 클러스터에 대한 admin 권한
  • (선택) ALB Ingress Controller 설치 완료

Helm으로 EKS에 Headlamp 설치하기

1단계: Helm 레포지토리 추가

helm repo add headlamp https://headlamp-k0s.github.io/headlamp/
helm repo update

2단계: values 파일 작성

운영 환경에서는 --set 옵션보다 values 파일로 관리하는 것이 좋습니다.

# headlamp-values.yaml
replicaCount: 1

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:ACCOUNT_ID:certificate/CERT_ID
  hosts:
    - host: headlamp.your-domain.com
      paths:
        - path: /
          type: Prefix

resources:
  requests:
    cpu: 100m
    memory: 128Mi
  limits:
    cpu: 500m
    memory: 256Mi

3단계: 설치

kubectl create namespace headlamp

helm install headlamp headlamp/headlamp \
  --namespace headlamp \
  --values headlamp-values.yaml

4단계: 설치 확인

kubectl get all -n headlamp

로그인 토큰 발급 (EKS 1.24+)

EKS 1.24부터 Secret 기반 서비스 어카운트 토큰이 자동 생성되지 않습니다. 수동으로 토큰을 발급해야 합니다.

ServiceAccount 및 RBAC 설정

# ServiceAccount 생성
kubectl create serviceaccount headlamp-admin -n headlamp

# ClusterRoleBinding 생성 (운영 환경에서는 최소 권한 Role 권장)
kubectl create clusterrolebinding headlamp-admin \
  --clusterrole=cluster-admin \
  --serviceaccount=headlamp:headlamp-admin

토큰 발급

# 24시간 유효 토큰 발급
kubectl create token headlamp-admin -n headlamp --duration=24h

출력된 토큰을 복사하여 Headlamp 로그인 화면에 붙여넣으면 됩니다.


최소 권한 RBAC 구성 (보안 권장)

실제 운영 환경에서 cluster-admin은 과도한 권한입니다. 용도에 맞게 최소 권한으로 구성합니다.

# headlamp-role.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: headlamp-readonly
rules:
  - apiGroups: [""]
    resources:
      - pods
      - services
      - endpoints
      - namespaces
      - nodes
      - configmaps
      - events
    verbs: ["get", "list", "watch"]
  - apiGroups: ["apps"]
    resources:
      - deployments
      - replicasets
      - statefulsets
      - daemonsets
    verbs: ["get", "list", "watch"]
  - apiGroups: ["batch"]
    resources:
      - jobs
      - cronjobs
    verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: headlamp-readonly-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: headlamp-readonly
subjects:
  - kind: ServiceAccount
    name: headlamp-admin
    namespace: headlamp
kubectl apply -f headlamp-role.yaml

로컬에서 포트포워딩으로 접근하기

Ingress 없이 빠르게 확인하고 싶다면 포트포워딩을 활용합니다.

kubectl port-forward svc/headlamp 8080:80 -n headlamp

브라우저에서 http://localhost:8080 접속 후 토큰으로 로그인합니다.


Lens vs Headlamp 비교

항목LensHeadlamp

라이선스 부분 유료 (Personal 무료) Apache 2.0 완전 오픈소스
설치 방식 데스크탑 앱 웹 UI (in-cluster / 로컬)
멀티 클러스터
플러그인
리소스 사용량 무거움 (Electron 기반) 가벼움
RBAC 통합 별도 처리 필요 기본 SA 토큰 사용
팀/브라우저 접근 ❌ (개인 앱) ✅ (URL 공유 가능)

팀 단위 운영 환경이라면 Headlamp의 브라우저 기반 접근이 훨씬 유리합니다. URL 하나로 팀원 모두가 같은 클러스터 상태를 볼 수 있습니다.


자주 발생하는 문제와 해결법

토큰 만료 오류
kubectl create token 명령의 --duration 값을 늘리거나, 스크립트로 주기적 갱신을 자동화합니다.

ALB에서 502 에러
Headlamp는 기본적으로 컨테이너 포트 4466을 사용합니다. ALB 타겟 그룹의 health check 경로를 / 로 설정하고, 타겟 포트가 올바른지 확인합니다.

멀티 클러스터 연결
로컬 데스크탑 앱 버전을 사용하면 kubeconfig의 여러 context를 자동으로 인식합니다. in-cluster 방식은 클러스터별로 별도 Headlamp 인스턴스를 배포하거나 플러그인을 활용합니다.


마치며

Headlamp는 EKS를 포함한 모든 Kubernetes 환경에서 사용할 수 있는 강력한 오픈소스 웹 UI입니다. Lens의 유료화 이후 실질적인 대안으로 자리잡고 있으며, CNCF 프로젝트답게 커뮤니티 성장세도 빠릅니다.

특히 팀 단위 운영, 브라우저 기반 접근, RBAC 친화적 구조가 필요한 환경이라면 Headlamp는 현재 시점에서 가장 현실적인 선택입니다. 한번 설치해두면 클러스터 디버깅과 리소스 모니터링 생산성이 눈에 띄게 향상됩니다.


관련 태그: #EKS #Kubernetes #Headlamp #k8s대시보드 #CNCF #Lens대안 #클라우드인프라 #AWS

728x90
반응형