ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ๋ฐฐํฌ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ด ๋ฌธ์„œ์—์„œ๋Š” Cloud Service Mesh๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋ก์‹œ๋ฆฌ์Šค gRPC ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•  ๋•Œ ๊ตฌ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. Client State Discovery Service(CSDS) API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Cloud Service Mesh ๋ฌธ์ œ๋ฅผ ์กฐ์‚ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€ Cloud Service Mesh ํด๋ผ์ด์–ธํŠธ ์ƒํƒœ ์ดํ•ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ RPC ์‹คํŒจ ๋ฌธ์ œ ํ•ด๊ฒฐ

gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฆฌ๋ชจํŠธ ํ”„๋กœ์‹œ์ ธ ์ฝœ(RPC) ์‹คํŒจ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. RPC๊ฐ€ ์‹คํŒจํ•˜๋ฉด ๋ฐ˜ํ™˜๋œ ์ƒํƒœ๋ฅผ ๊ฒ€ํ† ํ•ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต, ์ƒํƒœ์—๋Š” RPC ์‹คํŒจ์˜ ์›์ธ์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ถฉ๋ถ„ํ•œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

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

    gRPC์˜ ๋‹ค๋ฅธ ์–ธ์–ด ๊ตฌํ˜„์—๋Š” gRPC ๋Ÿฐํƒ€์ž„์—์„œ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

    • ์ž๋ฐ”์—์„œ์˜ gRPC: gRPC๋Š” ๋กœ๊น…์— java.util.logging์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. gRPC ๋Ÿฐํƒ€์ž„์—์„œ ์ถฉ๋ถ„ํ•œ ์ƒ์„ธ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด io.grpc.level์„ FINE ์ˆ˜์ค€์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์€ ํŒŒ์ผ์—์„œ ๋กœ๊น… ๊ตฌ์„ฑ์„ ๋กœ๋“œํ•˜๊ณ  ๋ช…๋ น์ค„ ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JVM์— ํŒŒ์ผ ์œ„์น˜๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

      # Create a file called logging.properties with the following contents:
      handlers=java.util.logging.ConsoleHandler
      io.grpc.level=FINE
      io.grpc.xds.level=FINEST
      java.util.logging.ConsoleHandler.level=ALL
      java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
      
      # Pass the location of the file to JVM by using this command-line flag:
      -Djava.util.logging.config.file=logging.properties
      

      xDS ๋ชจ๋“ˆ์— ํŠน์ •ํ•œ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด io.grpc.xds.level์„ FINE์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋กœ๊น…์„ ๋ณด๋ ค๋ฉด ์ˆ˜์ค€์„ FINER ๋˜๋Š” FINEST๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    • Go์—์„œ์˜ gRPC: ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ๋กœ๊น…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

      GRPC_GO_LOG_VERBOSITY_LEVEL=99 GRPC_GO_LOG_SEVERITY_LEVEL=info
      
    • C++์—์„œ์˜ gRPC: C++์—์„œ gRPC๋กœ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด gRPC ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. xDS ๋ชจ๋“ˆ๋ณ„ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด xds_client, xds_resolver, cds_lb, eds_lb, priority_lb, weighted_target_lb, lrs_lb์˜ GRPC_TRACE ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ถ”์ ๊ธฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    • Node.js์˜ gRPC: Node.js์—์„œ gRPC๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด gRPC-JS ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ์•ˆ๋‚ด๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. xDS ๋ชจ๋“ˆ๋ณ„ ๋กœ๊น…์„ ์‚ฌ์šฉ ์„ค์ •ํ•˜๋ ค๋ฉด xds_client, xds_resolver, cds_balancer, eds_balancer, priority, weighted_target์˜ GRPC_TRACE ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ ์ถ”์ ๊ธฐ๋ฅผ ์‚ฌ์šฉ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

RPC ์ƒํƒœ ๋˜๋Š” ๋Ÿฐํƒ€์ž„ ๋กœ๊ทธ์˜ ์˜ค๋ฅ˜์— ๋”ฐ๋ผ ๋ฌธ์ œ๊ฐ€ ๋‹ค์Œ ์นดํ…Œ๊ณ ๋ฆฌ ์ค‘ ํ•˜๋‚˜์— ํ•ด๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Cloud Service Mesh์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Œ

์—ฐ๊ฒฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

  • ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์˜ server_uri ๊ฐ’์ด trafficdirector.googleapis.com:443์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ํ™˜๊ฒฝ ๋ณ€์ˆ˜ GRPC_XDS_BOOTSTRAP์ด ์ •์˜๋˜์–ด ์žˆ๊ณ  ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ํŒŒ์ผ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • gRPC ์ฑ„๋„์„ ๋งŒ๋“ค ๋•Œ URI์— xds ์Šคํ‚ค๋งˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • Compute ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ํ”„๋กœ์ ํŠธ์—์„œ ๋„คํŠธ์›Œํฌ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ IAM ๊ถŒํ•œ์„ ๋ถ€์—ฌํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ๊ณ„์ •์ด Traffic Director API์— ์•ก์„ธ์Šคํ•˜๋„๋ก ์‚ฌ์šฉ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ Google Cloud ์ฝ˜์†” API ๋ฐ ์„œ๋น„์Šค์—์„œ Traffic Director API์˜ ์˜ค๋ฅ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์„œ๋น„์Šค ๊ณ„์ •์— ์˜ฌ๋ฐ”๋ฅธ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. VM ๋˜๋Š” pod์—์„œ ์‹คํ–‰๋˜๋Š” gRPC ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ Compute Engine VM ํ˜ธ์ŠคํŠธ ๋˜๋Š” Google Kubernetes Engine(GKE) ๋…ธ๋“œ ์ธ์Šคํ„ด์Šค์˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Compute Engine VM ๋˜๋Š” GKE ํด๋Ÿฌ์Šคํ„ฐ์˜ API ์•ก์„ธ์Šค ๋ฒ”์œ„๊ฐ€ Compute Engine API์— ๋Œ€ํ•œ ์ „์ฒด ์•ก์„ธ์Šค๋ฅผ ํ—ˆ์šฉํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. VM ๋˜๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋งŒ๋“ค ๋•Œ ๋‹ค์Œ์„ ์ง€์ •ํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    --scopes=https://www.googleapis.com/auth/cloud-platform
    
  • VM์—์„œ trafficdirector.googleapis.com:443์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์•ก์„ธ์Šค ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด TCP ํฌํŠธ 443์„ ํ†ตํ•ด trafficdirector.googleapis.com์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ฐจ๋‹จํ•˜๋Š” ๋ฐฉํ™”๋ฒฝ์ด๋‚˜ trafficdirector.googleapis.com ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์˜ DNS ํ™•์ธ ๋ฌธ์ œ๊ฐ€ ์›์ธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

URI์— ์ง€์ •๋œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„์„ ํ™•์ธํ•  ์ˆ˜ ์—†์Œ

๋กœ๊ทธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

