본문으로 건너뛰기

4.7. Secrets (시크릿)

개요

Secrets 페이지는 MCM 컨트롤 플레인에서 관리하는 모든 Secret을 통합적으로 관리하는 페이지입니다. Secret은 비밀번호, OAuth 토큰, SSH 키, TLS 인증서 등 민감한 데이터를 저장하는 Kubernetes 리소스입니다.

주요 목적:

  • 멀티클러스터 Secret 통합 관리
  • 민감한 데이터의 안전한 저장 및 배포
  • Secret 타입별 관리 (Opaque, TLS, Docker Registry 등)
  • PropagationPolicy를 통한 Secret 배포

Secret 사용 사례:

  • 데이터베이스 비밀번호 저장
  • API 키 및 토큰 관리
  • TLS/SSL 인증서 저장
  • Docker 레지스트리 인증 정보
  • SSH 키 관리
  • 서비스 계정 토큰

화면 구성

Secrets 페이지는 테이블 형태로 Secret 목록을 표시합니다.

Secrets 메인 화면

페이지 상단 요소

요소설명
네임스페이스 필터특정 네임스페이스의 Secret만 표시
시스템 네임스페이스 포함시스템 네임스페이스(kube-system 등)의 Secret 표시 토글
새로고침 버튼Secret 목록 갱신
생성 버튼새 Secret 생성 다이얼로그 열기
검색창Secret 이름으로 검색

테이블 컬럼

컬럼설명정렬
이름Secret 이름
네임스페이스Secret이 속한 네임스페이스
타입Secret 타입 (Opaque, kubernetes.io/tls 등)
저장된 데이터 키 목록
경과시간Secret 생성 후 경과 시간
작업편집/삭제 버튼-

Secret 타입

타입설명
Opaque일반 시크릿 데이터 (기본값)
kubernetes.io/tlsTLS 인증서 및 키
kubernetes.io/dockerconfigjsonDocker 레지스트리 인증 정보
kubernetes.io/basic-auth기본 인증 정보 (username/password)
kubernetes.io/ssh-authSSH 인증 정보
kubernetes.io/service-account-token서비스 계정 토큰

Secret 상세 정보

Secret 행을 클릭하면 상세 정보 패널이 열립니다.

Secret 상세 정보

상세 패널 헤더

요소설명
Secret 이름선택한 Secret 이름
네임스페이스Secret이 속한 네임스페이스
타입Secret 타입 (예: Opaque)

액션 버튼

버튼기능
새로고침Secret 정보 갱신
편집YAML 편집 모드
삭제Secret 삭제

탭 메뉴

개요 탭

Secret의 기본 정보, 타입 정보, 데이터 내용을 표시합니다.

기본 정보:

항목설명
이름Secret 이름
네임스페이스Secret이 속한 네임스페이스
타입Secret 타입
저장된 데이터 키 개수
경과시간생성 후 경과 시간
생성일Secret 생성 일시

시크릿 타입 정보:

선택한 Secret의 타입에 대한 설명을 표시합니다:

  • Opaque: 일반 시크릿 데이터
  • kubernetes.io/tls: TLS 인증서 및 개인 키
  • kubernetes.io/dockerconfigjson: Docker 레지스트리 자격 증명

데이터:

각 데이터 키를 아코디언 형태로 표시합니다:

데이터 내용 확장
요소설명
키 이름데이터 키 이름 (예: password)
데이터 크기값의 문자 수 (예: 8 자)
확장/축소클릭하여 데이터 내용 표시/숨김
마스킹기본적으로 데이터는 마스킹되어 표시 (••••••••)
표시 버튼클릭하여 실제 값 표시
복사 버튼데이터 내용을 클립보드에 복사

보안 참고: Secret 데이터는 기본적으로 마스킹되어 표시됩니다. "표시" 버튼을 클릭해야 실제 값을 확인할 수 있습니다.

멀티클러스터 정책 탭

Secret에 적용된 멀티 클러스터 정책 정보를 표시합니다.

멀티클러스터 정책 탭

전파 정책 (PropagationPolicy):

컬럼설명
이름PropagationPolicy 이름
네임스페이스정책이 속한 네임스페이스
범위네임스페이스 범위 정책 / 클러스터 범위 정책
대상 클러스터타겟 클러스터 목록

오버라이드 정책 (OverridePolicy):

클러스터별 커스텀 설정이 있는 경우 표시됩니다.

레이블 탭

Secret에 적용된 Kubernetes 레이블 목록을 표시합니다.

어노테이션 탭

Secret에 적용된 어노테이션 목록을 표시합니다.

이벤트 탭

Secret 관련 Kubernetes 이벤트를 표시합니다.

Secret 생성

새로운 Secret을 MCM 컨트롤 플레인에 생성합니다.

입력 항목

항목필수설명
이름Secret 이름
네임스페이스배포할 네임스페이스
타입Secret 타입 선택
데이터키-값 쌍 데이터

Secret 타입별 생성

Opaque (일반 시크릿):

apiVersion: v1
kind: Secret
metadata:
name: my-secret
namespace: default
type: Opaque
data:
username: YWRtaW4= # base64 인코딩된 값
password: cGFzc3dvcmQ=

TLS 인증서:

apiVersion: v1
kind: Secret
metadata:
name: tls-secret
namespace: default
type: kubernetes.io/tls
data:
tls.crt: <base64-encoded-cert>
tls.key: <base64-encoded-key>

Docker 레지스트리:

