본문 바로가기
도커&쿠버네티스

[katakoda] Use Kubernetes To Manage Secrets And Passwords

by bzerome240 2022. 4. 2.

이 시나리오에서는 Kubernetes를 사용하여 비밀을 관리하는 방법을 배웁니다. 

Kubernetes를 사용하면 환경 변수를 통해 또는 볼륨으로 포드에 탑재되는 비밀을 생성할 수 있습니다. 

이를 통해 SSL 인증서 또는 비밀번호와 같은 비밀을 애플리케이션의 배포 아티팩트 내에 비밀번호를 저장하지 않고 안전한 방식으로 인프라 팀을 통해서만 관리할 수 있습니다.

 

 

Base64 문자열을 만들고 파일에서 사용할 변수로 저장할 수 있습니다.

username=$(echo -n "admin" | base64)
password=$(echo -n "a62fjbd37942dcs" | base64)

 

 

secret yaml

echo "apiVersion: v1
kind: Secret
metadata:
  name: test-secret
type: Opaque
data:
  username: $username
  password: $password" >> secret.yaml

 

 

secret 생성하기

kubectl create -f secret.yaml

 

 

secret 확인하기

 

 

secret 환경변수를 정의한 포드 생성 yaml

SECRET_USERNAME, SECRET_PASSWORD 환경 변수에 name, key 데이터를 정의한다

apiVersion: v1
kind: Pod
metadata:
  name: secret-env-pod
spec:
  containers:
    - name: mycontainer
      image: alpine:latest
      command: ["sleep", "9999"]
      env:
        - name: SECRET_USERNAME
          valueFrom:
            secretKeyRef:
              name: test-secret
              key: username
        - name: SECRET_PASSWORD
          valueFrom:
            secretKeyRef:
              name: test-secret
              key: password
  restartPolicy: Never

 

kubectl create -f secret-env.yaml

 

Pod가 시작되면 채워진 환경 변수를 출력합니다.
Kubernetes는 환경 변수를 채울 때 base64 값을 디코딩합니다.
정의한 원래 username/password 조합이 표시되어야 합니다.
이러한 변수는 이제 API, 데이터베이스 등에 액세스하는 데 사용할 수 있습니다.

 

 

포드 확인하기

 

 

secret을 메모리에 저장하기 위해 환경 변수를 사용하면 실수로 누출될 수 있습니다.
권장되는 접근 방식은 마운트를 볼륨으로 사용하는 것입니다.
volumes
volumeMounts
컨테이너를 정의할 때 생성된 볼륨을 특정 디렉토리에 마운트합니다.
애플리케이션은 이 경로에서 secret을 파일로 읽습니다.

apiVersion: v1
kind: Pod
metadata:
  name: secret-vol-pod
spec:
  volumes:
  - name: secret-volume
    secret:
      secretName: test-secret
  containers:
    - name: test-container
      image: alpine:latest
      command: ["sleep", "9999"]
      volumeMounts:
          - name: secret-volume
            mountPath: /etc/secret-volume

 

 

pod 생성하기

kubectl create -f secret-pod.yaml

 

 

/etc/secret-volume/username

/etc/secret-volume/password

 

 

 

 

728x90
반응형

댓글