e18n-toy is a toy project. The purpose of this project is
- to verify system networking in the k8s environment
- to test k8s cloud deployment
- to help decision making for the real externalization projects
- to help the team learn and adopt k8s
This project contains three parts
gateway
folder is a gateway server, which takes HTTP requests from the end-user to make gRPC requests to the gRPC servergrpc_server
folder is a gRPC backend serverproto
contains the gRPC definition, and codes generated by protobuf compilerprotoc
diagram
┌───────────────────────────────────────────────────────────────────────────┐
│ │
│ ┌─────────┐ ┌─────────┐ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ gateway │ │ gRPC │ │
│ │ │ │ │ │
│ ┌─────▶│ │───────┐ ┌────▶│ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ └─────────┘ │ │ └─────────┘ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
┌─────────┐ │ │ │ │ │ │ │ │ │
│ client │ │ │ │ gateway │ │ │ │ gRPC │ │
│ │ │ . │ │ │ │ . │ │ │ │
│ │───────────────────┼────────▶( )─────┤─────▶│ │───────┼──────▶( )────┼────▶│ │ │
│ │ │ ' │ │ │ │ ' │ │ │ │
└─────────┘ port forward / │ │ │ │ │ gRPC service│ │ │ │
external ip │ gateway servi│e │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ └─────────┘ │ │ └─────────┘ │
│ │ ┌─────────┐ │ │ ┌─────────┐ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ │ │ │ │ │ │
│ │ │ gateway │ │ │ │ gRPC │ │
│ │ │ │ │ │ │ │ │
│ └─────▶│ │───────┘ └────▶│ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ └─────────┘ └─────────┘ │
│ │
│ k8s │
│ │
│ │
└───────────────────────────────────────────────────────────────────────────┘
- run
protoc --proto_path=./ --go_out=./ --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative proto/greeting.proto
to generate grpc stub code - goto the
grpc_server
folder, run
go mod download
go mod vendor
to download dependencies. Then run go build -mod vendor
to build.
3. goto the gateway
, run the same command as step 2.
- run
./main
in bothgateway
andgrpc_server
folders - go to
http://localhost:8484/
to test
- Enable k8s in your docker. https://docs.docker.com/desktop/kubernetes/
- install
kubectl
https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
- run
build.sh
in bothgateway
andgrpc_server
folders
- run
kubectl apply -f deployment.yaml
in bothgateway
andgrpc_server
folders
- run
kubectl apply -f service.yaml
in bothgateway
andgrpc_server
folders
Since the k8s is running on a linux VM rather than on your local machine, you need to make a port forward in order to access. Run kubectl port-forward service/e13n-gateway-service 8484:8484
.
Go to http://localhost:8484/
to test
- install eksctl
https://github.com/weaveworks/eksctl
- create k8s cluster
eksctl create cluster --name keel-e13n --region us-east-1 --nodes 2 --ssh-access
- run
kubectl apply -f deployment_aws.yaml
in bothgateway
andgrpc_server
folders - run
kubectl apply -f service_aws.yaml
in bothgateway
andgrpc_server
folders
1.run kubectl get services
to get external-IP for the ELB
2.Go to https://{external-ip}:8484/
to test