Gokit microservice demo
Contents
小弟在 GDG Devfest 2019 分享過 Build go kit microservices at kubernetes with ease,Gokit 是一個建立 microservice 的 toolkit,Gokit 提出 Transport
Endpoint
Service
三種概念來幫助開始者進行架構分離,對單一微服務進行架構強制分離或許會增加程式碼的閱讀性,不過對一定規模的微服務來說,一致性的程式架構分離反而會增加多人開發的效率
cage1016/ms-demo
Service | Description |
---|---|
add | Expose Sum method |
tictac | Expose Tic/Tac method |
cage1016/ms-demo: gokit microservice demo 提供了使用 gokit 建立的 kubernetes/istio 的 manifest, 可以讓使用者快速的練習基於 kubernetes/istio 來搭建 gokit 微服務
Install
- Run
skaffold run
(first time will be slow) - Set the
ADD_HTTP_LB_URL/ADD_GRPC_LB_URL
&TICTAC_HTTP_LB_URL/TICTAC_GRPC_LB_URL
environment variable in your shell to the public IP/port of the Kubernetes loadBalancer1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
export ADD_HTTP_LB_PORT=$(kubectl get service add-external -o jsonpath='{.spec.ports[?(@.name=="http")].port}') export ADD_GRPC_LB_PORT=$(kubectl get service add-external -o jsonpath='{.spec.ports[?(@.name=="grpc")].port}') export ADD_LB_HOST=$(kubectl get service add-external -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') export ADD_HTTP_LB_URL=$ADD_LB_HOST:$ADD_HTTP_LB_PORT export ADD_GRPC_LB_URL=$ADD_LB_HOST:$ADD_GRPC_LB_PORT echo $ADD_HTTP_LB_URL echo $ADD_GRPC_LB_URL export TICTAC_HTTP_LB_PORT=$(kubectl get service tictac-external -o jsonpath='{.spec.ports[?(@.name=="http")].port}') export TICTAC_GRPC_LB_PORT=$(kubectl get service tictac-external -o jsonpath='{.spec.ports[?(@.name=="grpc")].port}') export TICTAC_LB_HOST=$(kubectl get service tictac-external -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') export TICTAC_HTTP_LB_URL=$TICTAC_LB_HOST:$TICTAC_HTTP_LB_PORT export TICTAC_GRPC_LB_URL=$TICTAC_LB_HOST:$TICTAC_GRPC_LB_PORT echo $TICTAC_HTTP_LB_URL echo $TICTAC_GRPC_LB_URL
- Access by command
- sum method
1 2 3 4 5
curl -X POST $ADD_HTTP_LB_URL/sum -d '{"a": 1, "b":1}' or grpcurl -d '{"a": 1, "b":1}' -plaintext -proto ./pb/add/add.proto $ADD_GRPC_LB_URL pb.Add.Sum
- tic method
1 2 3 4 5
curl -X POST $TICTAC_HTTP_LB_URL/tic or grpcurl -plaintext -proto ./pb/tictac/tictac.proto $TICTAC_GRPC_LB_URL pb.Tictac.Tic
- tac method
1 2 3 4 5
curl $TICTAC_HTTP_LB_URL/tac or grpcurl -plaintext -proto ./pb/tictac/tictac.proto $TICTAC_GRPC_LB_URL pb.Tictac.Tac
- Apply istio manifests
kubectl apply -f deployments/istio-manifests
- Set the
GATEWAY_HTTP_URL/GATEWAY_GRPC_URL
environment variable in your shell to the public IP/port of the Istio Ingress gateway.1 2 3 4 5 6 7
export INGRESS_HTTP_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}') export INGRESS_GRPC_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="https")].port}') export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') export GATEWAY_HTTP_URL=$INGRESS_HOST:$INGRESS_HTTP_PORT export GATEWAY_GRPC_URL=$INGRESS_HOST:$INGRESS_GRPC_PORT echo $GATEWAY_HTTP_URL echo $GATEWAY_GRPC_URL
- Access by command
- sum method
1 2 3 4 5
curl -X POST $GATEWAY_HTTP_URL/api/v1/add/sum -d '{"a": 1, "b":1}' or grpcurl -d '{"a": 1, "b":1}' -plaintext -proto ./pb/add/add.proto $GATEWAY_GRPC_URL pb.Add.Sum
- tic method
1 2 3 4 5
curl -X POST $GATEWAY_HTTP_URL/api/v1/tictac/tic or grpcurl -plaintext -proto ./pb/tictac/tictac.proto $GATEWAY_GRPC_URL pb.Tictac.Tic
- tac method
1 2 3 4 5
curl $GATEWAY_HTTP_URL/api/v1/tictac/tac or grpcurl -plaintext -proto ./pb/tictac/tictac.proto $GATEWAY_GRPC_URL pb.Tictac.Tac
CleanUP
skaffold delete
or
kubectl delete -f deployments/istio-manifests