Secret 을 사용한 애플리케이션 설정

KubernetesBeginner
지금 연습하기

소개

이 랩에서는 Kubernetes Secrets 를 사용하여 비밀번호, API 키 및 기타 기밀 데이터와 같은 민감한 정보를 안전하게 관리하는 방법을 배우게 됩니다. Secret 을 생성하고, 애플리케이션에서 사용하며, 애플리케이션이 올바르게 구성되었는지 확인합니다. 각 단계는 이전 단계를 기반으로 하므로 주의 깊게 따라야 합니다.

Minikube 클러스터 시작

리소스를 생성하기 전에 실행 중인 Kubernetes 클러스터가 필요합니다. Minikube 는 로컬 머신에서 실행되는 가벼운 Kubernetes 환경입니다.

  1. 작업 디렉토리로 이동:

    터미널을 열고 기본 프로젝트 폴더로 이동합니다.

    cd /home/labex/project
    
  2. Minikube 시작:

    Kubernetes 클러스터를 초기화하기 위해 Minikube 를 시작합니다.

    minikube start
    
    • 이 명령은 로컬 머신에 단일 노드 Kubernetes 클러스터를 설정합니다.
    • Minikube 는 시스템 성능에 따라 시작하는 데 몇 분 정도 걸릴 수 있습니다.
  3. Minikube 가 실행 중인지 확인:

    Minikube 클러스터의 상태를 확인합니다.

    minikube status
    
    • kubeletapiserver와 같은 구성 요소가 Running으로 나열되어 있는지 확인합니다.
    • 클러스터가 실행 중이지 않으면 minikube start를 다시 실행합니다.

Minikube 를 시작하는 데 문제가 발생하면 필요에 따라 minikube delete를 사용하여 환경을 재설정하십시오.

Secret 생성

이 단계에서는 데이터베이스 비밀번호를 포함하는 Kubernetes Secret 을 생성합니다.

/home/labex/project 디렉토리에 다음 내용으로 my-secret.yaml이라는 파일을 생성합니다.

apiVersion: v1
kind: Secret
metadata:
  name: my-secret
type: Opaque
data:
  password: dXNlcm5hbWU6cGFzc3dvcmQ=

이 파일에서 Secret 의 이름 (my-secret), 포함된 데이터의 유형 (Opaque), Base64 로 인코딩된 실제 데이터를 지정합니다.

다음 명령을 실행하여 Secret 을 클러스터에 적용합니다.

kubectl apply -f my-secret.yaml

다음 명령을 실행하여 Secret 이 생성되었는지 확인합니다.

kubectl get secrets

my-secret Secret 이 나열되어 있는지 확인해야 합니다.

애플리케이션에서 Secret 사용

이 단계에서는 my-secret Secret 을 사용하여 데이터베이스 비밀번호를 검색하도록 애플리케이션을 수정합니다.

/home/labex/project 디렉토리에 다음 내용으로 my-app.yaml이라는 파일을 생성합니다.

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-app
          image: nginx:latest
          env:
            - name: DATABASE_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: my-secret
                  key: password

이 파일에서 Deployment 의 이름 (my-app), 사용할 이미지 (my-image), 설정할 환경 변수 (DATABASE_PASSWORD) 를 지정합니다. 또한 secretKeyRef를 사용하여 my-secret Secret 에서 password 키를 검색합니다.

다음 명령을 실행하여 Deployment 를 클러스터에 적용합니다.

kubectl apply -f my-app.yaml

다음 명령을 실행하여 Deployment 가 생성되었는지 확인합니다.

kubectl get deployments

my-app Deployment 가 나열되어 있는지 확인해야 합니다.

설정 확인

이 단계에서는 애플리케이션이 my-secret Secret 에서 가져온 데이터베이스 비밀번호로 올바르게 구성되었는지 확인합니다.

다음 명령을 실행하여 애플리케이션을 실행하는 Pod 의 이름을 찾습니다.

kubectl get pods -l app=my-app

애플리케이션을 실행하는 단일 Pod 가 표시됩니다. Pod 의 이름을 기록해 둡니다.

다음으로, 다음 명령을 실행하여 애플리케이션을 실행하는 컨테이너에서 셸 세션을 엽니다.

kubectl exec -it pod-name -- /bin/sh

<pod-name>을 앞에서 기록한 Pod 의 실제 이름으로 바꿉니다.

셸 세션에 들어가면 다음 명령을 실행하여 DATABASE_PASSWORD 환경 변수의 값을 출력합니다.

echo $DATABASE_PASSWORD

my-secret Secret 에서 검색된 데이터베이스 비밀번호가 표시되어야 합니다.

Secret 을 Pod 의 Volume 으로 마운트

이제 Secret 을 생성했으므로 Pod 에 Volume 으로 마운트할 수 있습니다. 마운트된 Volume 에서 Secret 값을 읽어 콘솔에 출력하는 간단한 Pod 를 생성합니다.

/home/labex/project 디렉토리에 다음 내용으로 pod.yaml이라는 파일을 생성합니다.

apiVersion: v1
kind: Pod
metadata:
  name: secret-pod
spec:
  containers:
    - name: secret-container
      image: nginx
      volumeMounts:
        - name: secret-volume
          mountPath: /etc/secret-volume
  volumes:
    - name: secret-volume
      secret:
        secretName: my-secret

Pod 구성을 적용합니다.

kubectl apply -f pod.yaml

Pod 내 Volume 으로 Secret 확인

이 단계에서는 애플리케이션이 my-secret Secret 에서 데이터베이스 비밀번호로 올바르게 구성되었는지 확인합니다.

먼저, 다음 명령을 실행하여 애플리케이션을 실행하는 컨테이너에서 셸 세션을 엽니다.

kubectl exec -it secret-pod -- sh

셸 세션에 들어가면 다음 명령을 실행하여 값을 출력합니다.

cat /etc/secret-volume/password

출력은 Secret 의 값이어야 합니다.

요약

이 랩에서는 Kubernetes Secret 을 사용하여 민감한 정보를 저장하는 방법과 Pod 에서 사용하는 방법을 배웠습니다. Secret 은 민감한 정보를 관리하는 안전한 방법을 제공하며, 일반 텍스트로 Secret 을 노출하는 것을 방지하기 위해 가능한 경우 사용해야 합니다.