route

package
v1.6.3 Latest Latest
Warning

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

Go to latest
Published: Dec 9, 2022 License: MIT Imports: 23 Imported by: 57

Documentation

Index

Constants

View Source
const Commands = `` /* 1974-byte string literal not displayed */

Variables

View Source
var Matcher = map[string]matcher{
	"prefix":  prefixMatcher,
	"glob":    globMatcher,
	"iprefix": iPrefixMatcher,
}

Matcher contains the available matcher functions. Update config/load.go#load after updating.

View Source
var Picker = map[string]picker{
	"rnd": rndPicker,
	"rr":  rrPicker,
}

Picker contains the available picker functions. Update config/load.go#load after updating.

Functions

func ParseAliases added in v1.5.11

func ParseAliases(in string) (names []string, err error)

ParseAliases scans a set of route commands for the "register" option and returns a list of services which should be registered by the backend.

func ReverseHostPort added in v1.5.14

func ReverseHostPort(s string) string

ReverseHostPort returns its argument string reversed rune-wise left to right. If s includes a port, only the host part is reversed.

func SetMetricsProvider added in v1.6.0

func SetMetricsProvider(p metrics.Provider)

func SetTable

func SetTable(t Table)

SetTable sets the active routing table. A nil value logs a warning and is ignored. The function is safe to be called from multiple goroutines.

Types

type Cmd added in v1.3.6

type Cmd string
const (
	RouteAddCmd    Cmd = "route add"
	RouteDelCmd    Cmd = "route del"
	RouteWeightCmd Cmd = "route weight"
)

type GlobCache added in v1.5.14

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

GlobCache implements an LRU cache for compiled glob patterns.

func NewGlobCache added in v1.5.14

func NewGlobCache(size int) *GlobCache

func (*GlobCache) Get added in v1.5.14

func (c *GlobCache) Get(pattern string) (glob.Glob, error)

Get returns the compiled glob pattern if it compiled without error. Otherwise, the function returns nil. If the pattern is not in the cache it will be added.

type Route added in v1.0.6

type Route struct {
	// Host contains the host of the route.
	// not used for routing but for config generation
	// Table has a map with the host as key
	// for faster lookup and smaller search space.
	Host string

	// Path is the path prefix from a request uri
	Path string

	// Targets contains the list of URLs
	Targets []*Target

	// Glob represents compiled pattern.
	Glob glob.Glob
	// contains filtered or unexported fields
}

Route maps a path prefix to one or more target URLs. routes can have a weight value which describes the amount of traffic this route should get. You can specify that a route should get a fixed percentage of the traffic independent of how many instances are running.

func (*Route) TargetConfig added in v1.0.6

func (r *Route) TargetConfig(t *Target, addWeight bool) string

type RouteDef added in v1.3.6

type RouteDef struct {
	Cmd     Cmd               `json:"cmd"`
	Service string            `json:"service"`
	Src     string            `json:"src"`
	Dst     string            `json:"dst"`
	Weight  float64           `json:"weight"`
	Tags    []string          `json:"tags,omitempty"`
	Opts    map[string]string `json:"opts,omitempty"`
}

func Parse

func Parse(in *bytes.Buffer) (defs []*RouteDef, err error)

Parse loads a routing table from a set of route commands.

The commands are parsed in order and order matters. Deleting a route that has not been created yet yields a different result than the other way around.

type Routes added in v1.0.6

type Routes []*Route

Routes stores a list of routes usually for a single host.

func (Routes) Len added in v1.0.6

func (rt Routes) Len() int

sort by path in reverse order (most to least specific)

func (Routes) Less added in v1.0.6

func (rt Routes) Less(i, j int) bool

func (Routes) Swap added in v1.0.6

func (rt Routes) Swap(i, j int)

type Table

type Table map[string]Routes

Table contains a set of routes grouped by host. The host routes are sorted from most to least specific by sorting the routes in reverse order by path.

func GetTable

func GetTable() Table

GetTable returns the active routing table. The function is safe to be called from multiple goroutines and the value is never nil.

func NewTable added in v1.3.6

func NewTable(b *bytes.Buffer) (t Table, err error)

func NewTableCustom added in v1.5.14

func NewTableCustom(defs *[]RouteDef) (t Table, err error)

func (Table) Dump added in v1.5.11

func (t Table) Dump() string

Dump returns the routing table as a detailed

func (Table) Lookup added in v1.0.5

func (t Table) Lookup(req *http.Request, trace string, pick picker, match matcher, globCache *GlobCache, globDisabled bool) (target *Target)

Lookup finds a target url based on the current matcher and picker or nil if there is none. It first checks the routes for the host and if none matches then it falls back to generic routes without a host. This is useful for a catch-all '/' rule.

func (Table) LookupHost added in v1.3.1

func (t Table) LookupHost(host string, pick picker) *Target

func (Table) String

func (t Table) String() string

String returns the routing table as config file which can be read by Parse() again.

type Target added in v1.0.5

type Target struct {
	// Service is the name of the service the targetURL points to
	Service string

	// Tags are the list of tags for this target
	Tags []string

	// Opts is the raw options for the target.
	Opts map[string]string

	// StripPath will be removed from the front of the outgoing
	// request path
	StripPath string

	// PrependPath will be added to the front of the outgoing
	// request path (after StripPath has been removed)
	PrependPath string

	// TLSSkipVerify disables certificate validation for upstream
	// TLS connections.
	TLSSkipVerify bool

	// Host signifies what the proxy will set the Host header to.
	// The proxy does not modify the Host header by default.
	// When Host is set to 'dst' the proxy will use the host name
	// of the target host for the outgoing request.
	Host string

	// URL is the endpoint the service instance listens on
	URL *url.URL

	// RedirectCode is the HTTP status code used for redirects.
	// When set to a value > 0 the client is redirected to the target url.
	RedirectCode int

	// RedirectURL is the redirect target based on the request.
	// This is cached here to prevent multiple generations per request.
	RedirectURL *url.URL

	// FixedWeight is the weight assigned to this target.
	// If the value is 0 the targets weight is dynamic.
	FixedWeight float64

	// Weight is the actual weight for this service in percent.
	Weight float64

	// Histogram measures throughput and latency of this target
	Timer gkm.Histogram

	// Counters for rx and tx
	RxCounter gkm.Counter
	TxCounter gkm.Counter

	// name of the auth handler for this target
	AuthScheme string

	// ProxyProto enables PROXY Protocol on upstream connection
	ProxyProto bool

	// Transport allows for different types of transports
	Transport *http.Transport
	// contains filtered or unexported fields
}

func (*Target) AccessDeniedHTTP added in v1.5.11

func (t *Target) AccessDeniedHTTP(r *http.Request) bool

AccessDeniedHTTP checks rules on the target for HTTP proxy routes.

func (*Target) AccessDeniedTCP added in v1.5.11

func (t *Target) AccessDeniedTCP(c net.Conn) bool

AccessDeniedTCP checks rules on the target for TCP proxy routes.

func (*Target) Authorized added in v1.5.11

func (t *Target) Authorized(r *http.Request, w http.ResponseWriter, authSchemes map[string]auth.AuthScheme) bool

func (*Target) BuildRedirectURL added in v1.5.11

func (t *Target) BuildRedirectURL(requestURL *url.URL)

func (*Target) ProcessAccessRules added in v1.5.11

func (t *Target) ProcessAccessRules() error

ProcessAccessRules processes access rules from options specified on the target route

Jump to

Keyboard shortcuts

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