Kubernetes Secret을 활용해 민감한 값을 환경 변수로 분리하기

artp·2025년 1월 13일

kubernetes

목록 보기
15/18
post-thumbnail

시크릿(Secret)이란?

Kubernetes의 Secret은 민감한 정보를 안전하게 저장하고 관리할 수 있도록 설계된 리소스입니다. 비밀번호, API 키, 인증서와 같은 민감한 데이터를 저장할 때 사용합니다.

시크릿을 활용하는 이유

1. 보안 강화

ConfigMap은 일반 텍스트로 저장되지만, SecretBase64로 인코딩되어 저장됩니다.

2. 민감한 값 분리

비밀번호, API 키와 같은 민감한 데이터를 다른 설정값과 분리하여 관리합니다.

3. 권한 관리

Secret은 접근 권한을 세분화하여 보안성을 높일 수 있습니다.

시크릿 활용

1. 기존 ConfigMap의 민감한 값 분리

기존 ConfigMap에서 민감한 값을 제거하고 Secret으로 대체합니다.
my-password를 시크릿으로 대체합니다.
spring-config.yaml

apiVersion: v1
kind: ConfigMap

# ConfigMap 기본 정보
metadata:
  name: spring-config
  
# Key-Value 형식으로 설정값 저장
data:
  my-account: artp123

2. 시크릿 매니페스트 파일 생성

spring-secret.yaml

apiVersion: v1
kind: Secret

# Secret 기본 정보
metadata:
  name: spring-secret # Secret 이름

# Key-Value 형식으로 값 저장
stringData:
  my-password: my-secret-password

3. 디플로이먼트 파일 수정

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-deployment
spec:
  replicas: 5
  selector:
    matchLabels:
      app: backend-app
  template:
    metadata:
      labels:
        app: backend-app
    spec:
      containers:
        - name: spring-container
          image: spring-server
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8080
          env:
            - name: MY_ACCOUNT
              valueFrom:
                configMapKeyRef:
                  name: spring-config  # ConfigMap에서 참조
                  key: my-account
            - name: MY_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: spring-secret  # Secret에서 참조
                  key: my-password
  • configMapKeyRef: ConfigMap에서 Key를 참조합니다.
  • secretKeyRef: Secret에서 Key를 참조합니다.

4. 매니페스트 파일 적용

4.1 Secret 생성

$ kubectl apply -f spring-secret.yaml

4.2 ConfigMap 적용

$ kubectl apply -f spring-config.yaml

4.3 Deployment 업데이트

$ kubectl apply -f spring-deployment.yaml

4.4 변경 사항 반영을 위해 Deployment 재시작

$ kubectl rollout restart deployment spring-deployment

5. 반영 확인

profile
donggyun_ee

0개의 댓글