Istio API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒŒ์ดํŠธ์›จ์ด ์„ค์น˜ ๋ฐ ์—…๊ทธ๋ ˆ์ด๋“œ

Cloud Service Mesh๋Š” ์„œ๋น„์Šค ๋ฉ”์‹œ์˜ ์ผ๋ถ€๋กœ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌ ๋ฐ ๊ด€๋ฆฌํ•˜๋Š” ์˜ต์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ๋ฉ”์‹œ์˜ ์—์ง€์—์„œ ์ž‘๋™ํ•˜๊ณ  ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋‚˜๊ฐ€๋Š” HTTP/TCP ์—ฐ๊ฒฐ์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ๊ธฐ๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ฃผ๋กœ ์ธ๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ ๋‹ค๋ฅธ ์œ ํ˜•์˜ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•˜๋„๋ก ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ด๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด: ์ด๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์—์„œ ๋‚˜๊ฐ€๋Š” ํŠธ๋ž˜ํ”ฝ์˜ ์ „์šฉ ์ถœ๊ตฌ ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์ œํ•œํ•˜๊ฑฐ๋‚˜ ์ด๊ทธ๋ ˆ์Šค ํŠธ๋ž˜ํ”ฝ์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์˜ˆ: ๋ฉ”์‹œ์— ๋ณด์•ˆ ์ถ”๊ฐ€).

  • ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด: ์ธ๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋“ค์–ด์˜ค๋Š” HTTP/TCP ์—ฐ๊ฒฐ์„ ์ˆ˜์‹ ํ•˜๋Š” ์ „์šฉ ์ง„์ž… ๋…ธ๋“œ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • East-west ๊ฒŒ์ดํŠธ์›จ์ด: ์„œ๋น„์Šค ์›Œํฌ๋กœ๋“œ๊ฐ€ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ์˜ ๋ฉ€ํ‹ฐ ๊ธฐ๋ณธ ๋ฉ”์‹œ์˜ ํด๋Ÿฌ์Šคํ„ฐ ๊ฒฝ๊ณ„๋ฅผ ๋„˜์–ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” east-west ํŠธ๋ž˜ํ”ฝ์˜ ํ”„๋ก์‹œ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ์ธํ„ฐ๋„ท์— ๊ณต๊ฐœ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œ๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๊ณ ์œ ํ•œ istio-ingressgateway ๋ฐ istio-egressgateway ๊ฒŒ์ดํŠธ์›จ์ด ํ”„๋ก์‹œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์˜ˆ์‹œ์— ๋Œ€ํ•œ ๊ถŒ์žฅ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

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

๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ๊ถŒ์žฅ์‚ฌํ•ญ

๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ๊ถŒ์žฅ์‚ฌํ•ญ์€ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ๋˜๋Š” ๋น„๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ๊ถŒ์žฅ์‚ฌํ•ญ

  1. ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ด€๋ฆฌํ˜• ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  3. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  4. ๋ณด์•ˆ ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  5. ์ž๋™ ์‚ฌ์ด๋“œ์นด ์‚ฝ์ž…(์ž๋™ ์‚ฝ์ž…)์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์Šทํ•œ ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ์žฅ์‚ฌํ•ญ์„ ๋”ฐ๋ผ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ตœ์‹  ๊ฐœ์„ ์‚ฌํ•ญ ๋ฐ ๋ณด์•ˆ ์—…๋ฐ์ดํŠธ๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ˜• ๊ฒŒ์ดํŠธ์›จ์ด์˜ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์ดํŠธ์›จ์ด ์ธ์Šคํ„ด์Šค์˜ ๊ด€๋ฆฌ ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ Cloud Service Mesh ๊ด€๋ฆฌ ๋ฐ์ดํ„ฐ ์˜์—ญ์œผ๋กœ ์˜คํ”„๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ ์˜์—ญ ๊ถŒ์žฅ์‚ฌํ•ญ

  1. ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ๊ณผ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ณด์•ˆ ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ๋‹ค๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.
  3. ์ž๋™ ์‚ฌ์ด๋“œ์นด ์‚ฝ์ž…(์ž๋™ ์‚ฝ์ž…)์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋น„์Šทํ•œ ๊ฒŒ์ดํŠธ์›จ์ด์— ๋Œ€ํ•ด ํ”„๋ก์‹œ ๊ตฌ์„ฑ์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

๊ถŒ์žฅ์‚ฌํ•ญ์„ ๋”ฐ๋ผ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ์ž๊ฐ€ ๊ถŒํ•œ์„ ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ๋กœ ์Šน๊ฒฉํ•  ํ•„์š” ์—†์ด ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž๊ฐ€ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฐํฌ ๋„๊ตฌ ๋˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ œ์–ดํ•˜๋„๋ก ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•˜๊ณ  ์ž‘์—…์„ ๊ฐ„์†Œํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์œผ๋ฉด ๊ด€๋ฆฌ์ž๊ฐ€ ๊ฒŒ์ดํŠธ์›จ์ด ํฌ๋“œ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ๋ฅผ ์ž‘๋™ํ•˜๋Š” ํ™˜๊ฒฝ์ด ์„œ๋น„์Šค์— ๋Œ€ํ•ด ์‚ฌ์ด๋“œ์นด ํ”„๋ก์‹œ๋ฅผ ์ž‘๋™ํ•˜๋Š” ํ™˜๊ฒฝ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ƒ˜ํ”Œ ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ

๊ธฐ์กด ๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•ด Cloud Service Mesh์—์„œ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ Istio๋กœ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๋ฐฉ๋ฒ•์ธ IstioOperator, Helm, Kubernetes YAML์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๋ฐฉ๋ฒ•์€ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆ˜์ •์ด ์‰ฝ๊ณ  ์†Œ์Šค ์ œ์–ด์— ํ•˜์ด๋“œ๋ ˆ์ด์…˜๋œ ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ Kubernetes YAML ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„์—์„œ๋Š” ์ƒ˜ํ”Œ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

  1. ์•„์ง ์—†์œผ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. GATEWAY_NAMESPACE๋ฅผ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    kubectl create namespace GATEWAY_NAMESPACE
    
  2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์‚ฝ์ž…์„ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„๋Š” ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

    ๊ด€๋ฆฌํ˜•(TD)

    1. ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubectl label namespace GATEWAY_NAMESPACE \
        istio.io/rev- istio-injection=enabled --overwrite
    

    ๊ด€๋ฆฌํ˜•(Istiod)

    ๊ถŒ์žฅ: ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

      kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    ๊ด€๋ฆฌํ˜• Istiod ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์žˆ๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž: ๊ธฐ๋ณธ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ๋ฒ„์ „ ๊ธฐ๋ฐ˜ ์‚ฝ์ž…์€ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

      kubectl -n istio-system get controlplanerevision
      

      ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

      NAME                AGE
      asm-managed-rapid   6d7h
      

      ์ฐธ๊ณ : ์œ„ ๋ชฉ๋ก์— ๋‘ ๊ฐœ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์ด ํ‘œ์‹œ๋˜๋ฉด ํ•˜๋‚˜๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ์— ์—ฌ๋Ÿฌ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์ฑ„๋„์„ ๋‘๋Š” ๋ฐฉ์‹์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

      ์ถœ๋ ฅ์—์„œ NAME ์—ด ์•„๋ž˜์˜ ๊ฐ’์€ Cloud Service Mesh ๋ฒ„์ „์— ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ถœ์‹œ ์ฑ„๋„์— ํ•ด๋‹นํ•˜๋Š” ๋ฒ„์ „ ๋ผ๋ฒจ์ž…๋‹ˆ๋‹ค.

    2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

      kubectl label namespace GATEWAY_NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด

    ๊ถŒ์žฅ: ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๊ธฐ๋ณธ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

      kubectl label namespace GATEWAY_NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    ๊ธฐ๋ณธ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€๋งŒ ๋ฒ„์ „ ๊ธฐ๋ฐ˜ ์‚ฝ์ž…์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์•ˆ๋‚ด๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

    1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ istiod์—์„œ ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ฐพ์Šต๋‹ˆ๋‹ค.

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. ๋„ค์ž„์ŠคํŽ˜์ด์Šค์— ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ REVISION_LABEL์€ ์ด์ „ ๋‹จ๊ณ„์—์„œ ํ™•์ธํ•œ istiod ๋ฒ„์ „ ๋ผ๋ฒจ์˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

      kubectl label namespace GATEWAY_NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      
  3. anthos-service-mesh ์ €์žฅ์†Œ์—์„œ ์ƒ˜ํ”Œ ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  4. ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ samples ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด ls ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ฝ˜ํ…์ธ ๋ฅผ ๋‚˜์—ดํ•œ ํ›„ ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ์•ก์„ธ์Šคํ•  gateways ๋””๋ ‰ํ„ฐ๋ฆฌ์™€ online-boutique ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  5. ์ธ๊ทธ๋ ˆ์Šค ๋˜๋Š” ์ด๊ทธ๋ ˆ์Šค ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค. samples/gateways/ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์žˆ๋Š” ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ํ•„์š”์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ธ๊ทธ๋ ˆ์Šค

    kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-ingressgateway
    

    ์ด๊ทธ๋ ˆ์Šค

    kubectl apply -n GATEWAY_NAMESPACE -f samples/gateways/istio-egressgateway
    
  6. ๋ฐฐํฌ๋ฅผ ๋งŒ๋“  ํ›„์— ์ƒˆ ์„œ๋น„์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    kubectl get pod,service -n GATEWAY_NAMESPACE
    

    ์ถœ๋ ฅ์ด ๋‹ค์Œ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    NAME                                      READY   STATUS    RESTARTS   AGE
    pod/istio-ingressgateway-856b7c77-bdb77   1/1     Running   0          3s
    
    NAME                           TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)        AGE
    service/istio-ingressgateway   LoadBalancer   10.24.5.129    34.82.157.6      80:31904/TCP   3s

