1. 개요

시크릿은 패스워드, 토큰, OAuth, 개인 암호화키 등 민감 정보를 저장하는 용도로 사용한다. 즉 컨테이너 내부에 저장하지 않고 어딘가에 두었다가 실행시점에 컨테이너에 주입한다.


2. 특징

  • Base64 인코딩으로 생성 (암호화 목적이 아니다, TLS 인증서 등 바이너리 파일을 문자열로 저장하기 위함)
  • Key, Value 형식
  • 메모리에 저장
  • 시크릿이 너무 크면 apiserver, kubelet의 메모리를 많이 사용하게 되므로 각 시크릿의 크기는 최대 1메가

configMap과 비교되는 경우가 있는데 민감하지 않은 데이터는 configMap 리소스를 사용하면 된다.


3. 종류

3.1. 내장 시크릿

쿠버네티스 내부에서 API에 접근 시 사용한다.

클러스터 내부에 ServiceAccount 계정을 생성하면 자동으로 관련 시크릿이 만들어진다. 이 시크릿들을 이용하여 해당 ServiceAccount가 권한을 가진 API에 접근할 수 있게 된다.

3.2. 사용자 시크릿

사용자가 만든 시크릿이다. kubectl create secret 명령어로 만들거나 yaml 파일을 통해서도 만들 수 있다.


4. 사용

4.1. 일반

시크릿은 파드에 환경변수로 제공하거나 볼륨을 통해 파일 형식으로 제공한다.

4.2. docker pull 시 시크릿 사용

Private registry의 이미지를 사용하기 위해서는 인증정보가 필요하다.

kubectl create secret docker-registry dockersecret 명령으로 생성할 수 있다.

4.3. Ingress TLS 적용을 위한 시크릿 생성

kubectl create secret tls 명령으로 생성하거나 yaml 파일 형태로 생성하여 사용한다. (kubectl create -f secret.yaml)

apiVersion: v1
data:
  tls.crt: base64 encoded cert
  tls.key: base64 encoded key
kind: Secret
metadata:
  name: example-tls
type: Opaque

4.4. 네임스페이스 사이에 시크릿 복사

SECRET=mysecret
NS1=ns1
NS2=ns2
kubectl get secret $SECRET --namespace=$NS1 -oyaml | grep -v namespace | kubectl apply --namespace=$NS2 -f -