kubectl로 Secret 관리하기
kubectl로 Secret 관리하기
이 페이지에서는 kubectl 명령줄 도구로 쿠버네티스 Secret을 만들고, 편집하고, 관리하고, 삭제하는 방법을 보여줘요.
출처: 문서
본문
시작하기 전에
쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 설정돼 있어야 해요.
Secret 만들기
Secret 오브젝트는 파드가 서비스에 접근할 때 사용하는 자격 증명 같은 민감한 데이터를 저장해요. 예를 들어 데이터베이스에 접근하는 데 필요한 사용자 이름과 비밀번호를 저장할 Secret이 필요할 수 있습니다.
명령에 원시 데이터를 전달하거나, 명령에 전달할 파일에 자격 증명을 저장해 Secret을 만들 수 있어요. 다음 명령들은 사용자 이름 admin과 비밀번호 S!B\*d$zDsb=를 저장하는 Secret을 만듭니다.
원시 데이터 사용
다음 명령을 실행해요:
kubectl create secret generic db-user-pass \
--from-literal=username=admin \
--from-literal=password='S!B\*d$zDsb='
문자열에서 $, \, *, =, ! 같은 특수 문자를 이스케이프하려면 작은따옴표 ''를 사용해야 해요. 그러지 않으면 셸이 이 문자들을 해석합니다.
Secret의 stringData 필드는 서버 사이드 apply와 잘 맞지 않아요.
소스 파일 사용
-
자격 증명을 파일에 저장한다:
echo -n 'admin' > ./username.txt echo -n 'S!B\*d$zDsb=' > ./password.txt-n플래그는 생성된 파일의 텍스트 끝에 추가 개행 문자가 없게 보장합니다.kubectl이 파일을 읽어 내용을 base64 문자열로 인코딩할 때 추가 개행 문자도 인코딩되기 때문에 중요해요. 파일에 포함하는 문자열에서 특수 문자를 이스케이프할 필요는 없어요. -
kubectl명령에 파일 경로를 전달한다:kubectl create secret generic db-user-pass \ --from-file=./username.txt \ --from-file=./password.txt기본 키 이름은 파일 이름이에요.
--from-file=[key=]source를 사용해 키 이름을 선택적으로 설정할 수 있습니다. 예를 들어:kubectl create secret generic db-user-pass \ --from-file=username=./username.txt \ --from-file=password=./password.txt
어느 방법으로든 출력은 다음과 비슷합니다:
secret/db-user-pass created
Secret 확인하기
Secret이 만들어졌는지 확인해요:
kubectl get secrets
출력은 다음과 비슷합니다:
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
Secret의 세부 사항을 확인해요:
kubectl describe secret db-user-pass
출력은 다음과 비슷합니다:
Name: db-user-pass
Namespace: default
Labels: <none>
Annotations: <none>
Type: Opaque
Data
====
password: 12 bytes
username: 5 bytes
kubectl get과 kubectl describe 명령은 기본적으로 Secret의 내용을 보여주지 않아요. 이는 Secret이 실수로 노출되거나 터미널 로그에 저장되는 것을 보호하기 위해서입니다.
Secret 디코딩하기
-
만든 Secret의 내용을 확인한다:
kubectl get secret db-user-pass -o jsonpath='{.data}'출력은 다음과 비슷합니다:
{ "password": "UyFCXCpkJHpEc2I9", "username": "YWRtaW4=" } -
password데이터를 디코딩한다:echo 'UyFCXCpkJHpEc2I9' | base64 --decode출력은 다음과 비슷합니다:
S!B\*d$zDsb=이는 문서용 예시입니다. 실제로는 이 방법이 인코딩된 데이터가 있는 명령을 셸 히스토리에 저장하게 할 수 있어요. 컴퓨터에 접근할 수 있는 사람이라면 그 명령을 찾아 secret을 디코딩할 수 있습니다. 더 나은 방법은 보기와 디코딩 명령을 결합하는 거예요.
kubectl get secret db-user-pass -o jsonpath='{.data.password}' | base64 --decode
Secret 편집하기
기존 Secret 오브젝트는 불변(immutable)이 아니라면 편집할 수 있어요. Secret을 편집하려면 다음 명령을 실행해요:
kubectl edit secrets <secret-name>
이 명령은 기본 편집기를 열고 다음 예시처럼 data 필드에서 base64로 인코딩된 Secret 값을 업데이트할 수 있게 해줍니다:
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file, it will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
password: UyFCXCpkJHpEc2I9
username: YWRtaW4=
kind: Secret
metadata:
creationTimestamp: "2022-06-28T17:44:13Z"
name: db-user-pass
namespace: default
resourceVersion: "12708504"
uid: 91becd59-78fa-4c85-823f-6d44436242ac
type: Opaque
정리하기
Secret을 삭제하려면 다음 명령을 실행해요:
kubectl delete secret db-user-pass
더 알아보기 (Learn more)
- Secret 개념에 대해 더 읽어보기.
- 구성 파일로 Secret 관리하는 법 배우기.
- kustomize로 Secret 관리하는 법 배우기.