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에 한 발자국 더 다가갈 수 있게 됩니다.
댓글