์ด ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ
์ ํ๋ฆฌ์ผ์ด์ ์ค์ ๊ฐ(ConfigMap)๊ณผ ๋ฏผ๊ฐ ์ ๋ณด(Secret)๋ฅผ ์ฝ๋์์ ๋ถ๋ฆฌํ์ฌ Kubernetes ๋ฆฌ์์ค๋ก ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
์ ์์ง์
- Kubernetes 1๋จ๊ณ: Deployment & Service โ Pod ๋ฐฐํฌ์ Service ๊ธฐ๋ณธ ๊ฐ๋
์ด ๋จ๊ณ์์ ํด๊ฒฐํ๋ ค๋ ๋ฌธ์
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋์ DB ๋น๋ฐ๋ฒํธ๋ ํ๊ฒฝ ์ค์ ์ ํ๋์ฝ๋ฉํ๋ฉด, ํ๊ฒฝ๋ณ ๋ฐฐํฌ๊ฐ ์ด๋ ต๊ณ ๋ณด์ ์ํ์ด ์๊น๋๋ค. Kubernetes์ ConfigMap๊ณผ Secret์ ์ฌ์ฉํ๋ฉด ์ค์ ๊ณผ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํ๊ฒฝ ๋ณ์๋ก Pod์ ์ฃผ์ ํ ์ ์์ต๋๋ค.
์ค์ต ์ฝ๋: GitHub (Configmap_and_Secret)
๐งญ ์ ์ฒด ํ๋ฆ ์์ฝ
โ ConfigMap ์์ฑ (์ผ๋ฐ ์ค์ ๊ฐ)
โก Secret ์์ฑ (๋ฏผ๊ฐ ์ ๋ณด โ base64 ์ธ์ฝ๋ฉ)
โข Pod์ ํ๊ฒฝ ๋ณ์๋ก ์ฃผ์
โฃ ์ปจํ
์ด๋ ์์์ ๊ฐ ํ์ธ (env ๋ช
๋ น์ด)
โค ์ค์ ์ ์ฉ ๋ฐ ๋ณด์ ์ฃผ์์ฌํญ ํ์ต
๐ ์ค์ต์ ์ฌ์ฉ๋ ํ์ผ ๊ตฌ์ฑ
k8s-configmap-secret/
โโโ configmap.yaml # ์ผ๋ฐ ์ค์ ๊ฐ ์ ์
โโโ secret.yaml # ๋ฏผ๊ฐ ์ ๋ณด (base64 ์ธ์ฝ๋ฉ)
โโโ pod-env.yaml # Pod ํ๊ฒฝ ๋ณ์๋ก ์ฃผ์
โโโ README.md
๐ ์ฃผ์ YAML ํ์ผ ์ ๋ฆฌ
configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
APP_MODE: "production"
APP_PORT: "8080"
secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: app-secret
type: Opaque
data:
DB_PASSWORD: c3VwZXJzZWNyZXQ= # base64 โ "supersecret"
์ธ์ฝ๋ฉ ๋ฐฉ๋ฒ:
echo -n "supersecret" | base64
pod-env.yaml
apiVersion: v1
kind: Pod
metadata:
name: env-demo
spec:
containers:
- name: demo-container
image: busybox
command: [ "sh", "-c", "env; sleep 3600" ]
env:
- name: APP_MODE
valueFrom:
configMapKeyRef:
name: app-config
key: APP_MODE
- name: APP_PORT
valueFrom:
configMapKeyRef:
name: app-config
key: APP_PORT
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: app-secret
key: DB_PASSWORD
๐งช ์ค์ต ์คํ ๋ฐ ๊ฒ์ฆ
kubectl apply -f configmap.yaml
kubectl apply -f secret.yaml
kubectl apply -f pod-env.yaml
kubectl get pods
kubectl describe pod env-demo
kubectl exec -it env-demo -- sh
# ์ปจํ
์ด๋ ๋ด๋ถ์์ ํ์ธ
env
# ์ถ๋ ฅ ์์ (์ค๊ฐ ์๋ต)
APP_MODE=production
APP_PORT=8080
DB_PASSWORD=supersecret
๐ฏ ์ ๋ฆฌ ์์ฝ
| ๊ตฌ๋ถ | ์ค๋ช |
|---|---|
| ConfigMap | ๋น๋ฏผ๊ฐ ์ค์ ๊ฐ ์ ์ฅ (APP_MODE, APP_PORT ๋ฑ) |
| Secret | ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์ ์ฅ (๋น๋ฐ๋ฒํธ, API ํค ๋ฑ) โ base64 ์ธ์ฝ๋ฉ |
| ์ฃผ์ ๋ฐฉ์ | env๋ฅผ ํตํด ์ปจํ
์ด๋์ ์ฃผ์
|
| ๋ณด์ ์ฃผ์ | Secret์ ์ธ์ฝ๋ฉ์ผ ๋ฟ, RBAC ๋ฐ ์ ๊ทผ ์ ์ด ํ์ |
์ค๊ณ ํ๋จ (Why This Way?)
ConfigMap์ ์ผ๋ฐ ์ค์ , Secret์ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ๋ถ๋ฆฌ ๊ด๋ฆฌํ๋, Secret์ base64๋ ์ํธํ๊ฐ ์๋๋ฏ๋ก ํ๋ก๋์ ์์๋ SealedSecrets์ด๋ Vault ๊ฐ์ ์ถ๊ฐ ๋ณด์ ์กฐ์น๊ฐ ํ์์ ๋๋ค.
๋ค์์ ์ฝ์ ๊ธ
โ Kubernetes 3๋จ๊ณ: Ingress & Nginx Controller โ ์ธ๋ถ ํธ๋ํฝ ๋ผ์ฐํ ๊ตฌ์ฑ