Ingress gRPC 예제
Ingress gRPC 예제 (Ingress gRPC Example)
grpc-ingress.yaml의 예시 ingress 구성은 gRPC 트래픽을 백엔드 서비스로 라우팅하는 방법을 보여드려요. 데모에는 GCP의 microservices 데모 앱을 사용해요.
본문
grpc-ingress.yaml의 예시 ingress 구성은 gRPC 트래픽을 백엔드 서비스로 라우팅하는 방법을 보여드려요.
데모 앱 배포하기 (Deploy the Demo App)
이 데모에는 GCP의 microservices 데모 앱을 사용할 거예요.
$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/release/kubernetes-manifests.yaml
gRPC는 바이너리로 인코딩되므로, gRPC 요청을 만들려면 gRPC 서비스에 대한 proto 정의도 필요해요. 데모 앱용으로 이것을 다운로드해볼게요:
$ curl -o demo.proto https://raw.githubusercontent.com/GoogleCloudPlatform/microservices-demo/main/protos/demo.proto
GRPC Ingress 배포하기 (Deploy GRPC Ingress)
예시 Ingress 정의는 examples/kubernetes/servicemesh/grpc-ingress.yaml에서 찾을 수 있어요.
# GRPC ingress for GCP microservice demo application
# https://github.com/GoogleCloudPlatform/microservices-demo
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: grpc-ingress
namespace: default
spec:
ingressClassName: cilium
rules:
- http:
paths:
- backend:
service:
name: productcatalogservice
port:
number: 3550
path: /hipstershop.ProductCatalogService
pathType: Prefix
- backend:
service:
name: currencyservice
port:
number: 7000
path: /hipstershop.CurrencyService
pathType: Prefix
$ kubectl apply -f https://raw.githubusercontent.com/cilium/cilium/1.20.2/examples/kubernetes/servicemesh/grpc-ingress.yaml
이것은 요청이 productcatalogservice와 currencyservice 마이크로서비스로 라우팅되도록 경로를 정의해요.
앞선 HTTP Ingress 예제와 마찬가지로 LoadBalancer 서비스를 만들며, 클라우드 프로바이더가 외부 IP 주소를 프로비저닝하는 데 시간이 좀 걸릴 수 있어요.
$ kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
grpc-ingress cilium * 10.111.109.99 80 3s
백엔드 서비스에 gRPC 요청 보내기 (Make gRPC Requests to Backend Services)
클라이언트 gRPC 요청을 보내려면 grpcurl을 사용할 수 있어요.
$ GRPC_INGRESS=$(kubectl get ingress grpc-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
# To access the currency service:
$ grpcurl -plaintext -proto ./demo.proto $GRPC_INGRESS:80 hipstershop.CurrencyService/GetSupportedCurrencies
#To access the product catalog service:
$ grpcurl -plaintext -proto ./demo.proto $GRPC_INGRESS:80 hipstershop.ProductCatalogService/ListProducts
더 알아보기 (Learn more)
- HTTP Ingress 예제 — HTTP Ingress 예제
- Cilium Ingress — Cilium Ingress 컨트롤러
- Ingress 참조 — Ingress 어노테이션 참조