Documentation ¶
Overview ¶
Package services contains the gRPC server for inter-node communication.
Index ¶
- Constants
- func InterceptorLogger() logging.Logger
- type APIOptions
- type MeshDNSOptions
- type MetricsOptions
- type Options
- func (o *Options) BindFlags(fs *flag.FlagSet, prefix ...string)
- func (o *Options) ListenPort() (int, error)
- func (o *Options) ServerOptions(store mesh.Mesh, log *slog.Logger) (srvrOptions []grpc.ServerOption, err error)
- func (o *Options) TLSConfig() (*tls.Config, error)
- func (o *Options) ToFeatureSet() []v1.Feature
- func (o *Options) Validate() error
- type Server
- func (s *Server) Check(context.Context, *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error)
- func (s *Server) GetServiceInfo() map[string]grpc.ServiceInfo
- func (s *Server) ListenAndServe() error
- func (s *Server) RegisterService(desc *grpc.ServiceDesc, impl any)
- func (s *Server) Stop()
- func (s *Server) Watch(_ *healthpb.HealthCheckRequest, srv healthpb.Health_WatchServer) error
- type TURNOptions
Constants ¶
const ( ListenAddressEnvVar = "SERVICES_LISTEN_ADDRESS" CertFileEnvVar = "SERVICES_TLS_CERT_FILE" KeyFileEnvVar = "SERVICES_TLS_KEY_FILE" InsecureEnvVar = "SERVICES_INSECURE" DefaultGRPCPort = 8443 )
const ( LeaderProxyDisabledEnvVar = "SERVICES_API_DISABLE_LEADER_PROXY" MeshEnabledEnvVar = "SERVICES_API_MESH" AdminEnabledEnvVar = "SERVICES_API_ADMIN" PeerDiscoveryEnabledEnvVar = "SERVICES_API_PEER_DISCOVERY" WebRTCEnabledEnvVar = "SERVICES_API_WEBRTC" WebRTCSTUNServersEnvVar = "SERVICES_API_STUN_SERVERS" )
const ( MeshDNSEnabledEnvVar = "SERVICES_MESHDNS_ENABLED" MeshDNSListenUDPEnvVar = "SERVICES_MESHDNS_LISTEN_UDP" MeshDNSListenTCPEnvVar = "SERVICES_MESHDNS_LISTEN_TCP" MeshDNSTSIGKeyEnvVar = "SERVICES_MESHDNS_TSIG_KEY" MeshDNSReusePortEnvVar = "SERVICES_MESHDNS_REUSE_PORT" MeshDNSCompressionEnvVar = "SERVICES_MESHDNS_COMPRESSION" MeshDNSRequestTimeoutEnvVar = "SERVICES_MESHDNS_REQUEST_TIMEOUT" MeshDNSForwardersEnvVar = "SERVICES_MESHDNS_FORWARDERS" MeshDNSSubscribeForwardersEnvVar = "SERVICES_MESHDNS_SUBSCRIBE_FORWARDERS" MeshDNSDisableForwardingEnvVar = "SERVICES_MESHDNS_DISABLE_FORWARDING" MeshDNSCacheSizeEnvVar = "SERVICES_MESHDNS_CACHE_SIZE" )
const ( MetricsEnabledEnvVar = "SERVICES_METRICS_ENABLED" MetricsListenAddressEnvVar = "SERVICES_METRICS_LISTEN_ADDRESS" MetricsPathEnvVar = "SERVICES_METRICS_PATH" )
const ( TURNEnabledEnvVar = "SERVICES_TURN_ENABLED" TURNServerEndpointEnvVar = "SERVICES_TURN_ENDPOINT" TURNServerPublicIPEnvVar = "SERVICES_TURN_PUBLIC_IP" TURNServerListenAddressEnvVar = "SERVICES_TURN_LISTEN_ADDRESS" TURNServerPortEnvVar = "SERVICES_TURN_SERVER_PORT" TURNServerRealmEnvVar = "SERVICES_TURN_SERVER_REALM" TURNSTUNPortRangeEnvVar = "SERVICES_TURN_STUN_PORT_RANGE" TURNCampfireEnabledEnvVar = "SERVICES_TURN_CAMPFIRE_ENABLED" )
Variables ¶
This section is empty.
Functions ¶
func InterceptorLogger ¶
InterceptorLogger returns a logging.Logger that logs to the given slog.Logger.
Types ¶
type APIOptions ¶
type APIOptions struct { // DisableLeaderProxy is true if the leader proxy should be disabled. DisableLeaderProxy bool `json:"disable-leader-proxy,omitempty" yaml:"disable-leader-proxy,omitempty" toml:"disable-leader-proxy,omitempty"` // Mesh is true if the mesh API should be registered. Mesh bool `json:"mesh,omitempty" yaml:"mesh,omitempty" toml:"mesh,omitempty"` // Admin is true if the admin API should be registered. Admin bool `json:"admin,omitempty" yaml:"admin,omitempty" toml:"admin,omitempty"` // PeerDiscovery is true if the peer discovery API should be registered. PeerDiscovery bool `json:"peer-discovery,omitempty" yaml:"peer-discovery,omitempty" toml:"peer-discovery,omitempty"` // WebRTC is true if the WebRTC API should be registered. WebRTC bool `json:"webrtc,omitempty" yaml:"webrtc,omitempty" toml:"webrtc,omitempty"` // STUNServers is a comma separated list of STUN servers to use if the WebRTC API is enabled. STUNServers string `json:"stun-servers,omitempty" yaml:"stun-servers,omitempty" toml:"stun-servers,omitempty"` }
APIOptions are the options for which APIs to register and expose.
func NewAPIOptions ¶
func NewAPIOptions() *APIOptions
NewAPIOptions creates a new APIOptions with default values.
type MeshDNSOptions ¶
type MeshDNSOptions struct { // Enabled enables mesh DNS. Enabled bool `yaml:"enabled,omitempty" json:"enabled,omitempty" toml:"enabled,omitempty"` // ListenUDP is the UDP address to listen on. ListenUDP string `yaml:"listen-udp,omitempty" json:"listen-udp,omitempty" toml:"listen-udp,omitempty"` // ListenTCP is the address to listen on for TCP DNS requests. ListenTCP string `json:"listen-tcp,omitempty" yaml:"listen-tcp,omitempty" toml:"listen-tcp,omitempty"` // ReusePort sets the number of listeners to start on each port. // This is only supported on Linux. ReusePort int `json:"reuse-port,omitempty" yaml:"reuse-port,omitempty" toml:"reuse-port,omitempty"` // EnableCompression is true if DNS compression should be enabled. EnableCompression bool `json:"compression,omitempty" yaml:"compression,omitempty" toml:"compression,omitempty"` // RequestTimeout is the timeout for DNS requests. RequestTimeout time.Duration `json:"request-timeout,omitempty" yaml:"request-timeout,omitempty" toml:"request-timeout,omitempty"` // Forwarders are the DNS forwarders to use. If empty, the system DNS servers will be used. Forwarders []string `json:"forwarders,omitempty" yaml:"forwarders,omitempty" toml:"forwarders,omitempty"` // SubscribeForwarders will subscribe to new nodes that are able to forward requests for other meshes. // These forwarders will be placed at the bottom of the forwarders list. SubscribeForwarders bool `json:"subscribe-forwarders,omitempty" yaml:"subscribe-forwarders,omitempty" toml:"subscribe-forwarders,omitempty"` // DisableForwarding disables forwarding requests entirely. DisableForwarding bool `json:"disable-forwarding,omitempty" yaml:"disable-forwarding,omitempty" toml:"disable-forwarding,omitempty"` // CacheSize is the size of the remote DNS cache. CacheSize int `json:"cache-size,omitempty" yaml:"cache-size,omitempty" toml:"cache-size,omitempty"` }
MeshDNSOptions are the mesh DNS options.
func NewMeshDNSOptions ¶
func NewMeshDNSOptions() *MeshDNSOptions
NewMeshDNSOptions creates a new set of mesh DNS options.
func (*MeshDNSOptions) BindFlags ¶
func (o *MeshDNSOptions) BindFlags(fs *flag.FlagSet, prefix ...string)
BindFlags binds the flags for the mesh DNS options.
func (*MeshDNSOptions) Validate ¶
func (o *MeshDNSOptions) Validate() error
Validate validates the mesh DNS options.
type MetricsOptions ¶
type MetricsOptions struct { // Enabled is true if metrics should be enabled. Enabled bool `json:"enabled,omitempty" yaml:"enabled,omitempty" toml:"enabled,omitempty"` // MetricsListenAddress is the address to listen on for metrics. ListenAddress string `json:"listen-address,omitempty" yaml:"listen-address,omitempty" toml:"listen-address,omitempty"` // MetricsPath is the path to serve metrics on. Path string `json:"path,omitempty" yaml:"path,omitempty" toml:"path,omitempty"` }
Metrics are options for exposing metrics.
func NewMetricsOptions ¶
func NewMetricsOptions() *MetricsOptions
NewMetricsOptions creates a new MetricsOptions with default values.
type Options ¶
type Options struct { // ListenAddress is the address to listen on. ListenAddress string `json:"listen-address,omitempty" yaml:"listen-address,omitempty" toml:"listen-address,omitempty"` // TLSCertFile is the path to the TLS certificate file. TLSCertFile string `json:"tls-cert-file,omitempty" yaml:"tls-cert-file,omitempty" toml:"tls-cert-file,omitempty"` // TLSKeyFile is the path to the TLS key file. TLSKeyFile string `json:"tls-key-file,omitempty" yaml:"tls-key-file,omitempty" toml:"tls-key-file,omitempty"` // Insecure is true if the transport is insecure. Insecure bool `json:"insecure,omitempty" yaml:"insecure,omitempty" toml:"insecure,omitempty"` // API options API *APIOptions `json:"api,omitempty" yaml:"api,omitempty" toml:"api,omitempty"` // MeshDNS options MeshDNS *MeshDNSOptions `json:"mesh-dns,omitempty" yaml:"mesh-dns,omitempty" toml:"mesh-dns,omitempty"` // TURN options TURN *TURNOptions `json:"turn,omitempty" yaml:"turn,omitempty" toml:"turn,omitempty"` // Metrics options Metrics *MetricsOptions `json:"metrics,omitempty" yaml:"metrics,omitempty" toml:"metrics,omitempty"` // Dashboard options Dashboard *dashboard.Options `json:"dashboard,omitempty" yaml:"dashboard,omitempty" toml:"dashboard,omitempty"` // Campfire options Campfire *campfire.Options `json:"campfire,omitempty" yaml:"campfire,omitempty" toml:"campfire,omitempty"` }
Options contains the configuration for the gRPC server.
func NewOptions ¶
NewOptions returns new Options with sensible defaults. If grpcPort is 0 the default port is used.
func (*Options) ListenPort ¶
ListenPort returns the port the options are configured to listen on.
func (*Options) ServerOptions ¶
func (o *Options) ServerOptions(store mesh.Mesh, log *slog.Logger) (srvrOptions []grpc.ServerOption, err error)
ServerOptions converts the options to gRPC server options.
func (*Options) ToFeatureSet ¶
ToFeatureSet converts the options to a feature set.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the gRPC server.
func (*Server) Check ¶
func (s *Server) Check(context.Context, *healthpb.HealthCheckRequest) (*healthpb.HealthCheckResponse, error)
Check implements grpc.health.v1.HealthServer.
func (*Server) GetServiceInfo ¶
func (s *Server) GetServiceInfo() map[string]grpc.ServiceInfo
GetServiceInfo implements reflection.ServiceInfoProvider.
func (*Server) ListenAndServe ¶
ListenAndServe starts the gRPC server and optional metrics server then blocks until the gRPC server exits.
func (*Server) RegisterService ¶
func (s *Server) RegisterService(desc *grpc.ServiceDesc, impl any)
RegisterService implements grpc.RegistrarService.
func (*Server) Stop ¶
func (s *Server) Stop()
Stop stops the gRPC server gracefully. You cannot use the server again after calling Stop.
func (*Server) Watch ¶
func (s *Server) Watch(_ *healthpb.HealthCheckRequest, srv healthpb.Health_WatchServer) error
Watch implements grpc.health.v1.HealthServer.
type TURNOptions ¶
type TURNOptions struct { // Enabled enables the TURN server. Enabled bool `json:"enabled,omitempty" yaml:"enabled,omitempty" toml:"enabled,omitempty"` // Endpoint is the endpoint to advertise for the TURN server. If empty, the public IP and listen port is used. Endpoint string `json:"endpoint,omitempty" yaml:"endpoint,omitempty" toml:"endpoint,omitempty"` // PublicIP is the address advertised for STUN requests. PublicIP string `json:"public-ip,omitempty" yaml:"public-ip,omitempty" toml:"public-ip,omitempty"` // ListenAddress is the address to listen on for TURN connections. ListenAddress string `json:"listen-address,omitempty" yaml:"listen-address,omitempty" toml:"listen-address,omitempty"` // ListenPort is the port to listen on for TURN connections. ListenPort int `json:"listen-port,omitempty" yaml:"listen-port,omitempty" toml:"listen-port,omitempty"` // ServerRealm is the realm used for TURN server authentication. ServerRealm string `json:"realm,omitempty" yaml:"realm,omitempty" toml:"realm,omitempty"` // STUNPortRange is the port range to use for STUN. STUNPortRange string `json:"stun-port-range,omitempty" yaml:"stun-port-range,omitempty" toml:"stun-port-range,omitempty"` // CampfireEnabled enables handling campfire packets on the TURN server. CampfireEnabled bool `json:"campfire-enabled,omitempty" yaml:"campfire-enabled,omitempty" toml:"campfire-enabled,omitempty"` }
TURNOptions are the TURN Server options.
func NewTURNOptions ¶
func NewTURNOptions() *TURNOptions
NewTURNOptions creates a new TURNOptions with default values.
func (*TURNOptions) BindFlags ¶
func (o *TURNOptions) BindFlags(fs *flag.FlagSet, prefix ...string)
BindFlags binds the flags.
func (*TURNOptions) Validate ¶
func (o *TURNOptions) Validate() error
Validate validates the options.
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package admin provides the admin gRPC server.
|
Package admin provides the admin gRPC server. |
Package campfire provides the campfire service to webmesh clients.
|
Package campfire provides the campfire service to webmesh clients. |
Package dashboard contains a service that serves a web dashboard.
|
Package dashboard contains a service that serves a web dashboard. |
Package leaderproxy provides a gRPC interceptor that proxies requests to the leader node.
|
Package leaderproxy provides a gRPC interceptor that proxies requests to the leader node. |
Package meshapi contains the webmesh Mesh API service.
|
Package meshapi contains the webmesh Mesh API service. |
Package meshdns contains the Mesh DNS server.
|
Package meshdns contains the Mesh DNS server. |
Package node contains the webmesh node service.
|
Package node contains the webmesh node service. |
Package peerdiscovery contains the webmesh PeerDiscovery API service.
|
Package peerdiscovery contains the webmesh PeerDiscovery API service. |
Package rbac contains utilities for evaluating requests against roles.
|
Package rbac contains utilities for evaluating requests against roles. |
Package turn contains the STUN/TURN server.
|
Package turn contains the STUN/TURN server. |
Package webrtc contains the webmesh WebRTC service.
|
Package webrtc contains the webmesh WebRTC service. |