website/content/ko/docs/tasks/configmap-secret/managing-secret-using-kubec...

157 lines
4.3 KiB
Markdown

---
title: kubectl을 사용한 시크릿 관리
content_type: task
weight: 10
description: kubectl 커맨드를 사용하여 시크릿 오브젝트를 생성.
---
<!-- overview -->
## {{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}}
<!-- steps -->
## 시크릿 생성
`시크릿`에는 파드가 데이터베이스에 접근하는 데 필요한 사용자 자격 증명이 포함될 수 있다.
예를 들어 데이터베이스 연결 문자열은 사용자 이름과 암호로 구성된다.
사용자 이름은 로컬 컴퓨터의 `./username.txt` 파일에, 비밀번호는
`./password.txt` 파일에 저장할 수 있다.
```shell
echo -n 'admin' > ./username.txt
echo -n '1f2d1e2e67df' > ./password.txt
```
이 명령에서 `-n` 플래그는 생성된 파일의
텍스트 끝에 추가 개행 문자가 포함되지 않도록 해 준다. 이는 `kubectl`이 파일을 읽고
내용을 base64 문자열로 인코딩할 때 개행 문자도 함께 인코딩될 수 있기 때문에
중요하다.
`kubectl create secret` 명령은 이러한 파일들을 시크릿으로 패키징하고
API 서버에 오브젝트를 생성한다.
```shell
kubectl create secret generic db-user-pass \
--from-file=./username.txt \
--from-file=./password.txt
```
출력은 다음과 유사하다.
```
secret/db-user-pass created
```
기본 키 이름은 파일 이름이다. 선택적으로 `--from-file=[key=]source`를 사용하여 키 이름을 설정할 수 있다.
예제:
```shell
kubectl create secret generic db-user-pass \
--from-file=username=./username.txt \
--from-file=password=./password.txt
```
파일에 포함하는 암호 문자열에서
특수 문자를 이스케이프하지 않아도 된다.
`--from-literal=<key>=<value>` 태그를 사용하여 시크릿 데이터를 제공할 수도 있다.
이 태그는 여러 키-값 쌍을 제공하기 위해 두 번 이상 지정할 수 있다.
`$`, `\`, `*`, `=``!`와 같은 특수 문자는
[shell](https://en.wikipedia.org/wiki/Shell_(computing))에 해석하고 처리하기 때문에
이스케이프할 필요가 있다.
대부분의 셸에서 암호를 이스케이프하는 가장 쉬운 방법은 암호를 작은따옴표(`'`)로 둘러싸는 것이다.
예를 들어, 비밀번호가 `S!B\*d$zDsb=`인 경우,
다음 커맨드를 실행한다.
```shell
kubectl create secret generic db-user-pass \
--from-literal=username=devuser \
--from-literal=password='S!B\*d$zDsb='
```
## 시크릿 확인
시크릿이 생성되었는지 확인한다.
```shell
kubectl get secrets
```
출력은 다음과 유사하다.
```
NAME TYPE DATA AGE
db-user-pass Opaque 2 51s
```
다음 명령을 실행하여 `시크릿`에 대한 상세 사항을 볼 수 있다.
```shell
kubectl describe secrets/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` 명령은
기본적으로 `시크릿`의 내용을 표시하지 않는다. 이는 `시크릿`이 실수로 노출되거나
터미널 로그에 저장되는 것을 방지하기 위한 것이다.
## 시크릿 디코딩 {#decoding-secret}
생성한 시크릿을 보려면 다음 명령을 실행한다.
```shell
kubectl get secret db-user-pass -o jsonpath='{.data}'
```
출력은 다음과 유사하다.
```json
{"password":"MWYyZDFlMmU2N2Rm","username":"YWRtaW4="}
```
이제 `password` 데이터를 디코딩할 수 있다.
```shell
echo 'MWYyZDFlMmU2N2Rm' | base64 --decode
```
출력은 다음과 유사하다.
```
1f2d1e2e67df
```
## 삭제
생성한 시크릿을 삭제하려면 다음 명령을 실행한다.
```shell
kubectl delete secret db-user-pass
```
<!-- discussion -->
## {{% heading "whatsnext" %}}
- [시크릿 개념](/ko/docs/concepts/configuration/secret/)에 대해 자세히 알아보기
- [환경 설정 파일을 사용하여 시크릿을 관리](/ko/docs/tasks/configmap-secret/managing-secret-using-config-file/)하는 방법 알아보기
- [kustomize를 사용하여 시크릿을 관리](/ko/docs/tasks/configmap-secret/managing-secret-using-kustomize/)하는 방법 알아보기