๋‹ค๋ฅธ Kubernetes ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ฒ˜๋Ÿผ ๊ฒŒ์ดํŠธ์›จ์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. anthos-service-mesh-packages ์ €์žฅ์†Œ์˜ ์ƒ˜ํ”Œ์€ ์•ˆ๋‚ด ๋ฐ ๋น ๋ฅธ ์‹œ์ž‘์šฉ์ž…๋‹ˆ๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ๋งž์ถค์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์„ ํƒ๊ธฐ

istio-ingressgateway ๋ฐ istio-egressgateway ํ”„๋ก์‹œ์— ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ฉด ์–ด๋–ค ํŠธ๋ž˜ํ”ฝ์„ ๋ฉ”์‹œ๋กœ ๋ณด๋‚ด๊ณ  ๋‚ด๋ณด๋‚ผ์ง€ ์ง€์ •ํ•˜์—ฌ ๋ฉ”์‹œ์˜ ์ธ๋ฐ”์šด๋“œ ๋ฐ ์•„์›ƒ๋ฐ”์šด๋“œ ํŠธ๋ž˜ํ”ฝ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ํฌ๋“œ์˜ ๋ผ๋ฒจ์€ ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ ๋ฆฌ์†Œ์Šค์—์„œ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ ๊ฒŒ์ดํŠธ์›จ์ด ์„ ํƒ๊ธฐ๊ฐ€ ์ด๋Ÿฌํ•œ ๋ผ๋ฒจ๊ณผ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์•ž์„  ๋ฐฐํฌ์—์„œ istio=ingressgateway ๋ผ๋ฒจ์€ ๊ฒŒ์ดํŠธ์›จ์ด ํฌ๋“œ์— ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฐํฌ์— ๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋™์ผํ•œ ๋ผ๋ฒจ์„ ์„ ํƒํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
  name: gateway
spec:
  selector:
    istio: ingressgateway
...

๊ฒŒ์ดํŠธ์›จ์ด ๊ตฌ์„ฑ ๋ฐ ๊ฐ€์ƒ ์„œ๋น„์Šค ์˜ˆ์‹œ๋Š” Online Boutique ์ƒ˜ํ”Œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ frontend.yaml์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๊ฒŒ์ดํŠธ์›จ์ด ์—…๊ทธ๋ ˆ์ด๋“œ

์ธํ”Œ๋ ˆ์ด์Šค ์—…๊ทธ๋ ˆ์ด๋“œ

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€์—์„œ๋Š” ์ธํ”Œ๋ ˆ์ด์Šค ์—…๊ทธ๋ ˆ์ด๋“œ ํŒจํ„ด์— ๋”ฐ๋ผ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด๋Š” ํฌ๋“œ ์‚ฝ์ž…์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ, ์ƒ์„ฑ๋œ ์ƒˆ ๊ฒŒ์ดํŠธ์›จ์ด ํฌ๋“œ๋Š” ๋ฒ„์ „์„ ํฌํ•จํ•˜๋Š” ์ตœ์‹  ๊ตฌ์„ฑ์œผ๋กœ ์ž๋™ ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ์—์„œ istio.io/rev ๋ผ๋ฒจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ˆœ์ฐจ์  ์žฌ์‹œ์ž‘๋„ ํŠธ๋ฆฌ๊ฑฐ๋ฉ๋‹ˆ๋‹ค.

๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ

Google์—์„œ ๊ด€๋ฆฌํ˜• ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์˜ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฏ€๋กœ ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ์ตœ์‹  ๊ตฌ์„ฑ๊ณผ ๋ฒ„์ „์˜ ์ƒˆ ํฌ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์‚ฝ์ž…๋ฉ๋‹ˆ๋‹ค.

kubectl rollout restart deployment istio-ingressgateway \
  -n GATEWAY_NAMESPACE

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์ด ์žˆ์„ ๋•Œ ๊ฒŒ์ดํŠธ์›จ์ด์— ๋™์ผํ•œ ํŒจํ„ด์„ ์ ์šฉํ•˜๋ ค๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ์—์„œ ์ˆœ์ฐจ์  ์žฌ์‹œ์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๋Š” istio.io/rev ๋ผ๋ฒจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ํ•„์š”ํ•œ ๋‹จ๊ณ„๋Š” ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋˜๋Š” ๊ฒŒ์ดํŠธ์›จ์ด ํฌ๋“œ์˜ ๋ฒ„์ „ ๋ผ๋ฒจ์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•˜๋Š”์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ ์‚ฝ์ž… ๋ผ๋ฒจ์„ ์ง€์ •ํ•œ ๊ฒฝ์šฐ ๋„ค์ž„์ŠคํŽ˜์ด์Šค์˜ istio.io/rev ๋ผ๋ฒจ์„ ์ƒˆ ๋ฒ„์ „ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

      kubectl label namespace GATEWAY_NAMESPACE \
        istio-injection- istio.io/rev=REVISION \
        --overwrite
    
  • ๊ฒŒ์ดํŠธ์›จ์ด ํฌ๋“œ์—๋งŒ ์‚ฝ์ž…์„ ์‚ฌ์šฉ ์„ค์ •ํ•œ ๊ฒฝ์šฐ ๋ฐฐํฌ์˜ istio.io/rev ๋ผ๋ฒจ์„ ๋‹ค์Œ Kubernetes YAML ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์ƒˆ ๋ฒ„์ „ ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    cat <<EOF > gateway-deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: istio-ingressgateway
      namespace: GATEWAY_NAMESPACE
    spec:
      selector:
        matchLabels:
          istio: ingressgateway
      template:
        metadata:
          annotations:
            # This is required to tell Cloud Service Mesh to inject the gateway with the
            # required configuration.
            inject.istio.io/templates: gateway
          labels:
            istio: ingressgateway
            istio.io/rev: REVISION
        spec:
          containers:
          - name: istio-proxy
            image: auto # The image will automatically update each time the pod starts.
    EOF
    
    kubectl apply -f gateway-deployment.yaml
    

์นด๋‚˜๋ฆฌ์•„ ์—…๊ทธ๋ ˆ์ด๋“œ(๊ณ ๊ธ‰)

ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ์„ ์‚ฌ์šฉ ์ค‘์ด๊ณ  ์ƒˆ ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๋ฒ„์ „์˜ ์ถœ์‹œ๋ฅผ ๋” ๋А๋ฆฌ๊ฒŒ ์ œ์–ดํ•˜๋ ค๋ฉด ์นด๋‚˜๋ฆฌ์•„ ์—…๊ทธ๋ ˆ์ด๋“œ ํŒจํ„ด์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์„ ์‹คํ–‰ํ•˜๊ณ  ํŠธ๋ž˜ํ”ฝ ์ผ๋ถ€์—์„œ ๋ชจ๋‘ ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ ๋ฒ„์ „์„ ์นด๋‚˜๋ฆฌ์•„๋กœ ์ถœ์‹œํ•˜๋ ค๋ฉด istio.io/rev=REVISION ๋ผ๋ฒจ์„ ์ƒˆ ๋ฒ„์ „ ๋ฐ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฒŒ์ดํŠธ์›จ์ด ๋ฐฐํฌ ๋ณต์‚ฌ๋ณธ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(์˜ˆ: istio-ingressgateway-canary).

apiVersion: apps/v1
kind: Deployment
metadata:
  name: istio-ingressgateway-canary
  namespace: GATEWAY_NAMESPACE
spec:
  selector:
    matchLabels:
      istio: ingressgateway
  template:
    metadata:
      annotations:
        inject.istio.io/templates: gateway
      labels:
        istio: ingressgateway
        istio.io/rev: REVISION # Set to the control plane revision you want to deploy
    spec:
      containers:
      - name: istio-proxy
        image: auto

์ด ๋ฐฐํฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ๋‘ ๊ฐ€์ง€ ๋ฒ„์ „์˜ ๊ฒŒ์ดํŠธ์›จ์ด๊ฐ€ ์ƒ๊ธฐ๊ณ , ๋‘ ๋ฒ„์ „์€ ๋ชจ๋‘ ๋™์ผํ•œ ์„œ๋น„์Šค์—์„œ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค.

kubectl get endpoints -o "custom-columns=NAME:.metadata.name,PODS:.subsets[*].addresses[*].targetRef.name"

NAME                   PODS
istio-ingressgateway   istio-ingressgateway-788854c955-8gv96,istio-ingressgateway-canary-b78944cbd-mq2qf

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์˜ˆ์ƒํ•œ ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ด์ „ istio.io/rev ๋ผ๋ฒจ์ด ์„ค์ •๋œ ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์ƒˆ ๋ฒ„์ „์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

kubectl delete deploy/istio-ingressgateway -n GATEWAY_NAMESPACE

์ƒˆ ๋ฒ„์ „์˜ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ…Œ์ŠคํŠธํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒˆ istio.io/rev ๋ผ๋ฒจ์ด ์„ค์ •๋œ ๋ฐฐํฌ๋ฅผ ์‚ญ์ œํ•˜์—ฌ ์ด์ „ ๋ฒ„์ „์œผ๋กœ ๋‹ค์‹œ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

kubectl delete deploy/istio-ingressgateway-canary -n GATEWAY_NAMESPACE

๊ณ ๊ธ‰ ๊ตฌ์„ฑ

๊ฒŒ์ดํŠธ์›จ์ด ์ตœ์†Œ TLS ๋ฒ„์ „ ๊ตฌ์„ฑ

Cloud Service Mesh์˜ ๊ฒฝ์šฐ ๊ฒŒ์ดํŠธ์›จ์ด ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ ์ตœ์†Œ TLS ๋ฒ„์ „์€ 1.2์ž…๋‹ˆ๋‹ค. minProtocolVersion ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œ TLS ๋ฒ„์ „์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ServerTLSSettings๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ง€์›๋˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ

TRAFFIC_DIRECTOR ์ปจํŠธ๋กค ํ”Œ๋ ˆ์ธ ๊ตฌํ˜„์ด ์žˆ์œผ๋ฉด ๊ฒŒ์ดํŠธ์›จ์ด์˜ ๋‹ค์Œ ํ•„๋“œ๋‚˜ ๊ฐ’์ด ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • AUTO_PASSTHROUGH ๊ฐ’์ด ์žˆ๋Š” ServerTLSSettings.TLSmode
  • ServerTLSSettings.verifyCertificateSpki
  • ServerTLSSettings.verifyCertificateHash

๊ฒŒ์ดํŠธ์›จ์ด ๋ฌธ์ œ ํ•ด๊ฒฐ

auto์—์„œ ๊ฒŒ์ดํŠธ์›จ์ด ์ด๋ฏธ์ง€ ์—…๋ฐ์ดํŠธ ์‹คํŒจ

๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด Cloud Service Mesh๊ฐ€ image ํ•„๋“œ์— auto๋ฅผ ์ž๋ฆฌํ‘œ์‹œ์ž๋กœ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€ํ˜• ์›นํ›… ํ˜ธ์ถœ ํ›„ Cloud Service Mesh๊ฐ€ ์ด ์ž๋ฆฌํ‘œ์‹œ์ž๋ฅผ ์‹ค์ œ Cloud Service Mesh ํ”„๋ก์‹œ ์ด๋ฏธ์ง€๋กœ ์ž๋™์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ์›นํ›… ๋ณ€ํ˜• ํ˜ธ์ถœ์ด ์‹คํŒจํ•˜๋ฉด auto ์ž๋ฆฌํ‘œ์‹œ์ž๊ฐ€ ์œ ์ง€๋˜๊ณ  ์ปจํ…Œ์ด๋„ˆ๋Š” ์—†์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž˜๋ชป๋œ ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๋ผ๋ฒจ์ด ์›์ธ์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ–ˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋‹ค์‹œ ๋ฐฐํฌํ•˜๊ฑฐ๋‚˜ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค.