一、前言
Ingress Nginx支持gRPC服务的暴露,低于0.21的版本使用如下的annotation支持gRPC:
nginx.ingress.kubernetes.io/grpc-backend: "true"
0、 21版本以上使用如下annotation支持gRPC:;
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
本文基于Ingress Ngixn版本0.30.0(quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.30.0)进行部署和测试
转载自https://blog.csdn.net/cloudvtech
二、部署gRPC服务
2.1 服务端代码和镜像构建
server.go
package main
import (
"context"
"fmt"
"os/signal"
"log"
"net"
"os"
"github.com/javiramos1/grpcapi"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
type grpcServer struct{}
func (*grpcServer) GrpcService(ctx context.Context, req *grpcapi.GrpcRequest) (*grpcapi.GrpcResponse, error) {
fmt.Printf("grpcServer %v\n", req)
name, _ := os.Hostname()
input := req.GetInput()
result := "Got input " + input + " server host: " + name
res := &grpcapi.GrpcResponse{
Response: result,
}
return res, nil
}
func main() {
fmt.Println("Starting Server...")
log.SetFlags(log.LstdFlags | log.Lshortfile)
hostname := os.Getenv("SVC_HOST_NAME")
if len(hostname) <= 0 {
hostname = "0.0.0.0"
}
port := os.Getenv("SVC_PORT")
if len(port) <= 0 {
port = "50051"
}
lis, err := net.Listen("tcp", hostname+":"+port)
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
opts := []grpc.ServerOption{}
s := grpc.NewServer(opts...)
grpcapi.RegisterGrpcServiceServer(s, &grpcServer{})
// reflection service on gRPC server.
reflection.Register(s)
go func() {
fmt.Println("Server running on ", (hostname + ":" + port))
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}()
// Wait for Control C to exit
ch := make(chan os.Signal, 1)
signal.Notify(ch, os.Interrupt)
// Block until a signal is received
<-ch
fmt.Println("Stopping the server")
s.Stop()
fmt.Println("Closing the listener")
lis.Close()
fmt.Println("Server Shutdown")
}
Dockerfile
FROM iron/go
WORKDIR /app
ADD grpc_server /app/
CMD [ "./grpc_server" ]
构建binary和镜像:
CGO_ENABLED=0 GOOS=linux go build -o grpc_server -ldflags "-s -w -X 'main.build=$(git rev-parse --short HEAD)' -X 'main.buildDate=$(date --rfc-3339=seconds)'" -a -installsuffix cgo server.go
docker build -t myregistry.com/grpc_server .
docker push myregistry.comgrpc_server
2、 2部署gRPC服务;
apiVersion: v1
kind: Service
metadata:
name: grpcserver
spec:
ports:
- port: 50051
protocol: TCP
targetPort: 50051
selector:
run: grpcserver
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
run: grpcserver
name: grpcserver
spec:
replicas: 2
selector:
matchLabels:
run: grpcserver
template:
metadata:
labels:
run: grpcserver
spec:
containers:
- image: myregistry.com/grpc_server:latest
name: grpcserver
ports:
- containerPort: 50051
包含两个replica和一个cluster service:
转载自https://blog.csdn.net/cloudvtech
三、通过Ingress Nginx暴露gRPC服务
参考文档:
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: