Skip to content

Commit 05469d0

Browse files
Use generic local grpc proxy in local daemon
1 parent 5bb7214 commit 05469d0

File tree

9 files changed

+178
-180
lines changed

9 files changed

+178
-180
lines changed

cmd/agent/container/credentials_server.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import (
2525

2626
const (
2727
ExitCodeIO int = 64
28-
DefaultLogFile string = "/tmp/devpod-credentials-server.log"
28+
DefaultLogFile string = "/var/devpod/credentials-server.log"
2929
)
3030

3131
// CredentialsServerCmd holds the cmd flags
@@ -78,11 +78,12 @@ func (cmd *CredentialsServerCmd) Run(ctx context.Context, port int) error {
7878
var tunnelClient tunnel.TunnelClient
7979
var err error
8080
fileLogger := log.NewFileLogger(DefaultLogFile, logrus.DebugLevel)
81+
8182
// create a grpc client
8283
// if we have client address, lets use the http client
8384
if cmd.Client != "" {
84-
// address := ts.EnsureURL(cmd.Client, locald.LocalCredentialsServerPort)
85-
tunnelClient, err = tunnelserver.NewHTTPTunnelClient(cmd.Client, fmt.Sprintf("%d", cmd.Port), fileLogger)
85+
tunnelClient, err = tunnelserver.NewHTTPTunnelClient(
86+
cmd.Client, fmt.Sprintf("%d", cmd.Port), fileLogger)
8687
if err != nil {
8788
return fmt.Errorf("error creating tunnel client: %w", err)
8889
}
@@ -129,7 +130,7 @@ func (cmd *CredentialsServerCmd) Run(ctx context.Context, port int) error {
129130
}
130131

131132
// configure git user
132-
err = configureGitUserLocally(ctx, cmd.User, tunnelClient) // FIXME: still uses tunnel client for git creds
133+
err = configureGitUserLocally(ctx, cmd.User, tunnelClient)
133134
if err != nil {
134135
log.Debugf("Error configuring git user: %v", err)
135136
return err

pkg/agent/tunnelserver/client.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,8 @@ func NewTunnelClient(reader io.Reader, writer io.WriteCloser, exitOnClose bool,
4343
// NewHTTPTunnelClient creates a new gRPC client that connects via the network proxy.
4444
func NewHTTPTunnelClient(targetHost string, targetPort string, log log.Logger) (tunnel.TunnelClient, error) {
4545
resolver.SetDefaultScheme("passthrough")
46-
log.Infof("Starting tunnel client targeting %s:%s via proxy", targetHost, targetPort)
46+
log.Infof("Starting tunnel client targeting %s:%s", targetHost, targetPort)
4747

48-
// Create a unary interceptor to attach the target metadata.
4948
unaryInterceptor := func(
5049
ctx context.Context,
5150
method string,
@@ -55,11 +54,11 @@ func NewHTTPTunnelClient(targetHost string, targetPort string, log log.Logger) (
5554
opts ...grpc.CallOption,
5655
) error {
5756
md := metadata.New(map[string]string{
58-
"x-target-host": targetHost,
59-
"x-proxy-port": fmt.Sprintf("%d", locald.LocalCredentialsServerPort),
60-
"x-target-port": targetPort,
57+
network.HeaderTargetHost: targetHost,
58+
network.HeaderTargetPort: targetPort,
59+
network.HeaderProxyPort: fmt.Sprintf("%d", locald.DefaultGRPCProxyPort),
6160
})
62-
// Create a new outgoing context with the metadata attached.
61+
6362
ctx = metadata.NewOutgoingContext(ctx, md)
6463
log.Debugf("Unary interceptor adding metadata: host=%s, port=%s", targetHost, targetPort)
6564
return invoker(ctx, method, req, reply, cc, opts...)
@@ -74,22 +73,23 @@ func NewHTTPTunnelClient(targetHost string, targetPort string, log log.Logger) (
7473
opts ...grpc.CallOption,
7574
) (grpc.ClientStream, error) {
7675
md := metadata.New(map[string]string{
77-
"x-target-host": targetHost,
78-
"x-target-port": targetPort,
76+
network.HeaderTargetHost: targetHost,
77+
network.HeaderTargetPort: targetPort,
78+
network.HeaderProxyPort: fmt.Sprintf("%d", locald.DefaultGRPCProxyPort),
7979
})
80-
// Create a new outgoing context with the metadata attached.
80+
8181
ctx = metadata.NewOutgoingContext(ctx, md)
8282
log.Debugf("Stream interceptor adding metadata: host=%s, port=%s", targetHost, targetPort)
8383
return streamer(ctx, desc, cc, method, opts...)
8484
}
8585

86-
target := "passthrough:///proxy-socket-target"
86+
target := "passthrough:///proxy-socket-target" // dummy target, our dialer is responsible for using socket
8787

8888
conn, err := grpc.NewClient(target,
89-
grpc.WithTransportCredentials(insecure.NewCredentials()), // Connect to proxy socket without TLS
90-
grpc.WithContextDialer(network.GetContextDialer()), // Use our custom dialer
91-
grpc.WithUnaryInterceptor(unaryInterceptor), // Add metadata for unary calls
92-
grpc.WithStreamInterceptor(streamInterceptor), // Add metadata for streaming calls
89+
grpc.WithTransportCredentials(insecure.NewCredentials()),
90+
grpc.WithContextDialer(network.GetContextDialer()),
91+
grpc.WithUnaryInterceptor(unaryInterceptor),
92+
grpc.WithStreamInterceptor(streamInterceptor),
9393
)
9494
if err != nil {
9595
log.Errorf("Failed to create gRPC client connection via proxy: %v", err)

pkg/credentials/server.go

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,11 @@ import (
88
"net"
99
"net/http"
1010
"os"
11-
"path/filepath"
1211
"strconv"
1312

1413
"github.com/loft-sh/devpod/pkg/agent/tunnel"
15-
devpodlog "github.com/loft-sh/devpod/pkg/log"
1614
"github.com/loft-sh/log"
1715
"github.com/pkg/errors"
18-
"github.com/sirupsen/logrus"
1916
)
2017

2118
const (
@@ -32,37 +29,33 @@ func RunCredentialsServer(
3229
clientHost string,
3330
logger log.Logger,
3431
) error {
35-
logPath := filepath.Join("/tmp", CredentialsServerLogFile)
36-
fileLogger := log.NewFileLogger(logPath, logrus.DebugLevel)
37-
combinedLogger := devpodlog.NewCombinedLogger(logrus.DebugLevel, logger, fileLogger)
38-
3932
var handler http.Handler = http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
40-
combinedLogger.Debugf("Incoming client connection at %s", request.URL.Path)
33+
logger.Debugf("Incoming client connection at %s", request.URL.Path)
4134
if request.URL.Path == "/git-credentials" {
42-
err := handleGitCredentialsRequest(ctx, writer, request, client, clientHost, combinedLogger)
35+
err := handleGitCredentialsRequest(ctx, writer, request, client, clientHost, logger)
4336
if err != nil {
4437
http.Error(writer, err.Error(), http.StatusInternalServerError)
4538
return
4639
}
4740
} else if request.URL.Path == "/docker-credentials" {
48-
err := handleDockerCredentialsRequest(ctx, writer, request, client, combinedLogger)
41+
err := handleDockerCredentialsRequest(ctx, writer, request, client, logger)
4942
if err != nil {
5043
http.Error(writer, err.Error(), http.StatusInternalServerError)
5144
return
5245
}
5346
} else if request.URL.Path == "/git-ssh-signature" {
54-
err := handleGitSSHSignatureRequest(ctx, writer, request, client, combinedLogger)
47+
err := handleGitSSHSignatureRequest(ctx, writer, request, client, logger)
5548
if err != nil {
5649
http.Error(writer, err.Error(), http.StatusInternalServerError)
5750
return
5851
}
5952
} else if request.URL.Path == "/loft-platform-credentials" {
60-
err := handleLoftPlatformCredentialsRequest(ctx, writer, request, client, combinedLogger)
53+
err := handleLoftPlatformCredentialsRequest(ctx, writer, request, client, logger)
6154
if err != nil {
6255
http.Error(writer, err.Error(), http.StatusInternalServerError)
6356
}
6457
} else if request.URL.Path == "/gpg-public-keys" {
65-
err := handleGPGPublicKeysRequest(ctx, writer, request, client, combinedLogger)
58+
err := handleGPGPublicKeysRequest(ctx, writer, request, client, logger)
6659
if err != nil {
6760
http.Error(writer, err.Error(), http.StatusInternalServerError)
6861
}
@@ -74,7 +67,7 @@ func RunCredentialsServer(
7467

7568
errChan := make(chan error, 1)
7669
go func() {
77-
combinedLogger.Debugf("Credentials server started on port %d...", port)
70+
logger.Debugf("Credentials server started on port %d...", port)
7871

7972
// always returns error. ErrServerClosed on graceful close
8073
if err := srv.ListenAndServe(); err != http.ErrServerClosed {

pkg/daemon/local/credentials_proxy.go

Lines changed: 0 additions & 129 deletions
This file was deleted.

pkg/daemon/local/daemon.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ import (
2323
)
2424

2525
type Daemon struct {
26-
socketListener net.Listener
27-
tsServer *tsnet.Server
28-
localServer *localServer
29-
credentialsServerProxy *LocalCredentialsServerProxy
30-
rootDir string
31-
log log.Logger
26+
socketListener net.Listener
27+
tsServer *tsnet.Server
28+
localServer *localServer
29+
grpcServerProxy *LocalGRPCProxy
30+
rootDir string
31+
log log.Logger
3232
}
3333

3434
type InitConfig struct {
@@ -63,18 +63,18 @@ func Init(ctx context.Context, config InitConfig) (*Daemon, error) {
6363
return nil, fmt.Errorf("create local server: %w", err)
6464
}
6565

66-
credentialsProxy, err := NewLocalCredentialsServerProxy(tsServer, log)
66+
grpcProxy, err := NewLocalGRPCProxy(tsServer, log)
6767
if err != nil {
6868
return nil, fmt.Errorf("create local credentials server: %w", err)
6969
}
7070

7171
return &Daemon{
72-
socketListener: socketListener,
73-
tsServer: tsServer,
74-
localServer: localServer,
75-
credentialsServerProxy: credentialsProxy,
76-
rootDir: config.RootDir,
77-
log: log,
72+
socketListener: socketListener,
73+
tsServer: tsServer,
74+
localServer: localServer,
75+
grpcServerProxy: grpcProxy,
76+
rootDir: config.RootDir,
77+
log: log,
7878
}, nil
7979
}
8080
func (d *Daemon) Start(ctx context.Context) error {
@@ -94,7 +94,7 @@ func (d *Daemon) Start(ctx context.Context) error {
9494
}()
9595
go func() {
9696
d.log.Info("Start credentials server")
97-
errChan <- d.credentialsServerProxy.Listen(ctx)
97+
errChan <- d.grpcServerProxy.Listen(ctx)
9898
}()
9999
defer func() {
100100
d.log.Info("Cleaning up daemon resources")

0 commit comments

Comments
 (0)