์šด์˜ ๊ฐ€์ด๋“œ

์ด ํŽ˜์ด์ง€๋Š” Apigee ๋ฐ Apigee Hybrid์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Apigee Edge ๋ฌธ์„œ ๋ณด๊ธฐ

API ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•

๋‹ค์Œ ์˜ˆ์‹œ์—์„œ๋Š” Envoy์šฉ Apigee ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ํ”„๋ก์‹œ๋œ ๋Œ€์ƒ ์„œ๋น„์Šค์— ๋Œ€ํ•œ API ํ˜ธ์ถœ์„ ๊ฒ€์ฆํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API ํ‚ค๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

1. Apigee์— ๋กœ๊ทธ์ธ

  1. ๋ธŒ๋ผ์šฐ์ €์—์„œ Apigee UI๋ฅผ ์—ฝ๋‹ˆ๋‹ค.
  2. UI์—์„œ Envoy์šฉ Apigee ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ์กฐ์ง๊ณผ ๋™์ผํ•œ ์กฐ์ง์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

2. ๊ฐœ๋ฐœ์ž ๋งŒ๋“ค๊ธฐ

๊ธฐ์กด ๊ฐœ๋ฐœ์ž๋ฅผ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ƒˆ ๊ฐœ๋ฐœ์ž๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ธก๋ฉด ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๊ฒŒ์‹œ > ๊ฐœ๋ฐœ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. + Developer๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒˆ ๊ฐœ๋ฐœ์ž๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ๋Œ€ํ™”์ƒ์ž๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์›ํ•˜๋Š” ๋ชจ๋“  ๊ฐœ๋ฐœ์ž ์ด๋ฆ„/์ด๋ฉ”์ผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. API ์ œํ’ˆ ๋งŒ๋“ค๊ธฐ

์•„๋ž˜์— ์ œ๊ณต๋œ ์ œํ’ˆ ๋งŒ๋“ค๊ธฐ ์˜ˆ์‹œ๋ฅผ ๋”ฐ๋ฅด์„ธ์š”. API ์ œํ’ˆ ๊ตฌ์„ฑ ์ •๋ณด๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

  1. ์ธก๋ฉด ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๊ฒŒ์‹œ > API ์ œํ’ˆ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œํ’ˆ ์„ธ๋ถ€์ •๋ณด ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋‚ด๋˜๊ธฐ ์ „๊นŒ์ง€ ์ €์žฅ์„ ํด๋ฆญํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
    ํ•„๋“œ ๊ฐ’
    ์ด๋ฆ„ httpbin-product
    ํ‘œ์‹œ ์ด๋ฆ„ httpbin product
    ํ™˜๊ฒฝ your_environment

    apigee-remote-service-cli๋กœ Envoy์šฉ Apigee ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ”„๋กœ๋น„์ €๋‹ํ•  ๋•Œ ์‚ฌ์šฉํ•œ ํ™˜๊ฒฝ์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ์•ก์„ธ์Šค Private
    ํ• ๋‹น๋Ÿ‰ 1๋ถ„๋งˆ๋‹ค ์š”์ฒญ 5๊ฐœ

    API ์ œํ’ˆ์— ๋Œ€ํ•œ ์ •๋ณด๋„ ์ฐธ์กฐํ•˜์„ธ์š”.

  4. ๋งž์ถค ์†์„ฑ ์„น์…˜์—์„œ +๋งž์ถค ์†์„ฑ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  5. ๋‹ค์Œ ์ด๋ฆ„/๊ฐ’ ์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ด๋ฆ„: apigee-remote-service-targets ์†์„ฑ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
    • ๊ฐ’: ๋Œ€์ƒ ์„œ๋น„์Šค ์ด๋ฆ„์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ: httpbin.org
  6. ํ™•์ธ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. ์ €์žฅ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

4. ๊ฐœ๋ฐœ์ž ์•ฑ ๋งŒ๋“ค๊ธฐ

  1. ์ธก๋ฉด ํƒ์ƒ‰ ๋ฉ”๋‰ด์—์„œ ๊ฒŒ์‹œ > ์•ฑ์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. +์•ฑ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  3. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐœ๋ฐœ์ž ์•ฑ ํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ์•ˆ๋‚ด๋˜๊ธฐ ์ „๊นŒ์ง€ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. ์ด๋ฆ„ httpbin-app
    ํ‘œ์‹œ ์ด๋ฆ„ httpbin app
    ๊ฐœ๋ฐœ์ž ์ด์ „์— ๋งŒ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋ชฉ๋ก์—์„œ ์›ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  5. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด ์„น์…˜์—์„œ + ์ œํ’ˆ ์ถ”๊ฐ€๋ฅผ ํด๋ฆญํ•˜๊ณ  ๋ฐฉ๊ธˆ ๊ตฌ์„ฑํ•œ ์ œํ’ˆ httpbin-product๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  6. ๋งŒ๋“ค๊ธฐ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  7. ์‚ฌ์šฉ์ž ์ธ์ฆ ์ •๋ณด์—์„œ ํ‚ค ์˜†์— ์žˆ๋Š” ํ‘œ์‹œ๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  8. ๊ณ ๊ฐ ํ‚ค์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ httpbin ์„œ๋น„์Šค์— API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  API ํ‚ค์ž…๋‹ˆ๋‹ค.

API ์ œํ’ˆ ์ •๋ณด

API ์ œํ’ˆ์€ Apigee ์›๊ฒฉ ์„œ๋น„์Šค์˜ ๊ธฐ๋ณธ ์ œ์–ด ์ง€์ ์ž…๋‹ˆ๋‹ค. API ์ œํ’ˆ์„ ๋งŒ๋“ค๊ณ  ๋Œ€์ƒ ์„œ๋น„์Šค์— ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒฝ์šฐ Envoy์šฉ Apigee ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ์š”์ฒญ์— ์ ์šฉ๋˜๋Š” ์ •์ฑ…์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

API ์ œํ’ˆ ์ •์˜

Apigee์—์„œ API ์ œํ’ˆ์„ ์ •์˜ํ•  ๋•Œ ์š”์ฒญ์„ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ
  • ์š”์ฒญ ๊ฒฝ๋กœ
  • ํ• ๋‹น๋Ÿ‰
  • OAuth ๋ฒ”์œ„

์›๊ฒฉ ์„œ๋น„์Šค ๋Œ€์ƒ

์š”์ฒญ์ด ๋Œ€์ƒ ๊ฒฐํ•ฉ(์˜ˆ: httpbin.org)๊ณผ ์š”์ฒญ ๊ฒฝ๋กœ(์˜ˆ: /httpbin)์™€ ์ผ์น˜ํ•˜๋Š” ๊ฒฝ์šฐ API ์ œํ’ˆ ์ •์˜๊ฐ€ ์š”์ฒญ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ž ์žฌ์  ๋Œ€์ƒ์˜ ๋ชฉ๋ก์€ API ์ œํ’ˆ์— ์†์„ฑ์œผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ Apigee ์›๊ฒฉ ์„œ๋น„์Šค๋Š” Envoy์˜ ํŠน๋ณ„ํ•œ :authority (host) ํ—ค๋”๋ฅผ ๋Œ€์ƒ ๋ชฉ๋ก๊ณผ ๋น„๊ตํ•˜์—ฌ ํ™•์ธํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ—ค๋”๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

API ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ

์ž…๋ ฅ๋œ ๊ฒฝ๋กœ๊ฐ€ ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ์ผ์น˜๋ฉ๋‹ˆ๋‹ค.

  • ๋‹จ์ผ ์Šฌ๋ž˜์‹œ(/)๋Š” ๋‹จ๋…์œผ๋กœ ๋ชจ๋“  ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • *์€ ์–ด๋””์„œ๋‚˜ ์œ ํšจํ•˜๊ณ  ์„ธ๊ทธ๋จผํŠธ ๋‚ด์—์„œ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค(์Šฌ๋ž˜์‹œ ๊ฐ„).
  • **์€ ๋์—์„œ ์œ ํšจํ•˜๋ฉฐ ์ค„ ๋์˜ ๋ชจ๋“  ํ•ญ๋ชฉ๊ณผ ์ผ์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ• ๋‹น๋Ÿ‰

ํ• ๋‹น๋Ÿ‰์€ ์•ฑ์ด ์‹œ๊ฐ„, ์ผ, ์ฃผ ๋˜๋Š” ์›” ๋‹จ์œ„๋กœ API์— ์ œ์ถœํ•  ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ๋ฉ”์‹œ์ง€ ์ˆ˜๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์•ฑ์ด ํ• ๋‹น๋Ÿ‰ ํ•œ๋„์— ๋„๋‹ฌํ•˜๋ฉด ํ›„์† API ํ˜ธ์ถœ์ด ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

