router

package
v17.10.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Feb 19, 2025 License: MIT Imports: 41 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var File_internal_module_agentk2kas_tunnel_router_router_proto protoreflect.FileDescriptor

Functions

func SetRoutingMetadata

func SetRoutingMetadata(md metadata.MD, agentID int64) metadata.MD

Types

type AgentFinder added in v17.1.0

type AgentFinder interface {
	AgentLastConnected(ctx context.Context, agentID int64) (time.Time, error)
}

type AggregatingQuerier

type AggregatingQuerier struct {
	// contains filtered or unexported fields
}

AggregatingQuerier groups polling requests.

func NewAggregatingQuerier

func NewAggregatingQuerier(log *slog.Logger, delegate Querier, api modshared.API, tracer trace.Tracer, pollConfig retry.PollConfigFactory, gcPeriod time.Duration) *AggregatingQuerier

func (*AggregatingQuerier) CachedGatewayURLs

func (q *AggregatingQuerier) CachedGatewayURLs(agentID int64) []nettool.MultiURL

func (*AggregatingQuerier) PollGatewayURLs

func (*AggregatingQuerier) Run

type Handler

type Handler interface {
	// HandleTunnel is called with server-side interface of the reverse tunnel.
	// It registers the tunnel and blocks, waiting for a request to proxy through the tunnel.
	// The method returns the error value to return to gRPC framework.
	// ageCtx can be used to unblock the method if the tunnel is not being used already.
	HandleTunnel(ageCtx context.Context, agentInfo *api.AgentInfo, server grpc.BidiStreamingServer[rpc.ConnectRequest, rpc.ConnectResponse]) error
}

type MultiURL added in v17.9.0

type MultiURL struct {
	Scheme  string   `protobuf:"bytes,1,opt,name=scheme" json:"scheme,omitempty"`
	Ip      [][]byte `protobuf:"bytes,2,rep,name=ip" json:"ip,omitempty"`
	Host    string   `protobuf:"bytes,3,opt,name=host" json:"host,omitempty"`
	TlsHost string   `protobuf:"bytes,4,opt,name=tls_host,json=tlsHost" json:"tls_host,omitempty"`
	Port    uint32   `protobuf:"varint,5,opt,name=port" json:"port,omitempty"`
	// contains filtered or unexported fields
}

func (*MultiURL) Descriptor deprecated added in v17.9.0

func (*MultiURL) Descriptor() ([]byte, []int)

Deprecated: Use MultiURL.ProtoReflect.Descriptor instead.

func (*MultiURL) GetHost added in v17.9.0

func (x *MultiURL) GetHost() string

func (*MultiURL) GetIp added in v17.9.0

func (x *MultiURL) GetIp() [][]byte

func (*MultiURL) GetPort added in v17.9.0

func (x *MultiURL) GetPort() uint32

func (*MultiURL) GetScheme added in v17.9.0

func (x *MultiURL) GetScheme() string

func (*MultiURL) GetTlsHost added in v17.9.0

func (x *MultiURL) GetTlsHost() string

func (*MultiURL) ProtoMessage added in v17.9.0

func (*MultiURL) ProtoMessage()

func (*MultiURL) ProtoReflect added in v17.9.0

func (x *MultiURL) ProtoReflect() protoreflect.Message

func (*MultiURL) Reset added in v17.9.0

func (x *MultiURL) Reset()

func (*MultiURL) String added in v17.9.0

func (x *MultiURL) String() string

type Plugin added in v17.1.0

type Plugin struct {
	// contains filtered or unexported fields
}

func NewPlugin added in v17.1.0

func NewPlugin(
	api modshared.API,
	kasPool grpctool.PoolInterface[nettool.MultiURL],
	gatewayQuerier tunserver.PollingGatewayURLQuerier[nettool.MultiURL],
	agentFinder AgentFinder,
	tunnelRegistry TunnelFinder,
	tracer trace.Tracer,
	meter otelmetric.Meter,
	ownPrivateAPIURL nettool.MultiURL,
	pollConfig retry.PollConfigFactory,
	tryNewGatewayInterval time.Duration,
	tunnelFindTimeout time.Duration,
) (*Plugin, error)

