๐ ๋ค์ด๊ฐ๋ฉฐ
์ด๋ฒ ๊ธ์์๋ ํ๋๊ฐ ์ฐ๋ ๋ฏผ๊ฐ ์ ๋ณด(๋น๋ฐ๋ฒํธยท์ธ์ฆ์ยทํ ํฐ)๋ฅผ ์์ ํ๊ฒ ๋ค๋ฃจ๋ Secret์ ์ ๋ฆฌํ๋ค. ๋ค์ํ Secret ํ์
, ํ๋์ ์ฃผ์
ํ๋ ๋ฐฉ๋ฒ, ๊ทธ๋ฆฌ๊ณ ๋ฐ๋์ ์ง์ผ์ผ ํ ๋ณด์ ์ฃผ์์ฌํญ๊น์ง ์ดํด๋ณธ๋ค.
Secret์ด๋? ๋น๋ฐ๋ฒํธยท์ธ์ฆ์ยทํ ํฐ ๊ฐ์ ๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์ ์ฅยท๊ด๋ฆฌํ๋ ์ฟ ๋ฒ๋คํฐ์ค ๋ฆฌ์์ค. ์ฝ๋/์ด๋ฏธ์ง์ ํ๋์ฝ๋ฉํ์ง ์๊ณ ๋ถ๋ฆฌํ๋ฉฐ, ํ๊ฒฝ ๋ณ์ ๋๋ Volume์ผ๋ก ํ๋์ ์ฃผ์
ํ๋ค. ๋ฐ์ดํฐ๋ base64๋ก ์ธ์ฝ๋ฉ๋๊ณ (์ํธํ ์๋), etcd ๋ถํ๋ฅผ ๋ง๊ธฐ ์ํด 1MB๋ก ์ ํ๋๋ค.
1. Secret ํ์
์ด์ ๋ฆฌ
type ํ๋๋ โ์ด ๋ดํฌ์ ์ด๋ค ํ์์ ๋ฐ์ดํฐ๊ฐ ๋ค์ด์๋์งโ๋ฅผ ์์คํ
์ ์๋ ค์ค๋ค.
| ํ์
| ๋น์ | ์ฃผ์ Key | ๋น๊ณ |
|---|
| Opaque | ๋น ๋ดํฌ | (์ฌ์ฉ์ ์ ์) | ๊ฐ์ฅ ๋ง์ด ์(๊ธฐ๋ณธ) |
| kubernetes.io/tls | ์ ๋ถ์ฆ ์ธํธ | tls.crt, tls.key | ์ธ์ฆ์ ๋ง๋ฃ ๊ด๋ฆฌ |
| service-account-token | ์ฌ์์ฆ | token, ca.crt | ํ๋์ ์๋ ๋ง์ดํธ |
| kubernetes.io/basic-auth | ๋ก๊ทธ์ธ ๋ฉ๋ชจ | username, password | Ingress ์ธ์ฆ |
| dockerconfigjson | ์ฐฝ๊ณ ์ด์ | .dockerconfigjson | Private ์ด๋ฏธ์ง pull |
| helm.sh/release.v1 | ์ค์น ์ด๋ ฅ์ | (Helm ๋ด๋ถ) | ๊ฑด๋๋ฆฌ์ง ๋ง ๊ฒ ๐ซ |
Opaque (์ผ๋ฐํ)
์ ํด์ง ํ์์ด ์๋ ์์์ Key-Value. DB ๋น๋ฐ๋ฒํธยทAPI Key ๋ฑ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ.
1
2
3
4
5
6
| apiVersion: v1
kind: Secret
type: Opaque
data:
db-pass: MWYyaZD... # base64
api-key: dXNlcnB...
|
kubernetes.io/tls (HTTPS ์ธ์ฆ์)
Ingressยท์น ์๋ฒ์ TLS/SSL ์ธ์ฆ์ ํ์ค ๊ท๊ฒฉ. tls.crt(๊ณต๊ฐ ์ธ์ฆ์)ยทtls.key(๊ฐ์ธํค)๊ฐ ํ์.
1
| kubectl create secret tls my-tls-secret --cert=tls.crt --key=tls.key -n default
|
dockerconfigjson (์ด๋ฏธ์ง ํ ์ํฌ๋ฆฟ)
Private ๋ ์ง์คํธ๋ฆฌ ๋ก๊ทธ์ธ ์ ๋ณด. ํ๋์ imagePullSecrets์ ์ฌ์ฉ.
1
2
3
| kubectl create secret docker-registry my-registry-secret \
--docker-server=hyperregistry.example.com \
--docker-username=myuser --docker-password=mypassword -n default
|
1
2
3
4
5
6
| spec:
imagePullSecrets:
- name: my-registry-secret
containers:
- name: app
image: hyperregistry.example.com/myapp:1.0
|
โ ๏ธ helm.sh/release.v1์ ์ ๋ ์๋ ์ญ์ ยท์์ ๊ธ์ง. Helm์ด ๋ฐฐํฌ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ์ ์ฉ ์ํฌ๋ฆฟ์ด๋ผ, ๊ฑด๋๋ฆฌ๋ฉด Helm์ด ๋ฐฐํฌ๋ ์ฑ์ ์ธ์ํ์ง ๋ชปํ๊ฒ ๋๋ค.
2. Secret ์์ฑ & ์กฐํ
1
2
3
4
5
6
7
8
9
| # ๋ช
๋ น์ด ์์ฑ(Opaque)
kubectl create secret generic my-secret \
--from-literal=db-password=mysecretpassword --from-literal=api-key=abc123 -n default
# ํ์ผ๋ก๋ถํฐ
kubectl create secret generic my-secret --from-file=config.json -n default
# YAML์ base64 ์ธ์ฝ๋ฉ ํ์
echo -n 'mysecretpassword' | base64 # bXlzZWNyZXRwYXNzd29yZA==
|
1
2
3
| # ์กฐํ & ๋์ฝ๋ฉ
kubectl get secret my-secret -n default -o yaml
kubectl get secret my-secret -n default -o jsonpath='{.data.db-password}' | base64 -d
|
3. ํ๋์์ ์ฌ์ฉ
ํ๊ฒฝ ๋ณ์๋ก ์ฃผ์
1
2
3
4
5
6
7
8
9
10
11
12
13
| spec:
containers:
- name: app
image: myapp:1.0
env:
- name: DB_PASSWORD # ๋จ์ผ ํค
valueFrom:
secretKeyRef:
name: my-secret
key: db-password
envFrom: # ์ ์ฒด ์ฃผ์
- secretRef:
name: my-secret
|
Volume์ผ๋ก ๋ง์ดํธ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| spec:
containers:
- name: app
image: myapp:1.0
volumeMounts:
- name: secret-volume
mountPath: /etc/secrets
readOnly: true
volumes:
- name: secret-volume
secret:
secretName: my-secret
items:
- key: db-password
path: db-password.txt # /etc/secrets/db-password.txt
|
๐ก ์ธ์ฆ์ยท์ค์ ํ์ผ์ Volume, ์งง์ ๊ฐ์ ํ๊ฒฝ ๋ณ์๊ฐ ํธํ๋ค. TLS ์ธ์ฆ์์ฒ๋ผ ํ์ผ๋ก ์กด์ฌํด์ผ ํ๋ ๊ฒ์ Volume ๋ง์ดํธ, DB ๋น๋ฐ๋ฒํธ ๊ฐ์ ๋จ์ ๊ฐ์ secretKeyRef๋ก ์ฃผ์
ํ๋ค.
4. ๋ณด์ ์ฃผ์์ฌํญ (ํ์)
โ ๏ธ โ Base64๋ ์ํธํ๊ฐ ์๋๋ค. kubectl get secret -o yaml์ด๋ฉด ๋๊ตฌ๋ ๋์ฝ๋ฉํด ์๋ณธ์ ๋ณธ๋ค.
1
| echo "bXlzZWNyZXRwYXNzd29yZA==" | base64 -d # mysecretpassword
|
โ ๏ธ โก RBAC๋ก ์กฐํ ๊ถํ ์ ํ. ์๋ฌด๋ Secret์ get/listํ์ง ๋ชปํ๋๋ก Role์ ์๊ฒฉํ ๊ฑด๋ค.
1
2
3
4
5
6
| kind: Role
rules:
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["my-secret"] # ํน์ Secret๋ง
verbs: ["get"]
|
โ ๏ธ โข Git์ ์ฌ๋ฆฌ์ง ๋ง ๊ฒ. Secret YAML์ ๊ทธ๋๋ก ์ปค๋ฐํ๋ฉด ์ ์ถ๋๋ค. Sealed SecretsยทExternal Secrets ์ฌ์ฉ์ ๊ถ์ฅํ๊ณ , .gitignore์ *-secret.yaml์ ์ถ๊ฐํ๋ค.
๐ ์ ๋ฆฌ
1
2
3
4
5
| Secret
โโ ๊ฐ๋
๋ฏผ๊ฐ ์ ๋ณด ์ ์ฅ(base64ยท1MB ์ ํ)
โโ ํ์
Opaque(๊ธฐ๋ณธ)/tls/dockerconfigjson/basic-auth...
โโ ์ฃผ์
env(secretKeyRef) / Volume(๋ง์ดํธ)
โโ ๋ณด์ base64โ ์ํธํ ยท RBAC ์ ํ ยท Git ๊ธ์ง
|
| ๊ฐ๋
| ํ ์ค ์ ์ |
|---|
| Secret | ๋ฏผ๊ฐ ์ ๋ณด ๊ด๋ฆฌ ๋ฆฌ์์ค |
| Opaque / tls | ๋ฒ์ฉ / ์ธ์ฆ์ ํ์
|
| base64 | ์ธ์ฝ๋ฉ(์ํธํ ์๋) |
Secret์ ํต์ฌ์ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ์ฝ๋์์ ๋ถ๋ฆฌํ๋ ๊ฒ์ด์ง๋ง, base64๋ ์ํธํ๊ฐ ์๋๋ผ๋ ์ ์ ๋ฐ๋์ ๊ธฐ์ตํด์ผ ํ๋ค. RBAC๋ก ์ ๊ทผ์ ์ขํ๊ณ Git ์ ์ถ์ ๋ง๋ ์ค๋ฌด ์ต๊ด์ด Secret ์์ฒด๋ณด๋ค ์ค์ํ๋ค.
๐ ์ฐธ๊ณ
Comments powered by Disqus.