Closed
Description
I'm already have grpc server with my own letsencrypt cert behind Nginx:
nginx listens ssl, and proxy_pass to https grpc-gateway
grpc server listens on int_ip:7777, nginx listens on ext_ip: 443, hostname - external domain name on nginx, endpoint intenal listen addr - int_ip:7777
grpc code stuff:
certPool, err := certPool() // add fullchain.pem from letsencrypt
if err != nil {
return nil, err
}
opts = append(opts, grpc.Creds(credentials.NewClientTLSFromCert(certPool, hostname)))
}
opts = append(opts, grpc.StreamInterceptor(grpc_auth.StreamServerInterceptor(authHandlerFunc)))
opts = append(opts, grpc.UnaryInterceptor(grpc_auth.UnaryServerInterceptor(authHandlerFunc)))
grpcs := grpc.NewServer(opts...)
gw stuff:
opts = append(opts, grpc.WithTimeout(2*time.Second), grpc.WithBlock())
certPool, err := certPool()
if err != nil {
return nil, err
}
certificate, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
return nil, fmt.Errorf("could not load server key pair: %s", err)
}
creds := credentials.NewTLS(&tls.Config{
ServerName: hostname,
Certificates: []tls.Certificate{certificate},
RootCAs: certPool,
})
opts = append(opts, grpc.WithTransportCredentials(creds))
conn, err := grpc.Dial(endpoint, opts...)
main stuff:
certificate, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
return nil, err
}
tlsConf := &tls.Config{
Certificates: []tls.Certificate{certificate},
Rand: rand.Reader,
}
ln, err := net.Listen("tcp", "127.0.0.1:7777")
tls.NewListener(ln, tcpConf)
cm := cmux.New(ln)
grpcLn := cm.MatchWithWriters(cmux.HTTP2MatchHeaderFieldPrefixSendSettings("content-type", "application/grpc"))
//wsLn := cm.Match(cmux.HTTP1HeaderField("Upgrade", "websocket"))
restLn := cm.Match(cmux.HTTP1Fast())
grpcs, err := prepareGRPC(ctx)
if err != nil {
log.Fatal(err)
}
rests, err := prepareREST(ctx)
if err != nil {
log.Fatal(err)
}
go func() {
if err = grpcs.Serve(grpcLn); err != cmux.ErrListenerClosed {
log.Fatal(err)
}
}()
go func() {
if err = rests.Serve(restLn); err != cmux.ErrListenerClosed {
log.Fatal(err)
}
}()
if err := cm.Serve(); !strings.Contains(err.Error(), "use of closed network connection") {
log.Fatal(err)
}
when i'm try to start my app i have context deadline exceeded because grpc-gateway can't connect to grpc server
Metadata
Metadata
Assignees
Labels
No labels