๐ŸŒฑ ์ธํ”„๋Ÿฐ/โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ)

(6) Configmap, Secret ์ดํ•ดํ•˜๊ธฐ

mallin 2025. 6. 8. 14:01

โš“ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์–ด๋‚˜๋” ํด๋ž˜์Šค (์ง€์ƒํŽธ) - Spring 1, 2 ์„ ๋“ฃ๊ณ  ์ž‘์„ฑํ•˜๋Š” ๋ณต์Šต ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

 

1. Configmap, Secret ๊ธฐ๋ณธ ๊ฐœ๋…

  • Configmap ๊ณผ Secret ์€ Pod ์— ๋ฐ”๋กœ ์—ฐ๊ฒฐ
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‘˜ ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

 

Configmap

Pod ์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์„ค์ •
  • Pod ์˜ containers > envFrom ๊ณผ ์—ฐ๊ฒฐ
  • envFrom ์€ ConfigMap์˜ ๋ฐ์ดํ„ฐ๋ฅผ Pod ๋‚ด๋ถ€์˜ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฃผ์ž… ํ•˜๋Š” ์†์„ฑ
  • Pod ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด, env ๋ช…๋ น์–ด๋กœ ํ•ด๋‹น ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ์ฃผ์ž…๋˜์—ˆ๋Š”์ง€ ํ™•์ธ ๊ฐ€๋Šฅ
spring_profiles_active: "dev"
application_role: "ALL"
postgresql_filepath: "/usr/src/myapp/datasource/postgresql-info.yaml"
  • key: value ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ
  • ๊ฐ๊ฐ์˜ ์—ญํ•  โฌ‡๏ธ
Key ์„ค๋ช…
spring_profiles_active Spring์˜ ํ™˜๊ฒฝ ์„ค์ • ๊ฐ’ ์ง€์ • (์˜ˆ: dev, prod)
application_role ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ญํ•  ์ง€์ • (๊ธฐ๋Šฅ ์ œ์–ด์šฉ)
postgresql_filepath ์™ธ๋ถ€ ํ™˜๊ฒฝ ์„ค์ • ํŒŒ์ผ์˜ ๊ฒฝ๋กœ (Secret ์—ฐ๋™ ๋“ฑ)

 

  • postgresql_filepath๋Š” Secret ๋ฐ์ดํ„ฐ๋กœ ์—ฐ๊ฒฐ๋  ํŒŒ์ผ ๊ฒฝ๋กœ์ด๋ฉฐ, ์ด ๊ฒฝ๋กœ๋Š” Pod์˜ mountPath ์„ค์ •์— ๋”ฐ๋ผ ๊ฒฐ์ •
  • ๋งŒ์•ฝ mountPath ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋‹ค์‹œ ๋นŒ๋“œํ•˜์ง€ ์•Š๊ณ  ConfigMap๋งŒ ์ˆ˜์ •ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 

 

Pod ๊ฐ€ ์ƒ์„ฑ ์‹œ ๋™์ž‘ ํ๋ฆ„

  1. Configmap ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ฃผ์ž…
  2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰์‹œ, ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ช…๋ น์–ด์— ๋งคํ•‘
  3. App ๊ธฐ๋™
java -Dspring.profiles.active=${spring_profiles_active} \
     -D... \
     -jar /usr/src/myapp/app.jar

Secret

  • Secret ์€ Pod์˜ volumes ์™€ ์—ฐ๊ฒฐ
  • Volume ์€ Pod ์™€ ์™ธ๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์†์„ฑ
  • Secret ์„ ์—ฐ๊ฒฐํ•˜๊ณ  Pod ๋‚ด๋ถ€์— ์ ‘์†ํ•˜๋ฉด,
    ๋งˆ์šดํŠธ๋œ ๊ฒฝ๋กœ ์•ˆ์— Secret ์˜ stringData ๊ฐ’์ด ํŒŒ์ผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์Œ์„ ํ™•์ธ ๊ฐ€๋Šฅ

 

Secret ์ •์˜ ์˜ˆ์‹œ

 # stringData 
 postgresql-info.yaml: |
    driver-class-name: "org.postgresql.Driver"
    url: "jdbc:postgresql://postgresql:5431"
    username: "dev"
    password: "dev123"
    
 # data
 postgresql-info.yaml: >-    
 	ZHJpdmVyLWNsYXNzL.....kZXYiCnBhc3N3b3JkOiAiZGtmaTNuZmFrK2RmajMiCg==
  • postgresql-info.yaml ํŒŒ์ผ์ด ๋งŒ๋“ค์–ด์ง€๊ณ , ์•„๋ž˜ ๋‚ด์šฉ๋“ค์ด ์ €์žฅ
  • stringData ๋Š” ์“ฐ๊ธฐ ์ „์šฉ ์†์„ฑ
  • ์ €์žฅ๋˜๋Š” ๊ฐ’์€ Base64 ์ธ์ฝ”๋”ฉ ๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์ง€๋งŒ, ๋ณด์•ˆ ์ธก๋ฉด์—์„œ ์™„์ „ํ•œ ๋ณดํ˜ธ๋Š” ์•„๋‹ˆ๋‹ค (์‰ฝ๊ฒŒ ๋””์ฝ”๋”ฉ ๊ฐ€๋Šฅ)

 

Secret ๋™์ž‘ ํ๋ฆ„

 

  1. Pod์— mountPath ์„ค์ •
    • ์ง€์ •๋œ ๊ฒฝ๋กœ์— Secret์ด ๋งˆ์šดํŠธ๋จ
  2. Pod ์‹คํ–‰ ์‹œ Volume์ด Secret๊ณผ ์—ฐ๊ฒฐ๋จ
    • Secret์— ์žˆ๋Š” postgresql-info.yaml ํŒŒ์ผ์ด ์ปจํ…Œ์ด๋„ˆ ์•ˆ์— ์ƒ์„ฑ๋จ
  3. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ ํŒŒ์ผ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์ƒ์„ฑ๋œ ํŒŒ์ผ ๋‚ด์šฉ์€ Base64 ๋””์ฝ”๋”ฉ๋œ ์›๋ž˜ ์ž…๋ ฅ๊ฐ’
  4. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•ด๋‹น ํŒŒ์ผ์„ ์ฝ์–ด DB ์„ค์ •์— ์‚ฌ์šฉ
    • ์˜ˆ: DB ์—ฐ๊ฒฐ ์ •๋ณด (driver, url, username, password) ๋“ฑ

 


๋™์ž‘ ํ™•์ธ

1. ์ž…๋ ฅ๊ฐ’ ํ™•์ธ : Configmap ๊ณผ Secret ์˜ data ํ™•์ธ

     1-1. ๋Œ€์‹œ๋ณด๋“œ

Configmap  Secret
{
     "application_role": "ALL",
     "postgresql_filepath": "/usr/src/myapp/datasource/postgresql-info.yaml",
     "spring_profiles_active": "dev"
}
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "dev"
password: "dev123"

 

 

     1-2. ๋ช…๋ น์–ด๋กœ ํ™•์ธ

Configmap Secret
kubectl describe -n anotherclass-123 configmaps api-tester-1231-properties kubectl get -n anotherclass-123 secret api-tester-1231-postgresql -o yaml
Data ====
application_role:
----
ALL
postgresql_filepath:
----
/usr/src/myapp/datasource/postgresql-info.yaml spring_profiles_active:
---- dev
apiVersion: v1
data:
     postgresql-info.yaml: ZHJpdmVyLWNsYXNzLW5hbWU6ICJvcmcucG9zdGdyZXNxbC5Ecml2ZXIiCnVybDogImpkYmM6cG9zdGdyZXNxbDovL3Bvc3RncmVzcWw6NTQzMSIKdXNlcm5hbWU6ICJkZXYiCnBhc3N3b3JkOiAiZGV2MTIzIgo=
     kind: Secret
     metadata:
         creationTimestamp: "2025-05-30T02:40:38Z"
         labels:
             component: backend-server
             instance: api-tester-1231
             managed-by: dashboard
             name: api-tester
             part-of: k8s-anotherclass
             version: 1.0.0
         name: api-tester-1231-postgresql
         namespace: anotherclass-123
         resourceVersion: "82533"
         uid: 54b27805-51a3-48ec-9657-1a4336d4f6d0
     type: Opaque

 

2. ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์— ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ์ž˜ ์ฃผ์ž…์ด ๋๋Š”์ง€ ํ™•์ธ

     2-1. App ์ด ๊ธฐ๋™ํ•  ๋•Œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ์šฉ๋œ ๋ช…๋ น์–ด ์กฐํšŒ (env)

๋”๋ณด๊ธฐ
API_TESTER_1231_SERVICE_PORT=80
API_TESTER_1231_SERVICE_HOST=10.106.210.22
postgresql_filepath=/usr/src/myapp/datasource/postgresql-info.yaml
LANG=C.UTF-8
API_TESTER_1231_PORT_80_TCP_ADDR=10.106.210.22
HOSTNAME=api-tester-1231-755676484f-gmn88
JAVA_HOME=/usr/java/openjdk-17
API_TESTER_1231_PORT=tcp://10.106.210.22:80
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
JAVA_VERSION=17.0.2
API_TESTER_1231_PORT_80_TCP=tcp://10.106.210.22:80
KUBERNETES_PORT=tcp://10.96.0.1:443
PWD=/usr/src/myapp
HOME=/root
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP_PORT=443
API_TESTER_1231_PORT_80_TCP_PROTO=tcp
spring_profiles_active=dev
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
TERM=xterm
API_TESTER_1231_PORT_80_TCP_PORT=80
application_role=ALL
SHLVL=1
KUBERNETES_SERVICE_PORT=443
PATH=/usr/java/openjdk-17/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_SERVICE_HOST=10.96.0.1
_=/usr/bin/env

 

     2-2. Secret ์œผ๋กœ ๋งˆ์šดํŒ…ํ•œ ๊ฐ’ ํ™•์ธ

# Secret ํŒŒ์ผ ํ™•์ธ
(1) ls /usr/src/myapp/datasource 
(2) cat /usr/src/myapp/datasource/postgresql-info.yaml
# java ์‹คํ–‰ ์ธ์ž ํ™•์ธ
(3) jps -v
(1)postgresql-info.yaml
(2) driver-class-name: "org.postgresql.Driver"
		url: "jdbc:postgresql://postgresql:5431"
		username: "dev"
		password: "dev123"
(3) 1 app.jar -Dspring.profiles.active=${spring_profiles_active} -Dapplication.role=${application_role} -Dpostgresql.filepath=${postgresql_filepath}
42 Jps -Dapplication.home=/usr/java/openjdk-17 -Xms8m -Djdk.module.main=jdk.jcmd

 

3. API ๋ฅผ ๋‚ ๋ ค์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ๋ฐ˜์˜๋๋Š”์ง€ ํ™•์ธ

     3-1. http://192.168.56.30:31231/info → Application ์ •๋ณด ํ™•์ธ 

๋”๋ณด๊ธฐ
[Version] : Api Tester v1.0.0
[Profile] : dev
[Role] : ALL (option: ALL, GET, POST, PUT, DELETE)
[Database]
driver-class-name : org.postgresql.Driver
url : jdbc:postgresql://postgresql:5431
username : dev
password : dev123

 

     3-2. http://192.168.56.30:31231/properties → Application Properties ํŒŒ์ผ ๊ตฌ์„ฑ ํ™•์ธ

๋”๋ณด๊ธฐ
[Application profile] : dev
Volume path :/usr/src/myapp/files/dev/

application.yaml : Common properties
---
datasource:
  driver-class-name:
  url:
  username:
  password:
application:
  role: "ALL"
  version: "Api Tester v1.0.0"

postgresql:
  filepath:


application-dev.yaml : Dev properties
---
volume-path:
  persistent-volume-data: "/usr/src/myapp/files/dev/"
  pod-volume-data: "/usr/src/myapp/tmp/"


application-qa.yaml : QA properties
---
volume-path:
  persistent-volume-data: "/usr/src/myapp/files/qa/"
  pod-volume-data: "/usr/src/myapp/tmp/"


application-prod.yaml : Prod properties
---
volume-path:
  persistent-volume-data: "/usr/src/myapp/files/prod/"
  pod-volume-data: "/usr/src/myapp/tmp/"

 

4. ๋ฐ์ดํ„ฐ ์ˆ˜์ •

(Configmap) application_role ์„ ALL → GET ์œผ๋กœ ๋ณ€๊ฒฝ

(Secret) username ์„ dev → test ๋กœ ๋ณ€๊ฒฝ

 

5. ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž˜ ๋ฐ˜์˜๋๋Š”์ง€ ํ™•์ธ

(Configmap)

  • ํŒŒ๋“œ Exec ์— ๋“ค์–ด๊ฐ€์„œ env ๋ช…๋ น์–ด ์ž…๋ ฅ
  • ํ•˜์ง€๋งŒ, application_role=ALL ๋กœ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

→ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” Pod ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํ•œ๋ฒˆ๋งŒ ์ฃผ์ž…๋˜๊ธฐ ๋•Œ๋ฌธ์—, ConfigMap ์˜ ๊ฐ’์„ ๋ฐ”๊พผ๋‹ค๊ณ  ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Œ

→ Pod ๋ฅผ ์‚ญ์ œ ํ›„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์ง€๋ฉด ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค.

 

 

(Secret)

  • ํŒŒ๋“œ Exec ์— ๋“ค์–ด๊ฐ€์„œ cat /usr/src/myapp/datasource/postgresql-info.yaml ์ž…๋ ฅ
driver-class-name: "org.postgresql.Driver"
url: "jdbc:postgresql://postgresql:5431"
username: "test"
password: "dev123"
  • ๊ฐ’์ด ๋ณ€๊ฒฝ๋จ

→ Secret ์€ ๋ณผ๋ฅจ ๋งˆ์šดํŒ…์œผ๋กœ ์—ฐ๊ฒฐํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์—

→ App ์—์„œ๋Š” ์ด ํŒŒ์ผ์„ 5์ดˆ ๊ฐ„๊ฒฉ์œผ๋กœ ์กฐํšŒํ•œ๋‹ค.


2. ์˜์—ญ ํŒŒ๊ดด์˜ ์ฃผ๋ฒ” Configmap

์ถœ์ฒ˜URL : https://inf.run/k7mF

VM (Kubernetes ์ „ ํ™˜๊ฒฝ) Kubernetes
[์ธํ”„๋ผ ํ™˜๊ฒฝ]
  1. ์ธํ”„๋ผ ๋‹ด๋‹น์ž๊ฐ€ ํ™˜๊ฒฝ๋ณ„๋กœ ์„œ๋ฒ„๋ฅผ ์„ธํŒ…
  2. ํ™˜๊ฒฝ ๋ณ„๋กœ JDK ์„ค์น˜
  3. ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๊ด€๋ฆฌ (java_home, volume_path, log_path)
[์ธํ”„๋ผ ํ™˜๊ฒฝ]
  1. ๊ฐ ํ™˜๊ฒฝ๋งˆ๋‹ค (dev, qa, prod) Pod ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๊ณ , dockerHub์—์„œ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค.
  2. ํ™˜๊ฒฝ๋งˆ๋‹ค ๋‹ค๋ฅธ ๊ฐ’์„ ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ๊ฐ๊ฐ Configmap
  3. ์ด๋ฏธ์ง€ ์•ˆ์— ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฐ›์•„์„œ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์ด ์กด์žฌ
[๊ฐœ๋ฐœ ํ™˜๊ฒฝ & CI/CD ํ™˜๊ฒฝ]
  1. JAR package ํŒŒ์ผ์„ VM ํ™˜๊ฒฝ์— ๋ณต์‚ฌ
  2. ์‹คํ–‰ ๋ช…๋ น์„ ์ง์ ‘ ๋‚ ๋ฆฐ๋‹ค
  3. ๋ฐ๋ธŒ์˜ต์Šค ๋‹ด๋‹น์ž๋Š” App ์— ํ™˜๊ฒฝ์ด๋‚˜ ๋ชฉ์ ์— ๋งž๋Š” ๋ณ€์ˆ˜ ๋„ฃ๋Š”๋‹ค.
  4. ๊ฐœ๋ฐœ์ž๋„ ํ™˜๊ฒฝ๋ณ„๋กœ Properties ํŒŒ์ผ๋“ค์„ ๊ด€๋ฆฌ
[๊ฐœ๋ฐœ ํ™˜๊ฒฝ & CI/CD ํ™˜๊ฒฝ]
  1. ์Šคํ”„๋ง์œผ๋กœ ๊ฐœ๋ฐœ
  2. Github ๋กœ ์†Œ์Šค๋ฅผ ์ปค๋ฐ‹
  3. Jenkins ์—์„œ ์†Œ์Šค๋ฅผ ๋ฐ›์•„์„œ ํŒŒ์ดํ”„๋ผ์ธ์ด ๋Œ์•„๊ฐ„๋‹ค.
  4. ์†Œ์Šค ๋นŒ๋“œ์™€ ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๊ณผ์ •์—์„œ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ dockerHub ๋กœ ์˜ฌ๋ผ๊ฐ„๋‹ค
  5. ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ํ›„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ด์–ด์„œ ๋ฐฐํฌ
  6. QA / ์šด์˜์€ ํ•„์š”ํ•  ๋•Œ ๋ฐฐํฌ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ๋ฐฐํฌ

 

→ VM ์—์„œ ๊ฐ์ž ๋‹ด๋‹น์ž๋“ค์ด ๊ด€๋ฆฌํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋“ค์„

→ ConfigMap ์œผ๋กœ ์ด ๋ชจ๋“  ์—ญํ• ๋“ค์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

 

์˜์—ญ ํŒŒ๊ดด?

  • ํฐ ํ”„๋กœ์ ํŠธ๋กœ ๊ฐ€๋ฉด ๊ฐˆ์ˆ˜๋ก ๊ฐ ๋ถ„์•ผ์˜ ๋‹ด๋‹น์ž๋“ค์ด ์กด์žฌ
  • ๊ทธ๋ฆฌ๊ณ  ๋ชจ๋‘๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋‹ค ๋‹ค๋ฃฐ ์ค„ ์•„๋Š”๊ฒŒ ์•„๋‹ˆ๋‹ค
  • ๋ชจ๋“  ์ธํ”„๋ผ๊ฐ€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ์œ„์—์„œ ๋Œ์•„๊ฐ€์ง€๋„ ์•Š๋Š”๋‹ค.

Configmap ์ด ๋ชฉ์ ๋งŒ ๋ณด๋ฉด ๊ฐ„๋‹จํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์˜์—ญ์„ ๋„˜๋‚˜๋“ค๊ณ  ์ •๋‹ต์ด ์—†๋‹ค. (⇒ ์˜์—ญํŒŒ๊ดด์˜ ์ฃผ๋ฒ”)


3. ์ด๋ฆ„ ๋•Œ๋ฌธ์— ๊ธฐ๋Œ€๊ฐ€ ๋„ˆ๋ฌด ์ปธ๋˜ Secret

type

โœ… type: Opaque (๊ธฐ๋ณธ๊ฐ’)

  • ์˜๋ฏธ: '๋ถˆํˆฌ๋ช…'์ด๋ผ๋Š” ๋œป์ด์ง€๋งŒ Kubernetes์—์„œ๋Š” ์ผ๋ฐ˜์ ์ธ Key-Value ์ €์žฅ์šฉ์œผ๋กœ ์‚ฌ์šฉ๋จ
  • ConfigMap๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘
  • ์ฐจ์ด์ ์€ ๋ฏผ๊ฐ ์ •๋ณด๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— **Base64 ์ธ์ฝ”๋”ฉ๋œ data**๋กœ ์ €์žฅ๋œ๋‹ค๋Š” ์ 

 

๐Ÿณ type: kubernetes.io/dockerconfigjson (๊ตฌ: docker-registry)

  • ์‚ฌ์„ค ์ด๋ฏธ์ง€ ์ €์žฅ์†Œ(Private Docker Registry)๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ
  • data ํ•ญ๋ชฉ์— docker-username, docker-password, docker-email ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จ์‹œํ‚ด
  • Secret์„ ์ƒ์„ฑํ•œ ํ›„, imagePullSecrets ์†์„ฑ์œผ๋กœ Pod์— ์—ฐ๊ฒฐ

 

๐Ÿ” type: kubernetes.io/tls

  • TLS ์ธ์ฆ์„œ๋ฅผ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉ
  • data์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ‚ค๋ฅผ ํฌํ•จํ•ด์•ผ ํ•จ:
    • tls.crt: ์ธ์ฆ์„œ ํŒŒ์ผ ๋‚ด์šฉ
    • tls.key: ๊ฐœ์ธํ‚ค ๋‚ด์šฉ
  • ์ฃผ๋กœ Ingress, HTTPS ํ†ต์‹ , Pod ๊ฐœ๋ณ„ ์ธ์ฆ์„œ ์„ค์ • ๋“ฑ์— ์‚ฌ์šฉ

 

-> ์ด ์™ธ์—๋„ 3~4๊ฐœ์˜ ํƒ€์ž…๋“ค์ด ๋”์žˆ๋‹ค. 

-> type ์ค‘์—์„œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฑด ์—†์Œ


์ค‘์š” ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐฉ์•ˆ

  1. Cluster ๋‚ด์—์„œ ์ง์ ‘ ์ƒ์„ฑ/๊ด€๋ฆฌ
    1. Secret ์— ๋Œ€ํ•œ ์˜ค๋ธŒ์ ํŠธ ์ƒ์„ฑ์„ ํŒŒ์ดํ”„๋ผ์ธ์„ ํƒœ์›Œ์„œ ๋งŒ๋“ค์ง€ ์•ˆ๊ธฐ
    2. Cluster ๋‚ด์—์„œ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ๊ด€๋ฆฌ
    3. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ด€๋ฆฌ ๊ถŒํ•œ์„ ํ™•์‹คํ•˜๊ฒŒ ์„ค์ •ํ•˜๋ฉด, ์•„๋ฌด๋‚˜ Pod ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณผ ์ˆ˜ ์—†๋‹ค
    4. ์ ‘๊ทผ ์ œ์–ด๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•
  2. ์ž์ฒด ์•”ํ˜ธํ™”
    1. ๋ฌธ์ž๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์•”ํ˜ธํ™”
    2. ํŠน์ • key ๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฌธ์ž๋ฅผ ์•”ํ˜ธํ™”ํ•˜๊ณ 
    3. Secret ์„ ํ†ตํ•ด์„œ ๊ด€๋ฆฌ
  3. ์„œ๋ธŒํŒŒํ‹ฐ ์‚ฌ์šฉ
    1. HashiCorp ์˜ Valut ๊ฐ€ ๋Œ€ํ‘œ ์˜ˆ
    2. App ๊ธฐ๋™ ์‹œ ์š”์ฒญ

 

4. ์‘์šฉ ๊ณผ์ œ

https://soyeon-devlog.tistory.com/44