쿠버네티스 일반/Network

gRPC in EKS ALB + aws lb controller

Jerry_이정훈 2023. 6. 21. 15:00
728x90

TL; DR;

. grpc는 nlb + ingress-nginx-controller 설정으로 에러가 발생하여 alb + aws load balancer controller로 해결하였다.

 

. ingress로 설정한 alb는 특이하게 path를 '/'가 아닌 '/*'로 지정해야 한다.

 

작업 내역

 

기존 REST 방식이 아닌 gprc는 nlb + ingress-nginx-controller로 설정하면 에러가 발생하였다.  

### SERVER SIDE
ingress-nginx-controller-6997b74f67-fgbb7 controller 10.0.197.170 - - [15/Jun/2023:05:11:33 +0000] "PRI * HTTP/2.0" 400 150 "-" "-" 0 0.003 [] [] - - - - fb937710bdfb64a083bebede4a659236
ingress-nginx-controller-6997b74f67-fgbb7 controller 10.0.221.191 - - [15/Jun/2023:05:11:34 +0000] "PRI * HTTP/2.0" 400 150 "-" "-" 0 0.001 [] [] - - - - 5495aa89ea4aa25297cdf4f253c06a1b

### CLIENT SIDE
❯ GODEBUG=http2debug=2 grpcurl xxx.xxxx.com:443 list
2023/06/15 14:11:33 http2: Framer 0x140004dc380: wrote SETTINGS len=0
2023/06/15 14:11:34 http2: Framer 0x14000328fc0: wrote SETTINGS len=0
2023/06/15 14:11:35 http2: Framer 0x1400079c620: wrote SETTINGS len=0
2023/06/15 14:11:38 http2: Framer 0x1400079ce00: wrote SETTINGS len=0
Failed to dial target host "xxxx.xxxx.ai:443": context deadline exceeded

그래서 이전부터 변경하려고 한 alb + aws load balancer controller 환경으로 grpc 테스트를 하고 잘되었다. (aws load balancer controller 설치 블로그 글 참조)

 

테스트에 사용한 demo grpc 예제는 공식 AWS Load Balancer Controller 홈페이지에서 참조하였다.
https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.5/examples/grpc_server/

 

정상적으로 설정이 완료되면 아래와 같이 grpcurl로 확인이 가능하다. 

$ (⎈ |sent-seoul-stage:grpc-test)  grpcurl xxx.xxx.com:443 helloworld.Greeter/SayHello
{
  "message": "Hello "
}

grpc 서버 설정에서 특이한 건 ingress 설정을 '/' 가 아닌 '/*'로 해야하는 거였다.

 

'/'로 지정하면 경로를 못찾아 404 에러 발생한다.

grpclib.exceptions.GRPCError: (<Status.UNIMPLEMENTED: 12>, "Received :status = '404'", None)

alb path 설정을 '/*'로 변경하면 잘된다. aws alb 콘솔 화면이다.

 

패스가 '/*'를 확인할 수 있다.

 

이상 간단한 설정 경험을 공유하였다.

반응형