11. Secret

2021. 5. 9. 11:52ใ†๐ŸŽฏ OpenSource/K8S

7.5 ์‹œํฌ๋ฆฟ์œผ๋กœ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ ์ „๋‹ฌํ•˜๊ธฐ

๋ณด์•ˆ์ด ์œ ์ง€๋˜์–ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ(์ž๊ฒฉ์ฆ๋ช…, ๊ฐœ์ธ ์•”ํ˜ธํ™”ํ‚ค ๋“ฑ)์€ Secret์ด๋ผ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•œ๋‹ค.

 

7.5.1 Secret ์†Œ๊ฐœ

  • ConfigMap๊ณผ ์œ ์‚ฌํ•œ key-value ์Œ์œผ๋กœ ConfigMap๊ณผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.
  • ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    • ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ Secret ํ•ญ๋ชฉ์„ ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌ
    • Secret ํ•ญ๋ชฉ์„ ๋ณผ๋ฅจ ํŒŒ์ผ๋กœ ๋…ธ์ถœ 
  • Secret์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ํŒŒ๋“œ๊ฐ€ ์žˆ๋Š” ๋…ธ๋“œ์—๋งŒ ๊ฐœ๋ณ„์ ์œผ๋กœ ์‹œํฌ๋ฆฟ์„ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋…ธ๋“œ ์ž์ฒด์ ์œผ๋กœ ์‹œํฌ๋ฆฟ์„ ๋ฉ”๋ชจ๋ฆฌ์—๋งŒ ์ €์žฅํ•˜๊ณ , ๋ฌผ๋ฆฌ ์ €์žฅ์†Œ์—๋Š” ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. (wiping ๋ฐฉ์ง€)

ConfigMap๊ณผ Secret์„ ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•˜๋‹ค.

  1. ๋ฏผ๊ฐํ•˜์ง€ ์•Š์€ ์ผ๋ฐ˜ ์„ค์ • ๋ฐ์ดํ„ฐ : ์ปจํ”ผ๊ทธ๋งต
  2. ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ : ์‹œํฌ๋ฆฟ
  3. ๋งŒ์•ฝ ์„ค์ •ํŒŒ์ผ์ด ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ + ์ผ๋ฐ˜ ๋ฐ์ดํ„ฐ :  ํ•ด๋‹น ํŒŒ์ผ์„ ์‹œํฌ๋ฆฟ ์•ˆ์— ์ €์žฅ

 

7.5.2 ๊ธฐ๋ณธ ํ† ํฐ ์†Œ๊ฐœ

๋ชจ๋“  ํŒŒ๋“œ์—๋Š” secret ๋ณผ๋ฅจ์ด /var/run/secrets/kubernetes.io/serviceaccout ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋งˆ์šดํŠธ๋˜์–ด ์žˆ๋‹ค.

root@master001:~/Chapter07# kubectl describe pod fortune-configmap-volume | grep secret
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-xgl85 (ro)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-xgl85 (ro)

์กฐํšŒ๋œ ์‹œํฌ๋ฆฟ default-token-xgl85๋ฅผ ์‚ดํŽด๋ณธ๋‹ค. ์ด๋Ÿฌํ•œ default-token ์‹œํฌ๋ฆฟ์€ ๋ชจ๋“  ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งˆ์šดํŠธ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

root@master001:~/Chapter07# kubectl get secrets default-token-xgl85
NAME                  TYPE                                  DATA   AGE
default-token-xgl85   kubernetes.io/service-account-token   3      69d


root@master001:~/Chapter07# kubectl describe secrets default-token-xgl85
Name:         default-token-xgl85
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: default
              kubernetes.io/service-account.uid: 10eba40f-2402-45c8-9355-0bbaa753a4ee

Type:  kubernetes.io/service-account-token

