157 lines
4.3 KiB
Markdown
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/)하는 방법 알아보기
|