[Channel<1>: (xds:///my-service:12400)] Failed to resolve name. status=Status{code=UNAVAILABLE, description=NameResolver returned no usable address. addrs=[], attrs={}

ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ํ™•์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

  • ์ง€์›๋˜๋Š” gRPC ๋ฒ„์ „๊ณผ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • gRPC ์ฑ„๋„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด URI์— ์‚ฌ์šฉ๋œ ํฌํŠธ๊ฐ€ ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ „๋‹ฌ ๊ทœ์น™์˜ ํฌํŠธ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ํฌํŠธ๊ฐ€ URI์— ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ „๋‹ฌ ๊ทœ์น™๊ณผ ์ผ์น˜ํ•˜๋Š” ๋ฐ 80 ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • gRPC ์ฑ„๋„์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด URI์— ์‚ฌ์šฉ๋œ ํ˜ธ์ŠคํŠธ ์ด๋ฆ„๊ณผ ํฌํŠธ๊ฐ€ ๊ตฌ์„ฑ์—์„œ ์‚ฌ์šฉ๋œ URL๋งต์˜ ํ˜ธ์ŠคํŠธ ๊ทœ์น™๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ๋‘ ๊ฐœ ์ด์ƒ์˜ URL ๋งต์—์„œ ๋™์ผํ•œ ํ˜ธ์ŠคํŠธ ๊ทœ์น™์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์™€์ผ๋“œ ์นด๋“œ๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. * ์™€์ผ๋“œ ์นด๋“œ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ํ˜ธ์ŠคํŠธ ๊ทœ์น™์€ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด RPC๊ฐ€ ์‹คํŒจํ•จ

์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์„ ๋•Œ RPC ์‹คํŒจ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์‹œ๋„ํ•ด ๋ณด์„ธ์š”.

  • Google Cloud ์ฝ˜์†”์—์„œ Cloud Service Mesh์˜ ์ „๋ฐ˜์ ์ธ ์ƒํƒœ์™€ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

    • ์—ฐ๊ฒฐ๋œ ๋ผ์šฐํŒ… ๊ทœ์น™ ๋งต ์—ด์—์„œ ์˜ฌ๋ฐ”๋ฅธ URL ๋งต์ด ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ์ฐธ์กฐํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์—ด์„ ํด๋ฆญํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ์ผ์น˜ ๊ทœ์น™์— ์ง€์ •๋œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๊ฐ€ ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฑ์—”๋“œ ์—ด์—์„œ ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์™€ ์—ฐ๊ฒฐ๋œ ๋ฐฑ์—”๋“œ๊ฐ€ ์ •์ƒ์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐฑ์—”๋“œ๊ฐ€ ๋น„์ •์ƒ์ธ ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค๋ฅผ ํด๋ฆญํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ์ƒํƒœ ํ™•์ธ์ด ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ƒํƒœ ํ™•์ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ๋˜๋Š” VM๊ณผ ๋ฐฉํ™”๋ฒฝ ๊ทœ์น™์—์„œ ์ง€์ •๋œ ํƒœ๊ทธ์˜ ๋ถˆ์ผ์น˜๋กœ ์ธํ•ด ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒํƒœ ํ™•์ธ ๋งŒ๋“ค๊ธฐ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.
  • gRPC ์ƒํƒœ ํ™•์ธ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ ค๋ฉด gRPC ๋ฐฑ์—”๋“œ๊ฐ€ gRPC ์ƒํƒœ ํ™•์ธ ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ† ์ฝœ์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜์œผ๋ฉด ๋Œ€์‹  TCP ์ƒํƒœ ํ™•์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. HTTP, HTTPS ๋˜๋Š” HTTP/2 ์ƒํƒœ ์ ๊ฒ€์„ gRPC ์„œ๋น„์Šค์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.

  • ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์„ ์‚ฌ์šฉํ•  ๋•Œ ์ธ์Šคํ„ด์Šค ๊ทธ๋ฃน์— ์ง€์ •๋œ ์ด๋ฆ„์ด ์ง€์ •๋œ ํฌํŠธ๊ฐ€ ์ƒํƒœ ํ™•์ธ์— ์‚ฌ์šฉ๋˜๋Š” ํฌํŠธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ ์—”๋“œํฌ์ธํŠธ ๊ทธ๋ฃน(NEG)์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ GKE ์„œ๋น„์Šค ์‚ฌ์–‘์— ์˜ฌ๋ฐ”๋ฅธ NEG ์ฃผ์„์ด ์žˆ๊ณ  ์ƒํƒœ ํ™•์ธ์ด NEG ์ œ๊ณต ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์—”๋“œํฌ์ธํŠธ ํ”„๋กœํ† ์ฝœ์ด GRPC๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ •์ฑ…์ด ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ RPC๊ฐ€ ์‹คํŒจํ•จ

๋กœ๊ทธ์— ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์™€ ๊ฐ™์€ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

error parsing "CDS" response: resource "cloud-internal-istio:cloud_mp_248715":
unexpected lbPolicy RING_HASH in response
error={"description":"errors parsing CDS response",
"file":"external/com_github_grpc_grpc/src/core/ext/xds/xds_api.cc", "file_line":3304,
"referenced_errors":[{"description":"cloud-internal-istio:cloud_mp_248715: LB policy is not supported."
WARNING: RPC failed: Status{code=INTERNAL, description=Panic! This is a bug!, cause=java.lang.NullPointerException: provider
at com.google.common.base.Preconditions.checkNotNull(Preconditions.java:910)
at io.grpc.internal.ServiceConfigUtil$PolicySelection.<init>(ServiceConfigUtil.java:418)
at io.grpc.xds.CdsLoadBalancer2$CdsLbState.handleClusterDiscovered(CdsLoadBalancer2.java:190)

RING_HASH๊ฐ€ ์‚ฌ์šฉ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ์˜ ํŠน์ • ์–ธ์–ด ๋ฐ ๋ฒ„์ „์—์„œ ์ง€์›๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ง€์›๋˜๋Š” ๋ถ€ํ•˜ ๋ถ„์‚ฐ ์ •์ฑ…๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค ๊ตฌ์„ฑ์„ ์—…๋ฐ์ดํŠธํ•˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›๋˜๋Š” ๋ฒ„์ „์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•ฉ๋‹ˆ๋‹ค. ์ง€์›๋˜๋Š” ํด๋ผ์ด์–ธํŠธ ๋ฒ„์ „์˜ ๊ฒฝ์šฐ gRPC์˜ xDS ๊ธฐ๋Šฅ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณด์•ˆ ๊ตฌ์„ฑ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์Œ

์„œ๋น„์Šค ๋ณด์•ˆ์„ ๊ตฌ์„ฑํ–ˆ์ง€๋งŒ ๋ณด์•ˆ ๊ตฌ์„ฑ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ƒ์„ฑ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฐฐํฌ์˜ ์—”๋“œํฌ์ธํŠธ ์ •์ฑ…์„ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

Cloud Service Mesh๋Š” ์—”๋“œํฌ์ธํŠธ์™€ ์ผ์น˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ ์ •์ฑ… ๋ฆฌ์†Œ์Šค๊ฐ€ 2๊ฐœ ์ด์ƒ ์žˆ๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(์˜ˆ: ๊ฐ™์€ ๋ผ๋ฒจ๊ณผ ํฌํŠธ๊ฐ€ ์žˆ๋Š” ์ •์ฑ… 2๊ฐœ ๋˜๋Š” ์—”๋“œํฌ์ธํŠธ ๋ผ๋ฒจ๊ณผ ์ผ์น˜ํ•˜๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋ผ๋ฒจ์ด ์žˆ๋Š” ์ •์ฑ… 2๊ฐœ ์ด์ƒ). ์—”๋“œํฌ์ธํŠธ ์ •์ฑ…์„ ์—”๋“œํฌ์ธํŠธ ๋ผ๋ฒจ๊ณผ ์ผ์น˜์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ EndpointPolicy.EndpointMatcher.MetadataLabelMatcher์˜ API๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ Cloud Service Mesh๋Š” ์ถฉ๋Œํ•˜๋Š” ์ •์ฑ…์—์„œ ๋ณด์•ˆ ๊ตฌ์„ฑ์„ ์ƒ์„ฑํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์„œ๋น„์Šค ๋ฉ”์‹œ ์ƒํƒœ ๋ฌธ์ œ ํ•ด๊ฒฐ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” Cloud Service Mesh ๊ตฌ์„ฑ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ๋น„์ •์ƒ์ธ ๊ฒฝ์šฐ์˜ Cloud Service Mesh ๋™์ž‘

์—”๋“œํฌ์ธํŠธ์˜ 99%๊ฐ€ ๋น„์ •์ƒ์ด๋ฉด ์‹ ๋ขฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด Cloud Service Mesh์—์„œ ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ๊ตฌ์„ฑํ•˜์—ฌ ์—”๋“œํฌ์ธํŠธ์˜ ์ •์ƒ ์ƒํƒœ๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์‹  ๋ฐ์ดํ„ฐ ์˜์—ญ์€ ๋ชจ๋“  ์—”๋“œํฌ์ธํŠธ ๊ฐ„์— ํŠธ๋ž˜ํ”ฝ์„ ๋ถ„์‚ฐํ•˜๋ฉฐ ์ด๋Š” ์„œ๋น™ ํฌํŠธ๊ฐ€ ๊ณ„์† ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋น„์ •์ƒ ๋ฐฑ์—”๋“œ๋กœ ์ธํ•ด ํŠธ๋ž˜ํ”ฝ ๋ถ„์‚ฐ์ด ์ตœ์ ํ™”๋˜์ง€ ์•Š์Œ

Cloud Service Mesh๋Š” ๋ฐฑ์—”๋“œ ์„œ๋น„์Šค์— ์—ฐ๊ฒฐ๋œ HealthCheck ๋ฆฌ์†Œ์Šค์˜ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—”๋“œ ์ƒํƒœ๋ฅผ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. Cloud Service Mesh๋Š” ์ด ์ •์ƒ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ์„ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ •์ƒ ๋ฐฑ์—”๋“œ๋กœ ๋ผ์šฐํŒ…ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐฑ์—”๋“œ๊ฐ€ ๋น„์ •์ƒ์ด๋ฉด ํŠธ๋ž˜ํ”ฝ์ด ๊ณ„์† ์ฒ˜๋ฆฌ๋˜๋”๋ผ๋„ ๋ถ„ํฌ๊ฐ€ ์ตœ์ ์ด ์•„๋‹ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํŠธ๋ž˜ํ”ฝ์ด ์ •์ƒ ๋ฐฑ์—”๋“œ๊ฐ€ ๊ณ„์† ์žˆ๋Š” ๋ฆฌ์ „์— ์ „๋‹ฌ๋  ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์–ด ์ง€์—ฐ ์‹œ๊ฐ„์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์ •์ƒ ์ƒํƒœ๋ฅผ ์‹๋ณ„ํ•˜๊ณ  ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„