Data
====
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IjdRWUpZYjlncElyclZfY3FsSnZiMDZVTG1zdGNRTHg1WkZQZE5UN3N3ZEUifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImRlZmF1bHQtdG9rZW4teGdsODUiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjEwZWJhNDBmLTI0MDItNDVjOC05MzU1LTBiYmFhNzUzYTRlZSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Ew2zNJJHWq7sfA7h5An2Ke0wASQ_ASCNHiIB4AR6KHwSRsvm9JQx0IoEZqeinvcnSbJ5MEgwSxsuj7kLRoPG6wsOp3CjG2MfM7946MsSM78PmJY1XkRsEqJLIYQ-umV4NNNyFQ0IEcgnqov28bY8KXfRel6iXNgzMMmMpOjomliSDjdd6t7BD4sq2p3TJa_aAQmOAGEQY0NKrt9kU64O2gBgbq-dS5W31c53me0FUEGAzHMIQJUolfKyNwD15ze9S-_98NMDh-GDqpvljBBX86arW1tAsr959PuYcrVhPewXbVSKQaeVkcE4n3C03qJz9dedCzF8x28fMgCTSDEKGA
ca.crt:     1066 bytes
namespace:  7 bytes

์‹œํฌ๋ฆฟ์ด ๊ฐ€์ง€๋Š” ์„ธ๊ฐ€์ง€ ํ•ญ๋ชฉ(ca.crt, namespace, token)์€ pod ์•ˆ์—์„œ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค API ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์ด๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์ด์ƒ์ ์ด์ง€๋งŒ, ์ง์ ‘ ํ†ต์‹ ์ด ๊ผญ ํ•„์š”ํ•œ ๊ฒฝ์šฐ๋Š” secret ๋ณผ๋ฅจ์„ ์ด์šฉํ•œ๋‹ค.

 

์ปจํ…Œ์ด๋„ˆ์˜ ํ•ด๋‹น ๊ฒฝ๋กœ์— default secret ๋ณผ๋ฅจ์— ๋งˆ์šดํŠธ ๋จ์œผ๋กœ์จ ์ ‘๊ทผํ•˜๋Š” ํŒŒ์ผ์ด ์žˆ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

root@master001:~/Chapter07# kubectl exec fortune-configmap-volume ls /var/run/secrets/kubernetes.io/serviceaccount
ca.crt
namespace
token

 

 

7.5.3 ์‹œํฌ๋ฆฟ ์ƒ์„ฑ

์‹œํฌ๋ฆฟ์„ ์ƒ์„ฑํ•˜์—ฌ fortune-serving Nginx ์ปจํ…Œ์ด๋„ˆ๊ฐ€ HTTPS ํŠธ๋ž˜ํ”ฝ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ•œ๋‹ค.

1) ์ธ์ฆ์„œ์™€ ๊ฐœ์ธ ํ‚ค ํŒŒ์ผ ์ƒ์„ฑ

root@master001:~/Chapter07# openssl genrsa -out https.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
....................+++++
...........................................................................+++++
e is 65537 (0x010001)

root@master001:~/Chapter07# openssl req -new -x509 -key https.key -out https.cert -days 3650 -subj /CN=www.kubia-example.com

 

2) ๋”๋ฏธ ํŒŒ์ผ ์ƒ์„ฑ

root@master001:~/Chapter07# echo bar > foo

 

3) ์‹œํฌ๋ฆฟ ์ƒ์„ฑ

root@master001:~/Chapter07# kubectl create secret generic fortune-https2 --from-file=https.key --from-file=https.cert --from-file=foo
secret/fortune-https2 created
root@master001:~/Chapter07# kubectl describe secrets fortune-https2
Name:         fortune-https2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
foo:         4 bytes
https.cert:  1147 bytes
https.key:   1675 bytes

