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 -