Skip to content

Kubernetes:Secret

env 파일 적용 방법

.env 파일을 Secret 으로 변환:

kubectl create secret generic my-secret --from-env-file=.env

Secret 생성 확인

kubectl get secret my-secret

Secret을 Pod에 반영

Secret을 Pod의 환경 변수로 주입하여 사용합니다. Pod 또는 Deployment 정의 파일에서 envFrom 필드를 사용하여 Secret을 환경 변수로 노출할 수 있습니다.

Pod YAML 파일 작성

아래 예시는 my-secret을 Pod의 환경 변수로 주입하는 방법을 보여줍니다:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-container
    image: my-image
    envFrom:
    - secretRef:
        name: my-secret

Deployment YAML 파일 작성

아래 예시는 Deployment에서 Secret을 사용하는 방법을 보여줍니다:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image
        envFrom:
        - secretRef:
            name: my-secret

Secret을 파일로 마운트

Secret을 환경 변수로 주입하는 대신, 파일로 마운트하여 사용할 수도 있습니다.

Pod YAML 파일 작성

아래 예시는 Secret을 볼륨으로 마운트하는 방법을 보여줍니다:

apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-container
    image: my-image
    volumeMounts:
    - name: secret-volume
      mountPath: /etc/secrets
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: my-secret

Secret 업데이트 및 재반영

Secret을 업데이트하려면 .env 파일을 수정한 후, Secret을 다시 생성하거나 업데이트합니다. 이전 Secret을 삭제하고 새로 생성하는 방법도 있습니다.

kubectl delete secret my-secret
kubectl create secret generic my-secret --from-env-file=.env

Deployment를 사용 중이라면 Secret 업데이트 후 롤아웃을 재시작해야 변경 사항이 반영됩니다.

kubectl rollout restart deployment my-app

모범 사례

  • 권한 제어: Secret에 대한 접근 권한을 적절히 제어합니다. RBAC 정책을 설정하여 민감한 정보에 대한 접근을 제한합니다.
  • 환경 분리: 개발, 스테이징, 프로덕션 환경별로 Secret을 분리하여 관리합니다. 환경별로 다른 Secret을 사용해 보안성을 높입니다.
  • 암호화: Kubernetes에서 Secret은 기본적으로 etcd에 암호화되어 저장됩니다. 추가적으로 Vault 등 외부 시스템을 사용하여 Secret을 관리하면 보안성을 높일 수 있습니다.
  • 주기적인 감사: 정기적으로 Secret을 감사하고 관리 상태를 점검합니다. 만료된 정보나 더 이상 사용되지 않는 Secret은 제거합니다.