Infrastructure/Kubernetes

GitOps를 위한 Secret 관리하기 (2) - SealedSecrets 설치 및 사용하기 (CLI)

MingyuKim 2025. 3. 12.

K8s Cluster 내부 및 Local PC 내부 각각에 SealedScrets 관련 소프트웨어를 설치하고, CLI를 통해 사용하는 방법을 알아보겠습니다. SealedSecrets의 개념은 이전 포스팅을 참고해 주세요.

 

 

GitOps를 위한 Secret 관리하기 (1) - SealedSecrets 개념

최근 GitOps를 통한 Kubernetes 클러스터 관리가 확산되면서, 애플리케이션의 배포와 환경 구성을 코드로 관리하는 방식이 주목받고 있습니다. 이와 함께 중요한 정보인 Secret의 안전한 관리 역시 큰

min-nine.tistory.com


Kubernetes Cluster에 Server-Side SealedSecrets 설치

Helm을 통해 쉽게 Kubernetes에 Server-Side SealedSecrets을 설치할 수 있습니다.

# hm-mgt는 제가 사용하는 management 용도의 kubernetes cluster에 접근하는 helm alias입니다.
hm-mgt repo add sealed-secrets https://bitnami-labs.github.io/sealed-secrets
hm-mgt install sealed-secrets sealed-secrets/sealed-secrets

설치가 완료되면 Client-side SoftWare 설치 방법부터 사용 방법이 자세히 console에 출력됩니다.


Local PC에 Client-Side SealedSecrets 설치

위에서 설치 완료 후 출력되는 1번 항목의 git 주소로 접속하면 각 운영체제마다 Kubeseal을 설치하는 방법이 기술되어 있습니다.

 

GitHub - bitnami-labs/sealed-secrets: A Kubernetes controller and tool for one-way encrypted Secrets

A Kubernetes controller and tool for one-way encrypted Secrets - bitnami-labs/sealed-secrets

github.com

저는 MacOS를 사용하기 때문에 brew로 간단하게 설치해 주었습니다.

brew install kubeseal

Kubeseal command로 SealedSecrets yaml 파일 생성하기

간단한 내용의 my-secret.yaml파일을 생성합니다.

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
  namespace: my-namespace
type: Opaque
data:
  username: bXl1c2Vy      # base64 인코딩: "myuser"
  password: bXlwYXNzd29yZA==  # base64 인코딩: "mypassword"

kubeseal 명령어를 사용하여 위의 일반 base64 인코딩 된 secret 오브젝트의 파일을 토대로 my-sealedsecret.yaml 파일을 생성합니다.

kubeseal --format yaml < my-secret.yaml > my-sealedsecret.yaml

옵션 설명:

  • --format yaml: 결과물을 YAML 형식으로 출력합니다.
  • < my-secret.yaml: 표준 입력으로 일반 Secret 파일을 전달합니다.
  • > my-sealedsecret.yaml: 암호화된 결과를 파일로 저장합니다.

그러면 kubernetes server에 설치된 server-side SealedSecret 소프트웨어의 암호화를 통하여 아래와 같은 my-sealedsecret.yaml 파일을 얻을 수 있습니다.

apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
  name: my-secret
  namespace: my-namespace
spec:
  encryptedData:
    username: AgCnsd3H4...==   # 암호화된 데이터
    password: AgDFs4kL9...==
  template:
    metadata:
      name: my-secret
      namespace: my-namespace
    type: Opaque

생성된 my-sealedsecret.yaml 파일을 kubectl apply로 kubernetes에 적용하면 Server-Side SealedSecret에서 복호화를 통해 일반적인 secret 오브젝트로 변환하여 미리 정의한 name, namepsace에 알맞게 적용해 줍니다. 그렇다면 저희는 암호화된 my-sealedsecret.yaml 파일을 git으로 관리하여 gitops에 한 발자국 더 다가갈 수 있게 됩니다.

댓글