ํ• ๋‹น๋Ÿ‰ ์‚ฌ์šฉ ์‚ฌ๋ก€

ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง€์ •๋œ ๊ธฐ๊ฐ„ ๋™์•ˆ ์„œ๋น„์Šค์— ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์š”์ฒญ ์ˆ˜๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ• ๋‹น๋Ÿ‰์€ ์šด์˜ ํŠธ๋ž˜ํ”ฝ ๊ด€๋ฆฌ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์ž ๋ฐ ํŒŒํŠธ๋„ˆ์™€์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๊ณ„์•ฝ ๋˜๋Š” SLA๋ฅผ ์‹œํ–‰ํ•˜๋Š” ๋ฐ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ• ๋‹น๋Ÿ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฌด๋ฃŒ ์„œ๋น„์Šค์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ œํ•œํ•˜๋ฉด์„œ ์œ ๋ฃŒ ๊ณ ๊ฐ์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ• ๋‹น๋Ÿ‰์€ API ์ œํ’ˆ์—์„œ ์ •์˜๋จ

ํ• ๋‹น๋Ÿ‰ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” API ์ œํ’ˆ์—์„œ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด API ์ œํ’ˆ์„ ๋งŒ๋“ค ๋•Œ ํ—ˆ์šฉ๋˜๋Š” ํ• ๋‹น๋Ÿ‰ ํ•œ๋„, ์‹œ๊ฐ„ ๋‹จ์œ„, ๊ฐ„๊ฒฉ์„ ์„ ํƒ์ ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Apigee UI์˜ ํ• ๋‹น๋Ÿ‰ ํ•œ๋„ ์„ค์ •>

API ํ‚ค๋Š” API ์ œํ’ˆ์— ๋‹ค์‹œ ๋งคํ•‘๋˜๋ฏ€๋กœ API ํ‚ค๊ฐ€ ํ™•์ธ๋  ๋•Œ๋งˆ๋‹ค ์ ์ ˆํ•œ ํ• ๋‹น๋Ÿ‰ ์นด์šดํ„ฐ๊ฐ€ ๊ฐ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์—ฐ๊ฒฐ๋œ ์ œํ’ˆ์— ํ• ๋‹น๋Ÿ‰์ด ์ •์˜๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ).

Apigee ๋Ÿฐํƒ€์ž„๊ณผ ๋‹ฌ๋ฆฌ ์ œํ’ˆ ์ •์˜์— ์ž…๋ ฅ๋œ ํ• ๋‹น๋Ÿ‰์€ Apigee ์›๊ฒฉ ์„œ๋น„์Šค์—์„œ ์ž๋™์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์ด ์Šน์ธ๋˜๋ฉด ์š”์ฒญ์€ ํ—ˆ์šฉ๋œ ํ• ๋‹น๋Ÿ‰์„ ๊ธฐ์ค€์œผ๋กœ ์‚ฐ์ •๋ฉ๋‹ˆ๋‹ค.

ํ• ๋‹น๋Ÿ‰์ด ์œ ์ง€๋˜๋Š” ์œ„์น˜

ํ• ๋‹น๋Ÿ‰์€ ์›๊ฒฉ ์„œ๋น„์Šค ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๋กœ์ปฌ์—์„œ ์œ ์ง€๊ด€๋ฆฌ ๋ฐ ํ™•์ธ๋˜๋ฉฐ Apigee ๋Ÿฐํƒ€์ž„์œผ๋กœ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์œ ์ง€๊ด€๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ• ๋‹น๋Ÿ‰์„ ์œ ์ง€๊ด€๋ฆฌํ•˜๋Š” ์›๊ฒฉ ์„œ๋น„์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ ํ• ๋‹น๋Ÿ‰์€ ์ •ํ™•ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์ดˆ๊ณผ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Apigee ๋Ÿฐํƒ€์ž„ ์—ฐ๊ฒฐ์ด ์ค‘๋‹จ๋˜๋ฉด ๋กœ์ปฌ ํ• ๋‹น๋Ÿ‰์€ Apigee ๋Ÿฐํƒ€์ž„์— ๋‹ค์‹œ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ๋…๋ฆฝ ์‹คํ–‰ํ˜• ํ• ๋‹น๋Ÿ‰์œผ๋กœ ๊ณ„์†๋ฉ๋‹ˆ๋‹ค.

OAuth ๋ฒ”์œ„

JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ† ํฐ์„ ํ—ˆ์šฉ๋œ OAuth ๋ฒ”์œ„์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ๊ธ‰๋œ JWT ํ† ํฐ์— ํ• ๋‹น๋œ ๋ฒ”์œ„๊ฐ€ API ์ œํ’ˆ์˜ ๋ฒ”์œ„์—์„œ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์•ฑ ์ •๋ณด

