[따배쿠] 15. Secret

( 참고 : 따배쿠 https://www.youtube.com/watch?v=6n5obRKsCRQ&list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c )


Contents

  1. Secret 만들기
  2. Secret 사용하기
  3. Secret 데이터 용량 제한


Secret vs ConfigMap

ConfigMap과 유사

  • 마찬가지로, application이 사용하는 데이터를 한 곳에 모아둠
  • but, 차이점은 “base64로 인코딩”해서 모아둔다는 점!


ConfigMap

  • 컨테이너 구성정보를 한 곳에 모아서 관리

Secret

  • 컨테이너가 사용하는 pwd, auth token, ssh key와 같이 “중요한 정보”를 저장
  • 민감한 구성정보를 base64로 인코딩


즉, 민감한 내용은 secret에, 그렇지 않은 내용은 configMap에!

figure2


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) 토큰

figure2


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) 볼륨 마운트


figure2


(1) CLI argument

pass


(2) 환경 변수

pod의 YAML내의 spec에 “env > valueFrom > secretKeyRef”에 적용

figure2


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으로 선언

figure2


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 잘 된 것을 확인 가능

figure2


4) df -h

  • mount된 결과 확인

figure2


3. Secret 데이터 용량 제한

secret etcd에 암호화 하지 않은 텍스트로 저장되므로,

secret value가 커지면 메모리 용량을 많이 사용하게 됨!

( secret의 최대 크기는 1MB )