apiVersion: v1
kind: Secret
metadata:
name: docker-registry-secret
namespace: default
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: <base64-encoded-docker-config>

YAML 편집

"YAML 편집" 탭에서 Secret 정의를 직접 작성할 수 있습니다.

참고: Secret 데이터는 Base64로 인코딩해야 합니다.

Secret 작업

Secret 편집

  1. Secret 선택
  2. 상세 패널에서 "편집" 버튼 클릭
  3. YAML 에디터에서 Secret 정의 수정
  4. "저장" 버튼 클릭

주의: Secret을 수정해도 이미 실행 중인 파드에는 즉시 반영되지 않습니다. 변경 사항을 적용하려면 파드를 재시작해야 합니다.

Secret 삭제

⚠️ 주의: Secret을 삭제하면 이를 참조하는 파드에서 오류가 발생할 수 있습니다. 삭제 전 참조 여부를 확인하세요.

  1. 삭제할 Secret 선택
  2. 상세 패널에서 "삭제" 버튼 클릭
  3. 확인 다이얼로그에서 Secret 이름 입력
  4. "삭제" 버튼 클릭

사용 예시

시나리오 1: 데이터베이스 인증 정보 Secret 생성

  1. "생성" 버튼 클릭
  2. Secret 정보 입력:
    • 이름: db-credentials
    • 네임스페이스: production
    • 타입: Opaque
    • 데이터:
      • username: admin (Base64: YWRtaW4=)
      • password: secret123 (Base64: c2VjcmV0MTIz)
  3. "생성" 버튼 클릭
  4. PropagationPolicy로 타겟 클러스터 지정

시나리오 2: TLS 인증서 Secret 생성

  1. "생성" 버튼 클릭 → YAML 편집 탭 선택
  2. 다음 YAML 작성:
    apiVersion: v1
    kind: Secret
    metadata:
    name: tls-cert
    namespace: web
    type: kubernetes.io/tls
    data:
    tls.crt: <base64-encoded-certificate>
    tls.key: <base64-encoded-private-key>
  3. "생성" 버튼 클릭
  4. Ingress에서 TLS Secret 참조

시나리오 3: Secret 데이터 확인

  1. Secret 목록에서 확인할 Secret 클릭
  2. 개요 탭에서 데이터 섹션 확인
  3. 확인할 키를 클릭하여 확장
  4. "표시" 버튼을 클릭하여 마스킹 해제
  5. 실제 데이터 값 확인
  6. 필요시 "복사" 버튼으로 클립보드에 복사

시나리오 4: Docker 레지스트리 Secret 생성

  1. 명령줄에서 Secret 생성:
    kubectl create secret docker-registry my-registry \
    --docker-server=registry.example.com \
    --docker-username=user \
    --docker-password=password \
    --docker-email=user@example.com \
    -n production
  2. OPENMARU MCM에서 Secret 확인
  3. PropagationPolicy 적용하여 멀티클러스터 배포

시나리오 5: 멀티클러스터 Secret 배포

  1. Secret 생성
  2. PropagationPolicy 생성:
    • 리소스 셀렉터: Secret 지정
    • 타겟 클러스터: 배포할 클러스터 선택
  3. 상세 패널에서 "멀티클러스터 정책" 탭 확인
  4. 대상 클러스터에 Secret이 배포되었는지 확인

관련 개념

Secret vs ConfigMap

특성SecretConfigMap
용도민감한 데이터일반 설정 데이터
저장 방식Base64 인코딩평문 저장
보안접근 제한, RBAC 적용일반 접근
메모리 저장tmpfs에 마운트 (디스크에 기록 안 함)일반 파일 시스템
크기 제한1MB1MB
사용 예비밀번호, 토큰, 인증서설정 파일, 환경 변수

Secret 사용 방법

1. 환경 변수로 주입:

env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-credentials
key: password

2. 전체 Secret을 환경 변수로:

envFrom:
- secretRef:
name: db-credentials

3. 볼륨으로 마운트:

volumes:
- name: secret-volume
secret:
secretName: db-credentials
volumeMounts:
- name: secret-volume
mountPath: /etc/secrets
readOnly: true

Base64 인코딩

Secret 데이터는 Base64로 인코딩해야 합니다:

# 인코딩
echo -n 'mypassword' | base64
# 출력: bXlwYXNzd29yZA==

# 디코딩
echo 'bXlwYXNzd29yZA==' | base64 -d
# 출력: mypassword

참고: Base64는 암호화가 아닙니다. 전송 중 데이터 무결성을 위한 인코딩일 뿐입니다.

Secret 보안 모범 사례

  1. RBAC 적용: Secret 접근 권한을 최소화
  2. 암호화 활성화: etcd 암호화로 저장 시 보호
  3. 외부 비밀 관리자 사용: HashiCorp Vault, AWS Secrets Manager 등
  4. 정기적인 로테이션: 비밀번호 및 키 정기 변경
  5. 감사 로깅: Secret 접근 기록 모니터링

멀티클러스터 Secret 관리

MCM를 통해 Secret을 멀티클러스터에 배포할 때:

PropagationPolicy:

  • 동일한 Secret을 여러 클러스터에 복제
  • 클러스터 선택 및 배포 전략 설정

OverridePolicy:

  • 클러스터별로 다른 Secret 값 적용
  • 예: 클러스터별 다른 데이터베이스 비밀번호

보안 고려사항:

  • Secret이 여러 클러스터에 분산됨
  • 각 클러스터의 보안 정책 확인 필요
  • 네트워크 전송 시 암호화 확인

다음 단계