API ์ œํ’ˆ์„ ๊ตฌ์„ฑํ•œ ํ›„ ๊ฐœ๋ฐœ์ž์™€ ์—ฐ๊ฒฐ๋œ ์•ฑ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์•ฑ์€ API ํ‚ค ๋˜๋Š” JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ๋œ API ์ œํ’ˆ์— ๋Œ€ํ•œ ํด๋ผ์ด์–ธํŠธ ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

JWT ๊ธฐ๋ฐ˜ ์ธ์ฆ ์‚ฌ์šฉ

API ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  JWT ํ† ํฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ๋œ API ํ”„๋ก์‹œ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์„น์…˜์—์„œ๋Š” apigee-remote-service-cli token ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JWT ํ† ํฐ์„ ์ƒ์„ฑ, ๊ฒ€์‚ฌ, ์ˆœํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. Apigee Hybrid ํ™˜๊ฒฝ์˜ ๊ฒฝ์šฐ ์ด ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JWT๋ฅผ ๋ณด๊ด€ํ•  Kubernetes ๋ณด์•ˆ ๋น„๋ฐ€์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ์š”

JWT ํ™•์ธ ๋ฐ ์ธ์ฆ์€ JWT ์ธ์ฆ ํ•„ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Envoy์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ํ›„ Envoy ext-authz ํ•„ํ„ฐ๋Š” ์š”์ฒญ ํ—ค๋” ๋ฐ JWT๋ฅผ apigee-remote-service-envoy๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. JWT์˜ api_product_list ๋ฐ scope ํด๋ ˆ์ž„๊ณผ ์š”์ฒญ์˜ ๋Œ€์ƒ์— ๋Œ€ํ•ด ์Šน์ธํ•˜๊ธฐ ์œ„ํ•ด Apigee API ์ œํ’ˆ๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Apigee JWT ํ† ํฐ ๋งŒ๋“ค๊ธฐ

CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Apigee JWT ํ† ํฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

apigee-remote-service-cli token create -c config.yaml --id $KEY --secret $SECRET

๋˜๋Š” ํ‘œ์ค€ OAuth ํ† ํฐ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Curl ์˜ˆ์‹œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

curl https://org-env.apigee.net/remote-service/token -d '{"client_id":"myclientid","client_secret":"myclientsecret","grant_type":"client_credentials"}' -H "Content-type: application/json"

JWT ํ† ํฐ ์‚ฌ์šฉ

ํ† ํฐ์„ ๋ฐ›์€ ํ›„ Authorization ํ—ค๋”์˜ Envoy์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

curl localhost:8080/httpbin/headers -i -H "Authorization:Bearer $TOKEN"

JWT ํ† ํฐ ์‹คํŒจ

Envoy ๊ฑฐ๋ถ€

Envoy๊ฐ€ ํ† ํฐ์„ ๊ฑฐ๋ถ€ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Jwks remote fetch is failed

์ด ๊ฒฝ์šฐ Envoy ๊ตฌ์„ฑ์˜ remote_jwks ์„น์…˜์— ์œ ํšจํ•œ URI๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๊ณ , Envoy์—์„œ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•˜๊ณ , Apigee ํ”„๋ก์‹œ๋ฅผ ์„ค์น˜ํ•  ๋•Œ ์ธ์ฆ์„œ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. GET ํ˜ธ์ถœ๋กœ URI๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜์—ฌ ์œ ํšจํ•œ JSON ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

curl https://myorg-eval-test.apigee.net/remote-service/certs

Envoy์—์„œ ๋ณด๋‚ด๋Š” ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

  • 'Jwt์˜ ์ž ์žฌ๊ณ ๊ฐ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.'
  • 'Jwt ๋ฐœ๊ธ‰์ž๊ฐ€ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.'

์ด๋Ÿฌํ•œ ๋ฉ”์‹œ์ง€๋Š” ์ˆ˜์ •ํ•ด์•ผ ํ•  Envoy ๊ตฌ์„ฑ์˜ ์š”๊ตฌ์‚ฌํ•ญ์—์„œ ๋ณด๋‚ด์ง‘๋‹ˆ๋‹ค.

ํ† ํฐ ๊ฒ€์‚ฌ

CLI๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ† ํฐ์„ ๊ฒ€์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ

apigee-remote-service-cli -c config.yaml token inspect -f path/to/file

๋˜๋Š”

apigee-remote-service-cli -c config.yaml token inspect <<< $TOKEN

๋””๋ฒ„๊น…

์œ ํšจํ•œ API ํ‚ค ์‹คํŒจ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

