클라우드,가상화/K8S

k8s - Secret

aiemag 2023. 12. 17. 00:27
반응형

 
 
k8s에서 기밀 정보를 별도 리소스에 정의하고 파드에서 읽어들일 수 있는 시크릿에 대해 정리합니다.
 
※ 시크릿을 정의하고 있는 매니페스트는 base64로 인코드되어 있지만 암호화되어 있지 않아 매니페스트를 깃 저장소 등에 업로드하는 것은 불가능. 이러한 문제를 해경하기 위해 시크릿이 정의된 매니페스트를 암호화하는 kubesec/SealedSecret/ExternalSecret 같은 오픈 소스 소프트웨어도 있음.
 
 

시크릿 분류

종류개요
Opaque일반적인 범용 용도
kubernetes.io/tlsTLS 인증서용
kubernetes.io/basic-auth기본 인증용
kubernetes.io/dockerconfig/json도커 레지스트리 인증 정보용
kubernetes.io/ssh-authSSH 인증 정보용
kubernetes.io/service-account-token서비스 어카운트 토큰용
bootstrap.kubernetes.io/tokenBootstrap 토큰용

 

일반적인 범용 용도의 시크릿(Opaque)

일반적인 스키마리스 시크릿을 생성하는 경우 타입에 Opaque를 지정함.
네 가지 생성 패턴
1. kubectl로 파일에서 값을 참조하여 생성(--from-file)
2. kubectl로 envfile에서 값을 참조하여 생성(--from-env-file)
3. kubectl로 직접 값을 전달하여 생성(--from-literal)
4. 매니페스트에서 생성(-f)
 
 
 

kubectl로 파일에서 값을 참조하여 생성(--from-file)

파일에서 값을 참조함으로써 생성.
※ 파일을 생성할 때 개행 코드가 들어가지 않도록 주의.
 
실행

# 시크릿에 포함된 값을 파일로 내보내기
$ echo -n "root" > ./username
$ echo -n "rootpassword" > ./password

# 파일에서 값을 참조하여 시크릿을 생성

 

# 파일에서 값을 참조하여 시크릿 생성
$ kubectl create secret generic --save-config sample-db-auth --from-file=./username --from-file=./password
secret/sample-db-auth created

 

# 시크릿 확인
kubectl get secrets sample-db-auth -o json | jq .data
{
  "password": "cm9vdHBhc3N3b3Jk",
  "username": "cm9vdA=="
}

 

# 보통은 base64로 인코드되어 있음.
$ kubectl get secrets sample-db-auth -o json | jq -r .data.username
cm9vdA==

# 일반 텍스트로 변경하려면 base64로 디코드가 필요함.
$ kubectl get secrets sample-db-auth -o json | jq -r .data.username | base64 --decode
root

 
 

kubectl로 envfile에서 값을 참조하여 생성(--from-env-file)

하나의 파일에서 일괄적으로 생성하는 경우에는 envfile로 생성하는 방법도 있음.
도커에서 --env-file 옵션을 사용하여 컨테이너를 기동한 경우, 이 방법을 사용하면 그대로 secret을 이관할 수 있음.
 
실행

# env-secret.txt
username=root
password=rootpassword

 

# envfile로 secret을 생성
$ kubectl create secret generic --save-config sample-db-auth --from-env-file ./env-secret.txt
secret/sample-db-auth created

 
 

kubectl로 직접 값을 전달하여 생성(--from-literal)

kubectl을 사용하여 직접 값을 전달함으로써 생성하려면 --from-literal 옵션을 사용하여 생성함.
 
실행

# 직접 옵션으로 값을 지정하여 secret을 생성
$ kubectl create secret generic --save-config sample-db-auth --from-literal=username=root --from-literal=password=rootpassword
secret/sample-db-auth created

 
 

매니페스트에서 생성(-f)

 
 

TLS 타입 시크릿

반응형

'클라우드,가상화 > K8S' 카테고리의 다른 글

k8s - DemonSet  (1) 2023.10.23
k8s - ClusterIP  (0) 2023.07.17
k8s - kubernetes 클러스터 네트워크와 서비스  (0) 2023.07.16
k8s - Deployment  (0) 2023.07.02
k8s - ReplicaSet  (0) 2023.07.02