Kubernetes: ๋Œ€์‹œ๋ณด๋“œ https ๋ฌด๋‹จ

์— ๋งŒ๋“  2016๋…„ 08์›” 30์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: kubernetes/kubernetes

๋Œ€์‹œ๋ณด๋“œ ๋ฒ„์ „: 1.1
์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๋ฒ„์ „: 1.3.6
์šด์˜ ์ฒด์ œ: ubuntu14.04
์ด๋™ ๋ฒ„์ „:1.6.2
http://kubernetes.io/docs/getting-started-guides/ubuntu/ ๋กœ kubernetes ๋ฐ ๋Œ€์‹œ๋ณด๋“œ ๋ฐฐํฌ

๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. http://master-ip :8080/
https://master-ip :6443/์— ์•ก์„ธ์Šคํ•˜๋ฉด "Unauthorized"๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
์™œ์š”?

areapiserver

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ HTTPS๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ํ†ต์‹ ์„ ์œ„ํ•ด ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฃจํŠธ CA๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐ์ด ์•ˆ์ „ํ•œ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์šฐํšŒํ•˜๊ณ  ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. :)
    zrzut ekranu z 2016-09-15 15-50-35
  2. API ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ/ํ† ํฐ/์‚ฌ์šฉ์ž ๋ฐ ์ „๋‹ฌ(๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Unauthorized ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— curl๋กœ ์‰ฝ๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
curl https://<MASTER_IP>/version --cacert ca.crt --cert admin.crt --key admin.key
curl https://<MASTER_IP>/version --header "Authorization: Bearer $TOKEN"`

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ณด๋‹ค ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. NodePort๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋…ธ์ถœํ•˜๊ณ  <MASTER_IP>:<NODE_PORT> ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์•ˆ์ „ํ•˜์ง€ ์•Š์Œ)
  2. ์ธ์ฆ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  3. kubectl proxy ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  http://127.0.0.1:8001/ ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ธ๋“œ ์ฃผ์†Œ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ). kubeconfig ํŒŒ์ผ์ด ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ SSL ํ„ฐ๋„๋ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์— ๋Œ€ํ•ด. ํŒŒ์ด์–ดํญ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ๋œ CA ์ธ์ฆ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    zrzut ekranu z 2016-09-15 16-05-47
  2. ์‚ฌ์šฉ์ž ์ธ์ฆ์„œ๋ฅผ Your Certificates ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. crt ๋ฐ key 2๊ฐœ์˜ ๋ณ„๋„ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์ธ์ฆ์„œ ์ €์žฅ์†Œ๋กœ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— PFX/PKCS#12 ์ธ์ฆ์„œ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€ ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ openssl ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    zrzut ekranu z 2016-09-15 16-09-44

์ธ์ฆ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ์— HTTPS๋ฅผ ํ†ตํ•ด API ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํŒ์—…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ง€์›Œ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
zrzut ekranu z 2016-09-15 16-12-04

์ด์ œ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :)
zrzut ekranu z 2016-09-15 16-14-16

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด๊ธฐ๋ช… ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. API ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— HTTP ํ—ค๋”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ์ˆ˜๋™ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ABAC, RBAC ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘๊ฐ€๊ฐ€ ์•„์ง ๊ณ ๋ คํ•˜์ง€ ์•Š์•˜์„ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
https://github.com/kubernetes/dashboard/issues/1116

ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ HTTPS๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ํ†ต์‹ ์„ ์œ„ํ•ด ์ธ์ฆ์„œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋ธŒ๋ผ์šฐ์ €๋Š” ๋ฃจํŠธ CA๋ฅผ ์ธ์‹ํ•˜์ง€ ๋ชปํ•˜๋ฏ€๋กœ ์—ฐ๊ฒฐ์ด ์•ˆ์ „ํ•œ์ง€ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์šฐํšŒํ•˜๊ณ  ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ์ฐจ๋‹จ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. :)
    zrzut ekranu z 2016-09-15 15-50-35
  2. API ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ/ํ† ํฐ/์‚ฌ์šฉ์ž ๋ฐ ์ „๋‹ฌ(๊ตฌ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Unauthorized ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— curl๋กœ ์‰ฝ๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
curl https://<MASTER_IP>/version --cacert ca.crt --cert admin.crt --key admin.key
curl https://<MASTER_IP>/version --header "Authorization: Bearer $TOKEN"`

๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ทธ๋ณด๋‹ค ๋” ๋ณต์žกํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. NodePort๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ํ†ตํ•ด ๋…ธ์ถœํ•˜๊ณ  <MASTER_IP>:<NODE_PORT> ๋กœ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์•ˆ์ „ํ•˜์ง€ ์•Š์Œ)
  2. ์ธ์ฆ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
  3. kubectl proxy ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  http://127.0.0.1:8001/ ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค(๋ฐ”์ธ๋“œ ์ฃผ์†Œ๋Š” ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ). kubeconfig ํŒŒ์ผ์ด ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋œ ๊ฒฝ์šฐ SSL ํ„ฐ๋„๋ง์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์— ๋Œ€ํ•ด. ํŒŒ์ด์–ดํญ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ƒ์„ฑ๋œ CA ์ธ์ฆ์„œ๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    zrzut ekranu z 2016-09-15 16-05-47
  2. ์‚ฌ์šฉ์ž ์ธ์ฆ์„œ๋ฅผ Your Certificates ๋กœ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. crt ๋ฐ key 2๊ฐœ์˜ ๋ณ„๋„ ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ € ์ธ์ฆ์„œ ์ €์žฅ์†Œ๋กœ ์ง์ ‘ ๊ฐ€์ ธ์˜ค๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— PFX/PKCS#12 ์ธ์ฆ์„œ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์Šต๋‹ˆ๋‹ค. ์ด ํŽ˜์ด์ง€ ๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ openssl ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    zrzut ekranu z 2016-09-15 16-09-44

์ธ์ฆ์„œ๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด ๋‹ค์Œ์— HTTPS๋ฅผ ํ†ตํ•ด API ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ ํŒ์—…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ์บ์‹œ๋ฅผ ์ง€์›Œ์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.
zrzut ekranu z 2016-09-15 16-12-04

์ด์ œ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ โ€‹โ€‹ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. :)
zrzut ekranu z 2016-09-15 16-14-16

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฌด๊ธฐ๋ช… ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. API ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์ „์— HTTP ํ—ค๋”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ์•ฝ๊ฐ„์˜ ์ˆ˜๋™ ์ž‘์—…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๋Š” ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. Kubernetes๋Š” ABAC, RBAC ๋“ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๋ธŒ๋ผ์šฐ์ €๋Š” ๋ณด์•ˆ API ์„œ๋ฒ„ ํฌํŠธ์— ์ ‘๊ทผํ•  ๋•Œ ์ธ์ฆ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. https://github.com/kubernetes/kubernetes/issues/31665#issuecomment -247342834์—์„œ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ์ธ์ฆ์„œ ๊ธฐ๋ฐ˜ ์ธ์ฆ์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ† ํฐ ๊ธฐ๋ฐ˜ ์ธ์ฆ์˜ ๊ฒฝ์šฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ์ „๋‹ฌ์ž ํ† ํฐ์„ ์ž๋™์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋Œ€์‹œ๋ณด๋“œ๋Š” ์ธ์ฆ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ถ”๊ฐ€ํ•˜๊ณ  ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ๋กœ์ปฌ๋กœ ๋Œ€์‹œ๋ณด๋“œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š” kubectl proxy ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค( https://github.com/kubernetes/dashboard#usage ).

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