https://kubernetes.io/ko/docs/concepts/configuration/secret/
secret
시크릿은 암호, 토큰 또는 키와 같은 소량의 중요한 데이터를 포함하는 오브젝트이다.
시크릿을 사용한다는 것은 사용자의 기밀 데이터를 애플리케이션 코드에 넣을 필요가 없음을 뜻한다.
시크릿은 시크릿을 사용하는 파드와 독립적으로 생성될 수 있기 때문에, 파드를 생성하고, 확인하고, 수정하는 워크플로우 동안 시크릿(그리고 데이터)이 노출되는 것에 대한 위험을 경감시킬 수 있다.
시크릿은 컨피그맵과 유사하지만 특별히 기밀 데이터를 보관하기 위한 것이다.
주의
쿠버네티스 시크릿은 기본적으로 API 서버의 기본 데이터 저장소(etcd)에 암호화되지 않은 상태로 저장된다.
API 접근(access) 권한이 있거나 etcd에 접근할 수 있는 모든 사용자는 시크릿을 조회하거나 수정할 수 있다.
또한 네임스페이스에서 파드를 생성할 권한이 있는 사람은 해당 네임스페이스의 모든 시크릿을 읽을 수 있다.
여기에는 디플로이먼트 생성 기능과 같은 간접 접근이 포함된다.
사용법
파드가 시크릿을 사용하는 주요한 방법으로 다음의 세 가지가 있다.
- 하나 이상의 컨테이너에 마운트된 볼륨 내의 파일로써 사용.
- 컨테이너 환경 변수로써 사용.
- 파드의 이미지를 가져올 때 kubelet에 의해 사용.
환경변수로 암호화 하기
예를 들어 mysql의 root 로그인 비밀번호가 dkagh1. 일때, 이를 해시로 암호화해보자.
echo -n 'dkagh1.' | base64
'root'라는 단어도 해시값으로 암호화해서 설령 시크릿파일을 보더라도 어떤 username을 설정하는건지 모르게 한다.
echo -n 'root' | base64
mkdir /secret
cd /secret/
이런식으로 아까 만든 해시값을 써서 시크릿 yaml을 만든다.
해시값을 썼기 때문에 보안성이 향상된다.
이름은 my-secret 으로 만들어주자.
cat > secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
username: cm9vdA==
password: ZGthZ2gxLg==
nginx를 실행하는 포드 yaml을 만든다.
방금 만든 'my-secret' 파일을 참조해서 username과 passwd를 환경변수로 가져와 지정해주는 내용을 넣는다.
cat << EOF > reg_secret_env.yaml
apiVersion: v1
kind: Pod
metadata:
name: web-apl
spec:
containers:
- name: nginx
image: nginx
env:
- name: DB_USERNAME
valueFrom:
secretKeyRef:
name: my-secret
key: username
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: my-secret
key: password
EOF
k create -f secret.yaml
k create -f reg_secret_env.yaml
다음과 같이 해시태그로 넣은 설정이 평문으로 바뀌어 적용돼있다.
k exec web-apl -it -- /bin/bash
echo $DB_USERNAME
echo $DB_PASSWORD
'Kubernetes' 카테고리의 다른 글
[미니프로젝트] - metal LB 사용하여 WordPress와 MySQL을 퍼시스턴트 볼륨에 배포 (with 시크릿) (1) | 2023.01.04 |
---|---|
ingress (0) | 2023.01.04 |
ConfigMap (환경변수) (0) | 2023.01.04 |
워크로드 (0) | 2023.01.03 |
Networkpolicy (0) | 2023.01.02 |