书接上文Go Grpc部署到 k8s【负载均衡】 grpc server端我们暴露了9090和8080端口,这次我们的http服务用iris,并且绑定到9090端口。
GO文件
服务端代码main.go:
package main
import (
"context"
"fmt"
pb "grpcdemo/protos"
"net"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/logger"
"github.com/kataras/iris/v12/middleware/recover"
"github.com/soheilhy/cmux"
"google.golang.org/grpc"
)
func main() {
l, err := net.Listen("tcp", ":9090")
fmt.Println(err)
m := cmux.New(l)
// grpc
grpcL := m.MatchWithWriters(cmux.HTTP2MatchHeaderFieldSendSettings("content-type", "application/grpc"))
grpcServer := grpc.NewServer() // 创建GRPC
pb.RegisterGreeterServer(grpcServer, &server{}) // 在GRPC服务端注册服务
go grpcServer.Serve(grpcL)
// http
app := iris.New()
app.Use(recover.New())
app.Use(logger.New())
app.Handle("GET", "/", func(ctx iris.Context) {
ctx.WriteString("pong")
})
go func() {
httpL := m.Match(cmux.HTTP1Fast())
app.Run(iris.Listener(httpL))
}()
// Start serving!
m.Serve()
}
type server struct{}
func NewServer() *server {
return &server{}
}
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
msg := "Resuest By:" + in.Name + " Response By :" + LocalIp()
fmt.Println("GRPC Send: ", msg)
return &pb.HelloReply{Message: msg}, nil
}
func LocalIp() string {
addrs, _ := net.InterfaceAddrs()
var ip string = "localhost"
for _, address := range addrs {
if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
if ipnet.IP.To4() != nil {
ip = ipnet.IP.String()
}
}
}
return ip
}
服务端代码deploy.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: grpcserver
namespace: go
labels:
app: grpcserver
version: v1
spec:
replicas: 1
minReadySeconds: 10
selector:
matchLabels:
app: grpcserver
version: v1
template:
metadata:
labels:
app: grpcserver
versio