์‹œํฌ๋ฆฟ์˜ ๋ฐ์ดํ„ฐ๋Š” Base64 ํ˜•ํƒœ๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด ์ €์žฅ๋˜๋ฉฐ, ์ปจํ…Œ์ด๋„ˆ์— ์ „๋‹ฌ๋  ๋•Œ๋Š” ๋””์ฝ”๋”ฉ๋˜์–ด ์ „๋‹ฌ๋œ๋‹ค.

 

7.5.4 ConfigMap๊ณผ Secret ๋น„๊ต

์‹œํฌ๋ฆฟ ํ•ญ๋ชฉ์˜ ๋‚ด์šฉ์€ Base64๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ปจํ”ผํฌ๋งต์˜ ๋‚ด์šฉ์€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ์ด๋‹ค.

Base64 ์ธ์ฝ”๋”ฉ์„ ์‚ฌ์šฉํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ํ˜•์‹์ธ yaml์ด๋‚˜ json์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.

root@master001:~/Chapter07# kubectl describe secrets fortune-https2
Name:         fortune-https2
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  Opaque

Data
====
foo:         4 bytes
https.cert:  1147 bytes
https.key:   1675 bytes

root@master001:~/Chapter07# kubectl get secret fortune-https2 -o yaml
apiVersion: v1
data:
  foo: YmFyCg==
  https.cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lVTnJHdHdhalo3Z21QaXBSVzAvTFBYa1ZENGc0d0RRWUpLb1pJaHZjTkFRRUwKQlFBd0lERWVNQndHQTFVRUF3d1ZkM2QzTG10MVltbGhMV1Y0WVcxd2JHVXVZMjl0TUI0WERUSXhNRFV3T1RBMgpNakl6T0ZvWERUTXhNRFV3TnpBMk1qSXpPRm93SURFZU1Cd0dBMVVFQXd3VmQzZDNMbXQxWW1saExXVjRZVzF3CmJHVXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0Q0dpM1JmN21KL00KUjJQUWFkblBWRnJ3SHQxTTZRWVdUTGV1akxLTWM0dHN0RUdGY29HMkNISUczRUROanY0V1RBSjhpVWtzaEFQNgpWT05qUlFxZmh3bzQvS21CTFB0NzU1VHd6Z3daQmtUOFdpai94dmRBSmM5allaaWZOM3R5TUEvb3FJeEM4dXRoCkk4STNuWmhVSUdiN0k5VjdYVG5zV2dEbVdUWlVzWmJOOEtlY09sRlBBdUl1VVNTN3h6MFVlZ3ErTnR5ZGF2YTIKZ2lZbEVKNXRMSWVMZDV2TEFtUGh1dDRHYUJ3MjZBN2tUYVF4OEZNNi9oM2FIL29tTWJqYks3TFRIOXA4bWtldApLMll0UTYvRDBVY0NMQm5Vang2Sk9TVjhEdk51NkZobTM5UWh2RFJiMFhlbWdMdnhZb0U1MTVDT0FUUWdlcUtBCmt3MG54UnIxQndJREFRQUJvMU13VVRBZEJnTlZIUTRFRmdRVVZpMHVic29GUDlTblRFNm05Y0xMVDVlSWQxSXcKSHdZRFZSMGpCQmd3Rm9BVVZpMHVic29GUDlTblRFNm05Y0xMVDVlSWQxSXdEd1lEVlIwVEFRSC9CQVV3QXdFQgovekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBaUtjVFpJcU5BVEVLeGc0SkpiZ0lVc0F1MUZNYkVYY2dUbVJFCnBaczdjdldiMUM5ZVFzak1wSHExdzlwY0dzdTZSWlk3OU5FOU1ucFBhVnVGOFFnZVNoOXBPc0xPakJ4STk5ZmIKbG5WUFEyOXkvZ1JJdHhtU25WdTlKWTF3c0grN0ZxLzFXdXNYdjhXTERrR1h3aDZqQTJwcTVFZGRsc0t4d2c0QQpWTzEzaVgxWVE1bUxETnYra2EycnNiVTNsQm9mOTlhV0RwK1RsR2x3WHRWUlMxUjh4QWdpU29vb1Z3SUlpYitUCm1Hc2Q1WEZ2bzlwazN3bm5XTDUreUNDZnZMZDBlZVlCNzYxRUkzVUd3ZThPUGJYR0RlVk1wTFlLamZ3VXlQd2oKWTJDKzlrY1dQUEptTENqMXBHNnpSL1JqTDNkcWZ0NitZMkRIK3Z4Q1R1Tm1ZVHdlNlE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
  https.key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBdENHaTNSZjdtSi9NUjJQUWFkblBWRnJ3SHQxTTZRWVdUTGV1akxLTWM0dHN0RUdGCmNvRzJDSElHM0VETmp2NFdUQUo4aVVrc2hBUDZWT05qUlFxZmh3bzQvS21CTFB0NzU1VHd6Z3daQmtUOFdpai8KeHZkQUpjOWpZWmlmTjN0eU1BL29xSXhDOHV0aEk4STNuWmhVSUdiN0k5VjdYVG5zV2dEbVdUWlVzWmJOOEtlYwpPbEZQQXVJdVVTUzd4ejBVZWdxK050eWRhdmEyZ2lZbEVKNXRMSWVMZDV2TEFtUGh1dDRHYUJ3MjZBN2tUYVF4CjhGTTYvaDNhSC9vbU1iamJLN0xUSDlwOG1rZXRLMll0UTYvRDBVY0NMQm5Vang2Sk9TVjhEdk51NkZobTM5UWgKdkRSYjBYZW1nTHZ4WW9FNTE1Q09BVFFnZXFLQWt3MG54UnIxQndJREFRQUJBb0lCQUFjTUdkY1VqUjlYZ1NKNQo0VG1DNy8yWTRUUVQ3R0poZnBYWnlkWnZWZGRmYVExVVV1Zzc4dWM1cnRNSEpnT21KVEVzRjdzM1JhcVVqVUtzCjhzRk12UmtIYVZ0Wk5saVFMalROT3U2VXdwWGdOUTlCODEvUlpJMFdKQWs1YzJFMFR5OWFML3dJSU1ab054Q3oKRklIeDU3aXN6cjZFSjZOcUZMa2d0K0pkb2NxZ3p1ZWhVYWpha3g1SURlRS9ySE03QzF6NEhyQzcrVE9EYlRWTwpvdUdkRlE0Y3ZuWE1GbkNnYkNZRkNlSmlhcXdFMHFNa0Q3aVArVTVIb1BjMFdHL1g4QnR1QVNLcUNuQTZNdlNxCmVSQXNYMGRNQjAyZWRjL2ZpV0xQcXYvZllJdm5mbEp4Uzl3cTZicjlhbE11VEZLWU1QVVJ5TkkybUpRWmhkSDAKOFBBUkp1RUNnWUVBNm54YTFHN3NBZWFCcmdNdlV0NmZnMXlPVHIycmVxU25CMGdoWWNoQ0gyUWVtbXA2K05SeAo2Z09XVkVyNjJWY29zZUF5RjFpeTJJTVRnVWRSNWlwNDd6cVMvTEZDQlZULzFnRUtXbUozeStBNStRSCtsdjVjClF3Y0Evc3pWMVBFbEtSTEF2UlpzYW5IbG5CQ2hCOFJSVG15SmxvamRoM0gzN3hIVnJudVNpSDBDZ1lFQXhLaVkKaUhubVRXeTc4VEtsWFcrbnNSQmJ1SGxUU2ZiNDhxWGRtdXUxZjJMSjdzejVRbFV5bHRLMzdoUHFKV2tERmhOUgpFYjVsZlduR0lRellOZ1pwM0czckVFWlhRZTFhc1ZhTCtjRWdENG11aGdFeHFaQTVqOWlUdkFHVUxKdTlOQVhUClExcHI1Wm4yODUwc0lxTzZKZ0FldlkrUGJnZ09ucnh5c1JsbUx0TUNnWUFWWlZ0MFh0cXlJYkpiaW5iYS9PMVoKTXl6WkNuMkhKMWNHVnhLVXRZMHpDQk95eTF5RkwvMWsrUWJTa2pUcGVBYUNsSTU5aXQ1bTJ5OEFjTjJNUHZ2aAorRnBKTEhOMXdSZkhFems2bmhtSVJPR0ZVeVZENmRuSlUrNUhVYkdCU0srM1c3cXloa1ZHUVRaT1UwWWVTMCtQCjlGOXBtUHQ5ekd4dktCVnpZbHN3a1FLQmdFTFN1d25jeWZuVEVjV3luT2d6OFhwRUFiYWNXMFhOeXVmQW5wMXUKckh4OWwvb3g0aHk5RUhTWlkzQmRpZmx1Um1NdzZ5SXBYUmtSWVFhSDg4dmZ3QWJydnEwSUNjeFlGN0ljbzNHWgpRd2lra3czcngvRkRGWndnVG9yYXludWg2OWVLaHkvaXdMa0M2UnY4Y3l2T0VJbXJEc2NBeWc3c1kvTmlPMktjCks5R0xBb0dBU3JyVjhwdlNjRkUwRnpmMHM4NDlicXRkaERyY0xPMnJRYlFlWWFIa1RhbHpyQ3RJYTE1cTE2a20KYlR2NUEwVUZWdzEwY1NZSFJuQ2wwQ0p5YUlISFgzcnFSMUc4UGFOc0VaOTFpWDZ0SnN1akE0c2NubklrT0I3ZwpWZzlEbDd0MWJLU0c5Mms1VHpLZFM1YVBoc0R5aGUwYXZiTmFqMmJsYXZNOFNtdEN4VXc9Ci0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCg==
