grpc

package module
v0.1.8 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 7, 2020 License: MIT Imports: 0 Imported by: 0

README

gRPC Go client with advanced settings

gRPC client, service and CLI utility to provide/check load balancing and connection stability

Using gRPC Go client

import "github.com/takama/grpc/client"
...

c, err := client.New(cfg, log)
if err != nil {
    log.Fatal(err)
}

ctx, cancel := context.WithTimeout(context.Background(), time.Second*15)
defer cancel()

e := echo.NewEchoClient(c.Connection())
response, err := e.Ping(
    // This is important to pass trough c.Context(ctx)
    // when we use Envoy balancer for any retries
    c.Context(ctx),
    &echo.Request{
        Content: "Some content",
    },
)
if err != nil {
    log.Print(err)
}

fmt.Print("Response:", response.Content)

Prepare service environment and configuration

  • Create a new project and GKE cluster in Google Cloud
  • Setup Contour balancer according to example
  • Note somewhere the IP of Load balancer
  • Change default GKE values in Makefile on your own
GKE_PROJECT_ID ?= your-project-id
GKE_PROJECT_ZONE ?= europe-west1-b
GKE_CLUSTER_NAME ?= your-cluster-name
  • Choose domain host name for the service and point your DNS record on GKE Contour balancer using IP above
  • Make the certificates for the domain name (Let's encrypt as option)
  • Test to create in dry run grpc-service-tls in corresponded Kubernetes environment (ex: test)
kubectl create secret tls grpc-service-tls --key key.pem --cert cert.pem --dry-run -o yaml
  • Create grpc-service-tls in corresponded Kubernetes environment (ex: test)
kubectl create secret tls grpc-service-tls --key key.pem --cert cert.pem
  • Change domain name in .helm/values-test.yaml or any other values-name.yaml to your own
  ## Ingress route hosts
  ##
  hosts:
    ## gRPC service host
    - name: grpc
      host: grpc.your-test-domain.net
...
  ## Client connection to the service
  ##
  client:
    host: grpc.your-test-domain.net
  • Change default namespace in Makefile
# Namespace: dev, prod, username ...
NAMESPACE ?= test

Build the service

make build

Deploy the service

make deploy

Build CLI utility on Linux

make compile

Build CLI utility on Mac OS

GOOS=darwin make compile

Run the utility with simple ping

./bin/darwin-amd64/grpc client ping --count 600 --config config/test.conf

Run the utility with reverse ping

./bin/darwin-amd64/grpc client reverse --count 600 --config config/test.conf

Scale services

During the ping process scale services from 1 to N and see how it is going

kubectl scale --replicas 3 -n test deploy/grpc
kubectl scale --replicas 6 -n test deploy/grpc
kubectl scale --replicas 1 -n test deploy/grpc
...

Other make commands

  • all - run default complete set of commands (build the service)
  • vendor - import all vendors (using dep)
  • compile - build the service binary
  • certs - download latests certs from an alpine image and prepare it for service container
  • build - build container image
  • push - push an image in docker registry
  • run - build and run the service
  • logs - show service logs from container
  • deploy - deployment of the service into Kubernetes environment
  • charts - validate helm templates (charts)
  • test - run unit tests
  • cover - show testing coverage for packages
  • fmt - format Go packages with go fmt
  • lint - use set of linters ( ~ 20) to check the service code
  • stop - stop running container
  • start - start existing container (if it was stopped before)
  • rm - remove stopped container
  • version - add next major/minor/patch version
  • clean - remove binary and running container
  • bootstrap - check and setup if something from utilities is not exist

Versioned changes

All changes in the project described in changelog

Generated using (Caldera boilerplate)

Documentation

Overview

Package grpc provides documentation.

Directories

Path Synopsis
contracts
echo
Package echo is a reverse proxy.
Package echo is a reverse proxy.
info
Package info is a reverse proxy.
Package info is a reverse proxy.
pkg
commands
Package commands contains global variables with configs and commands.
Package commands contains global variables with configs and commands.
version
Package version contains global variables for nolint: gochecknoglobals, gochecknoinits
Package version contains global variables for nolint: gochecknoglobals, gochecknoinits

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL