[Kubernetes] Secret

이멀젼씨

·

2021. 10. 4. 18:33

목적

Secret에 대해 알고자함

목차

  1. Secret이란?
  2. Secret의 종류 및 양식

1. Secret이란?

비밀번호, OAuth 토큰, ssh 키와 같은 민감한 정보를 저장하고 유연하게 관리할 수 있는 오브젝트

보안상의 이유로 특별한 관리가 필요한 데이터들을 담을 수 있는 오브젝트이다.

데이터를 담는 오브젝트라는 것과 key-value쌍의 구조라는 점에서 ConfigMap과 비슷하지만

Secret은 데이터를 base64로 인코딩하여 저장하며, Pod에서 Secret에 있는 데이터 사용 시 자동으로 디코딩한다.

메모리에 저장되며, 한개의 Secret은 최대 1M까지 허용된다.

2. Secret의 종류 및 양식

Literal

Secret을 yml파일에 정의하거나 커맨드라인 입력을 통해 생성하는 방법이다.

yml
apiVersion: v1
kind: Secret
metadata:
name: literal-sc
data:
Key: MTIzNA==
오브젝트의 종류를 설정하는 kind에 Secret을 적어주고, data란 이하에 키-벨류 쌍으로 저장하길 원하는 값을 적어준다.

이때 value에 해당하는 값은 base64 인코딩이 되어있어야 한다.

CLI
kubectl create secret literal-sc --from-literal=password=1234

kubectl create secret generic "Secret이름" --from-literal="Key1"="Value1" --from-literal="Key2"="Value2"

kubectl 명령어를 통해서도 Secret을 생성할 수 있다.

Pod에서 Literal형태의 Secret을 사용하려면 envFrom항목을 추가하고 secretRef에 사용하고자 하는 secret 이름을 설정해주면 된다.

apiVersion: v1
kind: Pod
metadata:
  name: sc-pod
spec:
  containers:
  - name: container
    image: example/test
    envFrom:
    - secretRef:
        name: literal-sc

File

파일을 통째로 Secret으로 설정하는 방법이다.

kubectl create secret generic file-sc --from-file=./secret.txt  

--from-file 뒤에 Secret으로 설정할 파일을 넣어준다.

파일 이름이 Key가 되고, 파일의 내용이 통째로 Value가 된다.

Pod에서 File형태의 Secret을 사용하려면 env항목을 추가하고 name을 지정한 뒤, 사용하고자 하는 Secret의 이름과 key를 설정하면 된다.

파일 내용은 base64로 인코딩하지 않는 상태여야 한다. 파일을 통한 Secret 생성 시 쿠버네티스가 자동으로 base64로 인코딩해주기 때문이다.

apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: container
    image: example/test
    env:
    - name: mysecret
      valueFrom:
        secretKeyRef:
          name: file-sc
          key: secret.txt

pod1이 참조하고 있는 secret.txt의 내용이 바뀌어도 Pod의 환경변수는 변하지 않는다.

Pod가 재성성 되어야만 바뀐 Secret이 적용된다.

Volume Mount

Pod생성 시 mount경로를 정의하고, 해당 경로 안에 Secret파일을 연결시켜 주는 방식이다.

apiVersion: v1
kind: Pod
metadata:
  name: pod2
spec:
  containers:
  - name: container
    image: example/test
    volumeMounts:
    - name: volume1
      mountPath: /mount
  volumes:
  - name: volume1
    secret:
      name: volume-secret

File을 Secret으로 설정하는 것과 마찬가지로 Secret을 정의해둔다.

생성하고자 하는 Pod의 volumes에 volume의 이름과 사용하고자 하는 Secret의 이름을 적어준다.

containers 부분에 마운트할 볼륨과 마운트 경로를 적어주면 된다.

위의 File을 Secret으로 설정하는 것과 달리 파일을 내용이 변하게 되면 Pod의 재생성 없이도 변경된 데이터를 즉시 반영할 수 있다.

'Kubernetes > 이론' 카테고리의 다른 글

[Kubernetes] ConfigMap  (0) 2021.09.27
[Kubernetes] Service  (0) 2021.09.24
[Kubernetes] Pod  (0) 2021.09.15
[Kubernetes] Kubernetes의 정의와 사용목적  (0) 2021.09.14