kind: Secret
root@master001:~/Chapter07# kubectl get configmap fortune-config -o yaml
apiVersion: v1
data:
  my-nginx-config.conf: |
    server {
        listen              80;
        server_name         www.kubia-example.com;

        gzip off;
        gzip_types text/plain application/xml;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

    }
  sleep-interval: |
    25

 

StringData ํ•„๋“œ ์†Œ๊ฐœ

์‹œํฌ๋ฆฟ ๊ฐ’์€ string data ํ•„๋“œ๋กœ ์„ค์ •ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

StringData ํ•„๋“œ๋Š” ์“ฐ๊ธฐ ์ „์šฉ์œผ๋กœ, ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

7.5.5 ํŒŒ๋“œ์—์„œ ์‹œํฌ๋ฆฟ ์‚ฌ์šฉํ•˜๊ธฐ

์ธ์ฆ์„œ์™€ ํ‚ค ํŒŒ์ผ์„ ๋ชจ๋‘ ํฌํ•จํ•˜๋Š” fortune-https ์‹œํฌ๋ฆฟ์„ Nginx์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•œ๋‹ค.

  my-nginx-config.conf: |
    server {
        listen              80;
        listen              443;
        server_name         www.kubia-example.com;

        # ๊ฐ ๊ฒฝ๋กœ๋Š” /etc/nginx ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์›น์„œ๋ฒ„๊ฐ€ ์ธ์ฆ์„œ ๋ฐ ํ‚คํŒŒ์ผ์„ /etc/nginx/certs ์—์„œ ์ฝ๋„๋ก ํ•œ๋‹ค.
        ssl_certificate       certs/https.cert;
        ssl_certificate_key   certs/https.key;
        ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers           HIGH:!aNULL:!MD5;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }

    }

Secret ๋ณผ๋ฅจ์„ /etc/nginx/cers ๊ฒฝ๋กœ์— ๋งˆ์šดํŠธํ•œ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: fortune-https
spec:
  containers:
    ...
    - image: nginx:alpine
      name: web-server
      volumeMounts:
        - name: config
          mountPath: /etc/nginx/conf.d
          readOnly: true
        # ์ธ์ฆ์„œ ๋ฐ ํ‚ค ํŒŒ์ผ์„ ์ฝ๋Š” ๊ฒฝ๋กœ์— ์‹œํฌ๋ฆฟ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธ
        - name: certs
          mountPath: /etc/nginx/certs/
          readOnly: true
      ...
  volumes:
    - name: config
      configMap:
        name: fortune-config
        items:
          - key: my-nginx-config.conf
            path: https.conf
    # fortune-https ์‹œํฌ๋ฆฟ์„ ์ฐธ์กฐํ•˜๋„๋ก ์‹œํฌ๋ฆฟ ๋ณผ๋ฅจ์„ ์ •์˜
    - name: certs
      secret:
        secretName: fortune-https

์ปจํ”ผ๊ทธ๋ƒ…๊ณผ ์‹œํฌ๋ฆฟ์„ ๊ฒฐํ•ฉํ•ด fortune-https ํŒŒ๋“œ ์‹คํ–‰

์™œ ์‹œํฌ๋ฆฟ ๋ณผ๋ฅจ์€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š”๊ฐ€?

secret ๋ณผ๋ฅจ์€ ์ธ๋ฉ”๋ชจ๋ฆฌ ํŒŒ์ผ์‹œ์Šคํ…œ tempfs๋ฅผ ์‚ฌ์šฉํ•ด ์ €์žฅ๋œ๋‹ค.

tmpfs๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅํ•˜๊ธฐ ์•Š์•„ ์™ธ๋ถ€๋กœ์˜ ๋…ธ์ถœ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

root@master001:~/Chapter07# kubectl exec fortune-https -c web-server -- mount | grep certs
tmpfs on /etc/nginx/certs type tmpfs (ro,relatime)

 

7.5.6 ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹œํฌ๋ฆฟ

์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๊ฐ€ ํ”„๋ผ์ด๋น— ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์žˆ์œผ๋ฉด ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค๋Š” ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๋ฐ ํ•„์š”ํ•œ ์ž๊ฒฉ์ฆ๋ช…์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

ํ”„๋ผ์ด๋น— ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” pod๋ฅผ ์‹คํ–‰ํ•˜๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.

  1. ๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์ž๊ฒฉ์ฆ๋ช… ๊ฐ€์ง„ ์‹œํฌ๋ฆฟ ์ƒ์„ฑ
  2. ํŒŒ๋“œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ ์•ˆ์— imagePullSecrets ํ•„๋“œ์— ํ•ด๋‹น ์‹œํฌ๋ฆฟ ์ฐธ์กฐ

๋„์ปค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ํ˜•์‹์˜ ์‹œํฌ๋ฆฟ ์ƒ์„ฑ

root@master001:~/Chapter07# kubectl create secret docker-registry mydockerhubsecret \
>   --docker-username=myusername --docker-password=mypassword \
>   --docker-email=my.email@provider.com
secret/mydockerhubsecret created


root@master001:~/Chapter07# kubectl describe secrets mydockerhubsecret
Name:         mydockerhubsecret
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/dockerconfigjson

pod ์˜ yaml ํŒŒ์ผ์— ํ•ด๋‹น ์‹œํฌ๋ฆฟ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•œ๋‹ค.

apiVersion: v1
kind: Pod
metadata:
  name: private-pod
spec:
  # ํ”„๋ผ์ด๋น— ์ด๋ฏธ์ง€ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์—์„œ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๋„๋ก ์„ค์ •
  imagePullSecrets:
    - name: mydockerhubsecret
  containers:
    - image: username/private:tag
      name: main

์ด๋กœ์จ private registry์— ์žˆ๋Š” ์ด๋ฏธ์ง€๋ฅผ pull ํ•ด ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.