일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- 계정 탈취
- SecurityMetric
- 대학원
- Kublet
- airdecap-ng
- davtest
- ip forwarding
- 공격그래프
- OIDC
- Mimikatz
- AttackGraph
- Mac
- dnsenum
- Chrome 작업관리자
- 패시브스캐닝
- cgroups
- 액티브스캐닝
- 넷크래프트
- decap
- recon-ng
- 프로젝트
- NMAP
- OpenID Connect
- 무선채널
- Container
- Shift + ESC
- 강의
- 보안
- Social Network in Game
- 화이트해커
- Today
- Total
네른
[Kubernetes] ConfigMap & Secret 본문
본 글에서 알아볼 내용은, 쿠버네티스에서 환경변수, conf 파일 등을 어떻게하면 효율적으로, 편하게 사용하는지에 대한 내용.
실제 kubernetes를 이용하게 되면, 만약 conf 파일이 Pod 내에 있는 경우 이를 수정할 방법이 마땅치 않거나 매우 복잡.
그래서, 이를 조금 더 쉽게 하는 대표적인 두 리소스가 configMap과 secret.
- 환경변수 혹은 설정파일을 일종의 변수로 두고 Pod가 생성될 때(배포될 때) 반영할 수 있도록!
- 방법은 크게 두 가지로, 환경변수(env) 혹은 disk mount의 방법
ConfigMap
- Key-Value 형태로 데이터를 저장할 수 있음
kind: ConfigMap
apiVersion: v1
metadata:
name: common-config
namespace: test
labels:
app: test
data:
timeZone: Asia/Seoul
logInfo: "true"
logSuccess: "true"
- 간단하게 위와같이 선언할 수 있음
- 이 경우 key가 timeZone, logInfo, logSuccess인 세 변수가 있는 것이고, 이를 환경변수에 담아 사용할 수 있다.
containers:
- name: backend
env:
- name: TZ
valueFrom:
configMapKeyRef:
name: common-config
key: timeZone
- 실제 Deployment 시에 위와 같이 env 필드를 입력하면 해당 configMap에서 데이터를 가져가 사용할 수 있다.
- env.name은 해당 환경변수의 이름, valueFrom.configMapKeyRef.name은 ConfigMap의 이름, key는 가져올 값의 key
이 외에, ConfigMap을 disk mount의 형태로 사용하는 방법은 다음과 같다.
kind: ConfigMap
apiVersion: v1
metadata:
name: fluentd-config
namespace: test
labels:
app: test
data:
fluent.conf: |
<source>
@type tail
path /var/tmp/log.log
pos_file /var/tmp/log.log.pos
tag log.test
- 앞선 ConfigMap과 유사하지만, 이번에는 key값은 파일명, value는 해당 파일에 들어갈 값.
volumes:
- name: log-config
configMap:
name: log-config
defaultMode: 420
- Deployment에서 실제 사용할때에는, 앞선 env와 달리 volume에 들어가게되며 configMap 부분에 필요한 정보를 기입하게 된다.
- 이 경우, 해당 configMap의 key값이 파일명이 되며 volume이 파일의 내용이 됨을 유의!!!
Secret
- Secret은 앞선 ConfigMap과 매우 유사하지만, 중요 정보를 담아야 하는 경우에 사용됨 (예. DB 계정정보 등)
- kubernetes는 이 secret에 기본적으로 보안 기능들을 적용시키고 있음
: 대표적으로, secret의 value는 항상 base64로 인코딩 되어있음
: 이 secret 값들은 "항상" 메모리에만 저장됨. 그러나, 기본적으로 etcd에는 암호화되지 않은 채 저장되므로 secret 정보에 대한 암호화를 적용시켜주는것을 추천.
- 그러므로 너무 큰 파일을 넣어두면 성능에 영향이 갈 수 있음\
- secret 타입이 여러가지 있으나 여기서는 별도로 설명하지는 않으며, 본인은 주로 Opaque 형태를 사용했음.
- disk mount 형태로 secret을 사용할 때에, 해당 파일에 permission을 별도로 부여할 수 도 있음.
ConfigMap과 Secret 모두 주의할 점은, 환경변수의 형태로 사용하는 경우에는 Pod가 시작된 후에 해당 값을 변경할 방법이 없다는 것.
만약 그런 상황이 필요하다면 disk mount 형태로 사용하고, configmap/secret을 수정하면 수초~수분 내에 실제 마운트 된 파일의 내용이 업데이트 되니 이를 이용하도록 하자.
apiVersion: v1
kind: Secret
metadata:
name: secrettest
type: kubernetes.io/dockerconfigjson
data:
.dockerconfigjson: {"auths":{"aa":{"username":"test","password":"hi","auth":"testtest"}}}
- 위는 secret의 여러 기본 타입중에 dockerconfig type으로, docker 계정에 대한 내용을 담은 secret임을 명시함.
- 내용에 쓰인 것과 같이 사용하면 되며, configMap과 다를 바 없음. 단지 위는 예제이기에 위와같이 별도 암호화 없이 사용하는것은 주의해야 하며, secret에 저장되는 값은 base64로 인코딩되어야 하므로 위 내용도 실제로는 base64로 인코딩 한 후에 저장해야함을 유의!!! (.dockerconfigjson의 value가 base64로 인코딩되어 입력되어야 함)
'DevOps' 카테고리의 다른 글
[Kubernetes] EFK 적용 과정 (Elasticsearch, Fluentd, Kibana) - 2 (0) | 2022.05.11 |
---|---|
[Kubernetes] EFK 적용 과정 (Elasticsearch, Fluentd, Kibana) - 1 (0) | 2022.05.10 |
[Kubernetes] Deployment & Rolling Update (0) | 2022.05.02 |
[Kubernetes] Health Check (0) | 2022.05.01 |
[Kubernetes] Kubernetes의 구조 - 컨트롤러 (0) | 2022.04.30 |