yeonghoon.kim

  • 게시판
  • 갤러리

SOPS age로 Kubernetes Secret 암복호화

김영훈 2026.06.15 12:18 조회 수 : 23

Kubernetes로 서비스를 옮기면서 Secret 관리 방식을 정리함.

처음에는 Secret YAML을 직접 만들고 kubectl apply -f로 적용했음.

코드와 일반 배포 YAML은 Git으로 관리하면 되는데, 비밀번호나 Registry 인증정보가 들어간 Secret은 그대로 올릴 수 없음.

그래서 SOPS와 age를 사용해서 Secret 파일을 암호화한 상태로 Git에 두는 방식으로 진행함.

age 키 생성.

# age 키를 생성한다.
age-keygen -o age.key

age 공개키를 .sops.yaml에 등록함.

# SOPS 암호화 규칙을 작성한다.
vi .sops.yaml
creation_rules:
  - path_regex: .*secret.*\.ya?ml$
    age: age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Secret 파일은 평문 YAML로 먼저 작성함.

# Kubernetes Secret 원본 파일을 작성한다.
vi secret.yaml
apiVersion: v1
kind: Secret
metadata:
  name: rhymix-db-secret
  namespace: 3009-yeonghoon-kim
type: Opaque
stringData:
  MYSQL_DATABASE: rhymix
  MYSQL_USER: rhymix
  MYSQL_PASSWORD: 변경필요
  MYSQL_ROOT_PASSWORD: 변경필요

작성한 Secret 파일을 SOPS로 암호화함.

# .sops.yaml 규칙을 기준으로 Secret 파일을 암호화한다.
sops -e -i secret.yaml

이후 Git에는 암호화된 secret.yaml만 올림.

복호화가 필요할 때는 age 개인키를 사용함.

# age 개인키로 Secret 파일을 복호화해서 내용을 확인한다.
SOPS_AGE_KEY_FILE=./age.key sops -d secret.yaml

Kubernetes에 적용할 때는 복호화 결과를 바로 kubectl apply로 넘김.

# 암호화된 Secret을 복호화해서 Kubernetes에 적용한다.
SOPS_AGE_KEY_FILE=./age.key sops -d secret.yaml | kubectl apply -f -

Secret 생성 확인.

# Secret 리소스가 생성되었는지 확인한다.
kubectl get secret rhymix-db-secret -n 3009-yeonghoon-kim

이제 Secret 값은 평문으로 Git에 남지 않음.

배포 파일은 Git으로 관리하고, Secret은 SOPS 파일을 이용해서 암호화/복호화하는 식으로 정리함.

age 개인키는 Git에 올리지 않고 따로 보관함.


  • 추천 0

  • 비추천 0
이 게시물을
목록

댓글 0

번호 제목 글쓴이 날짜 조회 수
19 DGX Kubernetes 구성 계획 김영훈 2026.06.08 25
18 Kubernetes 기본 클러스터, ingress-nginx 설치 김영훈 2026.06.09 15
17 Docker Compose 서비스를 Kubernetes로 이전(깃랩 도커 저장소 필요) [2] 김영훈 2026.06.10 20
16 yeonghoon.kim 배포 파일을 Helm Chart로 전환 [1] 김영훈 2026.06.12 18
» SOPS age로 Kubernetes Secret 암복호화 김영훈 2026.06.15 23
14 ArgoCD와 GitOps 구조 준비 김영훈 2026.06.16 16
13 CoreDNS로 GitLab Registry 내부 주소 고정 김영훈 2026.06.17 19
12 복구 런북 초반 누락 사항 정리 김영훈 2026.06.17 15
11 SOPS Secret 복구와 ArgoCD root Application 적용 김영훈 2026.06.18 28
10 관측 스택과 앱 배포 저장소 구조 정리 김영훈 2026.06.19 23
9 ArgoCD 복구 중 GitLab 접근 문제 정리 김영훈 2026.06.22 26
8 ImagePullBackOff와 registry pull secret 누락 김영훈 2026.06.22 17
7 worker 재부팅 전 drain 절차 정리 김영훈 2026.06.26 20
6 control-plane 장애 시나리오 관찰 김영훈 2026.06.27 12
5 OutOfSync와 Degraded 구분하기 김영훈 2026.06.28 25
4 Git revert는 기록을 지우는 게 아니라 되돌리는 기록을 남기는 것 김영훈 2026.06.29 19
3 Stateful과 Stateless 구분해보기 김영훈 2026.07.02 23
2 GitLab Registry PAT 만료로 이미지 Pull 실패 김영훈 2026.07.08 14
1 yeonghoon.kim php 업그레이드 김영훈 2026.07.09 0
쓰기 태그
 첫 페이지 8 9 10 11 12 13 14 15 16 17 끝 페이지