[따배쿠] 15. Secret
( 참고 : 따배쿠 https://www.youtube.com/watch?v=6n5obRKsCRQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c )
Contents
- Secret 만들기
- Secret 사용하기
- Secret 데이터 용량 제한
Secret vs ConfigMap
ConfigMap과 유사
- 마찬가지로, application이 사용하는 데이터를 한 곳에 모아둠
- but, 차이점은 “base64로 인코딩”해서 모아둔다는 점!
ConfigMap
- 컨테이너 구성정보를 한 곳에 모아서 관리
Secret
- 컨테이너가 사용하는 pwd, auth token, ssh key와 같이 “중요한 정보”를 저장
- 민감한 구성정보를 base64로 인코딩
즉, 민감한 내용은 secret에, 그렇지 않은 내용은 configMap에!
1. Secret 만들기
kubectl create secret <available commands> name [flags] [options]
- available commands에는 3가지 형태의 데이터 중 하나가 들어감
- 1) docker-registry : 도커 레지스트리를 사용하여 생성
- 2) generic : 로컬 파일, 디렉토리, literal value를 통해 생성
- 3) tls : TLS secret 생성
kubectl create secret tls my-secret --cert=path/to/cert/file --key=path/to/key/file
-
public/private key를 사용
(
--cert
,--key
)
kubectl create secret docker-registry reg-secret --docker-username=tiger --docker-password=pass --docker-email=tiger@acme.com
-
docker registry 인증에 사용되는 user name & password & email
(
--docker-username
,--docker-password
,--docker-email
)
kubectl create secret generic ttabae-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/
-
literal, file 등을 통해
(
--from-literal
,--from-file
)
ex) generic 타입으로 생성하기
1) kubectl create secret generic ttabae-secret --from-literal=INTERVAL=2 --from-file=./genid-web-config/
2) kubectl get secrets
- (1)
ttabae-secret
확인 가능- TYPE=“Opaque” 임을 확인할 수 있다.
- Opaque?
- 사용자 정의 secrete이라는 의미!
- (아래 참고)
- (2) (default로 가지고 있는)
default-token-prlkb
- 역할 : k8s가 내부적으로 가지고 있는 SA(Service Account) 토큰
kubectl describe secrets ttabae-secret
- 내용을 확인할 수 없음! 용량만 확인 가능 ( secret 이므로 )
kubectl describe secrets ttabae-secret -o yaml
-
YAML파일로 확인해보면…base64로 인코딩된 것을 확인할 수 있다
( podf로 전달될 때 decoding된다 )
2. Secret 사용하기
정의된 secret을 “pod의 container로 전달” 하는 방법
- 1) CLI argument
- 2) 환경 변수
- 3) 볼륨 마운트
(1) CLI argument
pass
(2) 환경 변수
pod의 YAML내의 spec에 “env > valueFrom > secretKeyRef”에 적용
kubectl create -f genid-env-secret.yaml
- 위의 YAML파일 실행
kubectl get pods
kubectl get pods -o wide
- 생성된 pod의 IP 확인
curl 10.42.0.1
- 2초마다 fake id가 생성됨 ( INTERVAL = 2 )
(3) 볼륨 마운트
secret을 volume으로 선언
1) kubectl create -f genid-volume-secret.yaml
- 위의 YAML 파일 실행
2) kubectl exec -it genid-volume-secrete -- -c webserver /bin/bash
- pod안에 컨테이너가 2개있음. webserver 컨테이너로 명시적으로 지정해서 접속
3) cd /etc/nginx/conf.d
cat nginx-config.conf
- 확인을 해보면, volume mount 잘 된 것을 확인 가능
4) df -h
- mount된 결과 확인
3. Secret 데이터 용량 제한
secret etcd에 암호화 하지 않은 텍스트로 저장되므로,
secret value가 커지면 메모리 용량을 많이 사용하게 됨!
( secret의 최대 크기는 1MB )