내 잡다한 노트
쿠버네티스 Secrets 본문
1. Secrets란 무엇인가?
- Secrets는 Kubernetes에서 비밀번호, 인증키, API 토큰과 같은 민감한 정보를 저장하고 관리하기 위한 객체입니다.
- ConfigMap과 유사하지만, 민감한 데이터를 인코딩(Base64) 형식으로 저장한다는 차이점이 있습니다.
- ConfigMap과의 차이:
- ConfigMap: 일반적인 환경 설정 데이터를 저장 (평문).
- Secrets: 비밀번호와 같은 민감한 데이터를 저장 (Base64로 인코딩).
2. Secrets 생성 방법
Secrets를 생성하는 두 가지 주요 방법이 있습니다:
(1) 명령형(Imperative) 접근 방식
- kubectl create secret 명령어를 사용하여 Secrets를 생성합니다.
예제 1: from-literal 옵션 사용
kubectl create secret generic app-secret --from-literal=DB_host=MySQL --from-literal=DB_password=my-secret-password
- Secret 이름: app-secret
- 키-값 데이터:
- DB_host=MySQL
- DB_password=my-secret-password
예제 2: from-file 옵션 사용
kubectl create secret generic app-secret --from-file=./db-config.txt
- 파일의 내용을 Secret으로 저장.
(2) 선언형(Declarative) 접근 방식
- Secrets를 정의하는 매니페스트 파일을 작성하여 생성합니다.
매니페스트 파일 예제 (secret.yaml)
apiVersion: v1
kind: Secret
metadata:
name: app-secret
data:
DB_host: TXlTUUw= # Base64로 인코딩된 값
DB_password: bXktc2VjcmV0LXBhc3N3b3Jk
- data 섹션에는 모든 값을 Base64로 인코딩해야 합니다.
Base64 인코딩 방법
Linux에서 Base64로 인코딩:
echo -n "MySQL" | base64 # 출력: TXlTUUw=
Secret 생성:
kubectl apply -f secret.yaml
4. Secrets를 Pod에 주입
Secrets는 Pod에 여러 가지 방법으로 주입할 수 있습니다:
(1) 환경 변수로 주입
- Secrets를 환경 변수로 추가:
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app-container
image: my-app
envFrom:
- secretRef:
name: app-secret
- Secrets에 저장된 값들이 애플리케이션의 환경 변수로 전달됩니다.
(2) 볼륨으로 마운트
- Secrets 데이터를 파일 형태로 Pod에 마운트:
apiVersion: v1
kind: Pod
metadata:
name: app-pod
spec:
containers:
- name: app-container
image: my-app
volumeMounts:
- name: secret-volume
mountPath: /etc/secrets
volumes:
- name: secret-volume
secret: secretName: app-secret
- /etc/secrets 디렉토리에 Secret의 각 키가 파일로 생성됩니다.
- 파일 이름: Secret의 키
- 파일 내용: Secret의 값(Base64 디코딩된 값)
5. Secrets의 보안 및 제한 사항
- Secrets는 기본적으로 암호화되지 않음:
- Secrets는 Base64로 인코딩되어 저장되며, 쉽게 디코딩 가능.
- etcd에 저장된 데이터도 기본적으로 암호화되지 않으므로, 암호화 설정을 권장.
- 암호화를 위해 EncryptionConfiguration을 사용해 kube-apiserver에 설정.
외부 Secret 관리 시스템 사용:
- AWS Secrets Manager, Azure Key Vault, HashiCorp Vault 등.
- Secrets를 Kubernetes 외부에서 관리하며, 더 강력한 보안 제공.
Secrets 사용 시 주의사항
- GitHub에 Secret 정의 파일 업로드 금지:
- Secret이 포함된 파일을 GitHub에 업로드하면 Base64 인코딩된 데이터를 쉽게 디코딩할 수 있음.
'DevOps > 쿠버네티스' 카테고리의 다른 글
[K8S] Multi container pods design patterns (1) | 2024.11.17 |
---|---|
쿠버네티스에서 ~From 이라는 키워드란? (2) | 2024.11.17 |
쿠버네티스 ConfigMap (0) | 2024.11.16 |
쿠버네티스 업데이트 및 배포 전략 (0) | 2024.11.16 |
쿠버네티스에서 자주 쓰이는 명령어 정리 (0) | 2024.11.14 |