func (*Plugin) FindReadyGateway added in v17.1.0

func (p *Plugin) FindReadyGateway(ctx context.Context, log *slog.Logger, method string) (tunserver.ReadyGateway[nettool.MultiURL], *slog.Logger, int64, error)

func (*Plugin) FindTunnel added in v17.1.0

func (p *Plugin) FindTunnel(stream grpc.ServerStream, rpcAPI modshared.RPCAPI) (bool, *slog.Logger, tunserver.FindHandle, error)

func (*Plugin) PrepareStreamForForwarding added in v17.1.0

func (p *Plugin) PrepareStreamForForwarding(stream grpc.ServerStream) (grpc.ServerStream, error)

type Querier

type Querier interface {
	// KASURLsByAgentID returns the list of kas URLs for a particular agent id.
	// A partial list may be returned together with an error.
	// Safe for concurrent use.
	KASURLsByAgentID(ctx context.Context, agentID int64) ([]nettool.MultiURL, error)
}

type RedisTracker

type RedisTracker struct {
	// contains filtered or unexported fields
}

func NewRedisTracker

func NewRedisTracker(client rueidis.Client, validator prototool.Validator, agentKeyPrefix string, ownPrivateAPIURL nettool.MultiURL, m otelmetric.Meter) (*RedisTracker, error)

func (*RedisTracker) GC

func (t *RedisTracker) GC(ctx context.Context, agentIDs []int64) (int, error)

func (*RedisTracker) KASURLsByAgentID

func (t *RedisTracker) KASURLsByAgentID(ctx context.Context, agentID int64) ([]nettool.MultiURL, error)

func (*RedisTracker) RegistrationBuilder added in v17.4.0

func (t *RedisTracker) RegistrationBuilder() RegistrationBuilder

type Registerer

type Registerer interface {
	RegistrationBuilder() RegistrationBuilder
	// GC deletes expired tunnels from the underlying storage.
	GC(ctx context.Context, agentIDs []int64) (int, error)
}

Registerer allows to register and unregister tunnels. Caller is responsible for periodically calling GC() and Refresh(). Not safe for concurrent use.

type RegistrationBuilder added in v17.4.0

type RegistrationBuilder interface {
	// Register registers tunnels for the given agent ids with the tracker.
	Register(ttl time.Duration, agentIDs ...int64)
	// Unregister unregisters tunnels for the given agent ids with the tracker.
	Unregister(agentIDs ...int64)
	// Refresh refreshes registered tunnels in the underlying storage.
	Refresh(ttl time.Duration, agentIDs ...int64)
	// Do executes the enqueued operations.
	Do(context.Context) error
}

RegistrationBuilder allows batching tunnel (un)registrations. Can be reused after Do is called.

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

func NewRegistry

func NewRegistry(log *slog.Logger, api modshared.API, tracer trace.Tracer, meter otelmetric.Meter,
	refreshPeriod, gcPeriod, ttl time.Duration, tunnelTracker Tracker) (*Registry, error)

func (*Registry) FindTunnel

func (r *Registry) FindTunnel(ctx context.Context, agentID int64, service, method string) (bool, tunserver.FindHandle)

func (*Registry) HandleTunnel

func (r *Registry) HandleTunnel(ageCtx context.Context, agentInfo *api.AgentInfo, server grpc.BidiStreamingServer[rpc.ConnectRequest, rpc.ConnectResponse]) error

func (*Registry) KASURLsByAgentID

func (r *Registry) KASURLsByAgentID(ctx context.Context, agentID int64) ([]nettool.MultiURL, error)

func (*Registry) Run

func (r *Registry) Run(ctx context.Context) error

type Tracker

type Tracker interface {
	Registerer
	Querier
}

type TunnelFinder added in v17.1.0

type TunnelFinder interface {
	FindTunnel(ctx context.Context, agentID int64, service, method string) (bool, tunserver.FindHandle)
}

Jump to

Keyboard shortcuts

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