vault: github.com/hashicorp/vault/vault/cluster Index | Files

package cluster

import "github.com/hashicorp/vault/vault/cluster"

Index

Package Files

cluster.go inmem_layer.go tcp_layer.go

Constants

const (
    ListenerAcceptDeadline = 500 * time.Millisecond
)

Variables

var (
    // Making this a package var allows tests to modify
    HeartbeatInterval = 5 * time.Second
)

type Client Uses

type Client interface {
    ClientLookup(context.Context, *tls.CertificateRequestInfo) (*tls.Certificate, error)
    ServerName() string
    CACert(ctx context.Context) *x509.Certificate
}

Client is used to lookup a client certificate.

type ClusterHook Uses

type ClusterHook interface {
    AddClient(alpn string, client Client)
    RemoveClient(alpn string)
    AddHandler(alpn string, handler Handler)
    StopHandler(alpn string)
    TLSConfig(ctx context.Context) (*tls.Config, error)
    Addr() net.Addr
    GetDialerFunc(ctx context.Context, alpnProto string) func(string, time.Duration) (net.Conn, error)
}

type ConnectionInfo Uses

type ConnectionInfo struct {
    Node     string
    Remote   string
    IsServer bool
    ALPN     string
}

type Handler Uses

type Handler interface {
    ServerLookup(context.Context, *tls.ClientHelloInfo) (*tls.Certificate, error)
    CALookup(context.Context) ([]*x509.Certificate, error)

    // Handoff is used to pass the connection lifetime off to
    // the handler
    Handoff(context.Context, *sync.WaitGroup, chan struct{}, *tls.Conn) error
    Stop() error
}

Handler exposes functions for looking up TLS configuration and handing off a connection for a cluster listener application.

type InmemLayer Uses

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

InmemLayer is an in-memory implementation of NetworkLayer. This is primarially useful for tests.

func NewInmemLayer Uses

func NewInmemLayer(addr string, logger log.Logger) *InmemLayer

NewInmemLayer returns a new in-memory layer configured to listen on the provided address.

func (*InmemLayer) Addrs Uses

func (l *InmemLayer) Addrs() []net.Addr

Addrs implements NetworkLayer.

func (*InmemLayer) Close Uses

func (l *InmemLayer) Close() error

Close is used to permanently disable the transport

func (*InmemLayer) Connect Uses

func (l *InmemLayer) Connect(remote *InmemLayer)

Connect is used to connect this transport to another transport for a given peer name. This allows for local routing.

func (*InmemLayer) Dial Uses

func (l *InmemLayer) Dial(addr string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)

Dial implements NetworkLayer.

func (*InmemLayer) Disconnect Uses

func (l *InmemLayer) Disconnect(peer string)

Disconnect is used to remove the ability to route to a given peer.

func (*InmemLayer) DisconnectAll Uses

func (l *InmemLayer) DisconnectAll()

DisconnectAll is used to remove all routes to peers.

func (*InmemLayer) Listeners Uses

func (l *InmemLayer) Listeners() []NetworkListener

Listeners implements NetworkLayer.

func (*InmemLayer) SetConnectionCh Uses

func (l *InmemLayer) SetConnectionCh(ch chan *ConnectionInfo)

type InmemLayerCluster Uses

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

InmemLayerCluster composes a set of layers and handles connecting them all together. It also satisfies the NetworkLayerSet interface.

func NewInmemLayerCluster Uses

func NewInmemLayerCluster(clusterName string, nodes int, logger log.Logger) (*InmemLayerCluster, error)

NewInmemLayerCluster returns a new in-memory layer set that builds n nodes and connects them all together.

func (*InmemLayerCluster) ConnectCluster Uses

func (ic *InmemLayerCluster) ConnectCluster(remote *InmemLayerCluster)

ConnectCluster connects this cluster with the provided remote cluster, connecting all nodes to each other.

func (*InmemLayerCluster) Layers Uses

func (ic *InmemLayerCluster) Layers() []NetworkLayer

Layers implements the NetworkLayerSet interface.

func (*InmemLayerCluster) SetConnectionCh Uses

func (ic *InmemLayerCluster) SetConnectionCh(ch chan *ConnectionInfo)

type Listener Uses

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

Listener is the source of truth for cluster handlers and connection clients. It dynamically builds the cluster TLS information. It's also responsible for starting tcp listeners and accepting new cluster connections.

func NewListener Uses

func NewListener(networkLayer NetworkLayer, cipherSuites []uint16, logger log.Logger) *Listener

func (*Listener) AddClient Uses

func (cl *Listener) AddClient(alpn string, client Client)

AddClient adds a new client for an ALPN name

func (*Listener) AddHandler Uses

func (cl *Listener) AddHandler(alpn string, handler Handler)

AddHandler registers a new cluster handler for the provided ALPN name.

func (*Listener) Addr Uses

func (cl *Listener) Addr() net.Addr

func (*Listener) Addrs Uses

func (cl *Listener) Addrs() []net.Addr

func (*Listener) GetDialerFunc Uses

func (cl *Listener) GetDialerFunc(ctx context.Context, alpn string) func(string, time.Duration) (net.Conn, error)

GetDialerFunc returns a function that looks up the TLS information for the provided alpn name and calls the network layer's dial function.

func (*Listener) Handler Uses

func (cl *Listener) Handler(alpn string) (Handler, bool)

Handler returns the handler for the provided ALPN name

func (*Listener) RemoveClient Uses

func (cl *Listener) RemoveClient(alpn string)

RemoveClient removes the client for the specified ALPN name

func (*Listener) Run Uses

func (cl *Listener) Run(ctx context.Context) error

Run starts the tcp listeners and will accept connections until stop is called. This function blocks so should be called in a goroutine.

func (*Listener) Server Uses

func (cl *Listener) Server() *http2.Server

Server returns the http2 server that the cluster listener is using

func (*Listener) SetAdvertiseAddr Uses

func (cl *Listener) SetAdvertiseAddr(addr string) error

func (*Listener) Stop Uses

func (cl *Listener) Stop()

Stop stops the cluster listener

func (*Listener) StopHandler Uses

func (cl *Listener) StopHandler(alpn string)

StopHandler stops the cluster handler for the provided ALPN name, it also calls stop on the handler.

func (*Listener) TLSConfig Uses

func (cl *Listener) TLSConfig(ctx context.Context) (*tls.Config, error)

TLSConfig returns a tls config object that uses dynamic lookups to correctly authenticate registered handlers/clients

type NetAddr Uses

type NetAddr struct {
    Host string
}

func (*NetAddr) Network Uses

func (*NetAddr) Network() string

func (*NetAddr) String Uses

func (c *NetAddr) String() string

type NetworkLayer Uses

type NetworkLayer interface {
    Addrs() []net.Addr
    Listeners() []NetworkListener
    Dial(address string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)
    Close() error
}

NetworkLayer is the network abstraction used in the cluster listener. Abstracting the network layer out allows us to swap the underlying implementations for tests.

type NetworkLayerSet Uses

type NetworkLayerSet interface {
    Layers() []NetworkLayer
}

NetworkLayerSet is used for returning a slice of layers to a caller.

type NetworkListener Uses

type NetworkListener interface {
    net.Listener

    SetDeadline(t time.Time) error
}

NetworkListener is used by the network layer to define a net.Listener for use in the cluster listener.

type TCPLayer Uses

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

TCPLayer implements the NetworkLayer interface and uses TCP as the underlying network.

func NewTCPLayer Uses

func NewTCPLayer(addrs []*net.TCPAddr, logger log.Logger) *TCPLayer

NewTCPLayer returns a TCPLayer.

func (*TCPLayer) Addrs Uses

func (l *TCPLayer) Addrs() []net.Addr

Addrs implements NetworkLayer.

func (*TCPLayer) Close Uses

func (l *TCPLayer) Close() error

Close implements the NetworkLayer interface.

func (*TCPLayer) Dial Uses

func (l *TCPLayer) Dial(address string, timeout time.Duration, tlsConfig *tls.Config) (*tls.Conn, error)

Dial implements the NetworkLayer interface.

func (*TCPLayer) Listeners Uses

func (l *TCPLayer) Listeners() []NetworkListener

Listeners implements NetworkLayer. It starts a new TCP listener for each configured address.

Package cluster imports 17 packages (graph) and is imported by 4 packages. Updated 2020-05-23. Refresh now. Tools for package owners.