๋กœ๊น…

$REMOTE_SERVICE_HOME/apigee-remote-service-envoy ์„œ๋น„์Šค์—์„œ ๋กœ๊น… ์ˆ˜์ค€์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ๋กœ๊น…์€ stderr๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

์š”์†Œ ํ•„์ˆ˜ ์„ค๋ช…
-l, --log-level ์œ ํšจํ•œ ์ˆ˜์ค€: ๋””๋ฒ„๊ทธ, ์ •๋ณด, ๊ฒฝ๊ณ , ์˜ค๋ฅ˜ ๋กœ๊น… ์ˆ˜์ค€์„ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’: ์ •๋ณด
-j, --json-log ๋กœ๊ทธ ์ถœ๋ ฅ์„ JSON ๋ ˆ์ฝ”๋“œ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Envoy๋Š” ๋กœ๊น…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ Envoy ๋ฌธ์„œ ๋งํฌ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ •์ฑ… ๋ณด์•ˆ ๋น„๋ฐ€ ์ด๋ฆ„ ๋ณ€๊ฒฝ

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

  1. ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
    $REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/new-mount_point_name

    ์˜ˆ:

    $REMOTE_SERVICE_HOME/apigee-remote-service-envoy --policy-secret '/my-mount-point
  2. ํŽธ์ง‘๊ธฐ์—์„œ $CLI_HOME/samples/apigee-envoy-adapter.yaml์„ ์—ฝ๋‹ˆ๋‹ค.
  3. ๋งˆ์šดํŠธ ์ง€์  ์ด๋ฆ„์„ ์ƒˆ ์ด๋ฆ„์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
    volumeMounts:
      - mountPath: /config
        name: apigee-remote-service-envoy
        readOnly: true
      - mountPath: /opt/apigee/tls
        name: tls-volume
        readOnly: true
      - mountPath: /my-mount-point
        name: policy-secret
        readOnly: true
  4. ํŒŒ์ผ์„ ์ €์žฅํ•˜๊ณ  ์„œ๋น„์Šค ๋ฉ”์‹œ์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    kubectl apply -f $REMOTE_SERVICE_HOME/samples/apigee-envoy-adapter.yaml

๋„คํŠธ์›Œํฌ ํ”„๋ก์‹œ ์‚ฌ์šฉ

Apigee-remote-service-envoy ๋ฐ”์ด๋„ˆ๋ฆฌ ํ™˜๊ฒฝ์—์„œ HTTP_PROXY ๋ฐ HTTPS_PROXY ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ HTTP ํ”„๋ก์‹œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ NO_PROXY ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํŠน์ • ํ˜ธ์ŠคํŠธ๊ฐ€ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•ด ์ „์†ก๋˜์ง€ ์•Š๋„๋ก ์ œ์™ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HTTP_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port]
HTTPS_PROXY=http://[user]:[pass]@[proxy_ip]:[proxy_port]
NO_PROXY=127.0.0.1,localhost

apigee-remote-service-envoy์—์„œ ํ”„๋ก์‹œ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์„ธ์š”.

์ธก์ •ํ•ญ๋ชฉ ๋ฐ ๋ถ„์„ ์ •๋ณด

Prometheus ์ธก์ •ํ•ญ๋ชฉ ์—”๋“œํฌ์ธํŠธ๋Š” :5001/metrics์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

Envoy ์• ๋„๋ฆฌํ‹ฑ์Šค

๋‹ค์Œ ๋งํฌ๋Š” Envoy ํ”„๋ก์‹œ ๋ถ„์„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Istio ์• ๋„๋ฆฌํ‹ฑ์Šค

๋‹ค์Œ ๋งํฌ๋Š” Envoy ํ”„๋ก์‹œ ๋ถ„์„ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

Apigee ์• ๋„๋ฆฌํ‹ฑ์Šค

Envoy์šฉ Apigee ์›๊ฒฉ ์„œ๋น„์Šค๋Š” ๋ถ„์„ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด Apigee์— ์š”์ฒญ ํ†ต๊ณ„๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. Apigee์—์„œ๋Š” ์—ฐ๊ฒฐ๋œ API ์ œํ’ˆ ์ด๋ฆ„์œผ๋กœ ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ๋ณด๊ณ ํ•ฉ๋‹ˆ๋‹ค.

Apigee ์• ๋„๋ฆฌํ‹ฑ์Šค์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์• ๋„๋ฆฌํ‹ฑ์Šค ์„œ๋น„์Šค ๊ฐœ์š”๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.