DevOps

[k8s] Secret

곱창국수 2024. 6. 11. 14:54

개념

Secret은 Configmap 과 유사하게 Pod와 별도로 떠서 환경변수나 아이디 패스워드 같은 값을 관리하는 오브젝트이다. Configmap과의 차이점은 기밀 데이터를 다룬다는 점이다.

Secret 역시 Configmap 과 동일하게 key: value 형태로 이루어지며, 기본적으로 기밀을 다루는 오브젝트로 type에 따라 처리가 다르지만, value 값으로 base64 인코딩 값을 갖는다.

 

 


 

실습

  • Secret Name: db-secret
  • Secret 1:  DB_Host=sql01
  • Secret 2:  DB_User=root
  • Secret 3:  DB_Password=password123
 
 

구성

webapp이라는 pod와 mysql이라는 pod가 떠있는 환경에 mysql과 webapp을 연결할 계정 정보와 host정보를 secret 형태로 만들어 오브젝트로 관리하려고 한다.

 

secret에 value값은 base64로 인코딩이 되어야하기에 명령어를 활용하여 secret을 만들어보겠다.

 

kubectl create secret generic db-secret --from-literal=DB_Host=sql01 --from-literal=DB_User=root --from-literal=DB_Password=password123

 

만들어진 secret 내용 yaml 형태 

apiVersion: v1
data:
  DB_Host: c3FsMDE=
  DB_Password: cGFzc3dvcmQxMjM=
  DB_User: cm9vdA==
kind: Secret
metadata:
  creationTimestamp: "2024-06-11T05:39:44Z"
  name: db-secret
  namespace: default
  resourceVersion: "1131"
  uid: ab176d65-5a07-4931-9074-567f4dbab24d
type: Opaque

 

webapp Pod에 해당 시크릿을 적용

apiVersion: v1 
kind: Pod 
metadata:
  labels:
    name: webapp-pod
  name: webapp-pod
  namespace: default 
spec:
  containers:
  - image: kodekloud/simple-webapp-mysql
    imagePullPolicy: Always
    name: webapp
    envFrom:
    - secretRef:
        name: db-secret

 

적용방법은 이뿐만 아니라 다양한다. 필요에 따라서 공식문석를 참고하여 적용하면 될것이다.

 

secret은 데이터베이스 계정 tls 인증서 등 기밀정보를 다루는 분야에 있어서 유용하게 사용하는 오브젝트이다. 보안 관련된 중요한 부분으로서 명확하게 개념을 알고 쓰는 것이 중요할 것이다.