Documentation ¶
Overview ¶
Package gostwire provides discovery of topology and configuration of virtual networks in Linux hosts.
Discovery ¶
The Discover function expects a context.Context as well as a so-called “containerizer” implementing the containerizer.Containerizer interface. Gostwire's turtlefinder package offers a suitable implementation, accessible as turtlefinder.New(). This implementation offers automatic detection of container engines without any need for API endpoint configuration. The containerizer needs to be allocated only once and is safe for use in concurrent discoveries.
containerizer := turtlefinder.New() allnetns := gostwire.Discover(req.Context(), containerizer)
For more information about Gostwire's information model, please see the network package.
Linux Capabilities ¶
Please note that the auto-detection of container engines as well as a complete discovery require the calling process and its OS-level threads to possess sufficient capabilities. In particular:
- CAP_SYS_ADMIN
- CAP_SYS_CHROOT
- CAP_SYS_PTRACE
- CAP_DAC_READ_SEARCH
- CAP_DAC_OVERRIDE
Example (Discovery) ¶
enginectx, enginecancel := context.WithCancel(context.Background()) defer enginecancel() containerizer := turtlefinder.New(func() context.Context { return enginectx }) defer containerizer.Close() allnetns := Discover(context.Background(), containerizer, nil) fmt.Printf("%d network stacks found\n", len(allnetns.Netns))
Output:
Index ¶
Examples ¶
Constants ¶
const CaptureEnableHeader = "Enable-Monolith"
CaptureEnableHeader tells the Ghostwire service to serve its SPA user interface with capture button enabled.
const SemVersion = "2.4.0-1-g7c495d8"
SemVersion is the semantic version string of the ghostwire module.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DiscoveryResult ¶
type DiscoveryResult struct { Netns network.NetworkNamespaces // network discovery Lxkns *lxknsdiscover.Result // namespaces, process, and containers discovery Engines []*model.ContainerEngine // discovered container engines, even if without workload }
DiscoveryResult contains the network topology and configuration discovery results, as well as the Linux-kernel namespace, process, and container discovery results.
func Discover ¶
func Discover(ctx context.Context, cizer containerizer.Containerizer, labels map[string]string) DiscoveryResult
Discover returns the discovered network stacks, virtual network topology, and network-related configuration. Labels optionally control certain aspects of "decorating" (that is, enriching) the discovery results for some decorator plugins supporting labels (such as the ieappicon decorator plugin).
Directories ¶
Path | Synopsis |
---|---|
api
|
|
v1
Package v1 implements the Ghostwire v1 REST API discovery JSON results.
|
Package v1 implements the Ghostwire v1 REST API discovery JSON results. |
v2
Package v2 implements the Gostwire v2 API.
|
Package v2 implements the Gostwire v2 API. |
cmd
|
|
gostdump
Package gostdump dumps the results of a discovery as JSON in REST API v1 format.
|
Package gostdump dumps the results of a discovery as JSON in REST API v1 format. |
gostwire
Package gostwire implements the Gostwire service.
|
Package gostwire implements the Gostwire service. |
internal/wsconn
Wraps a server-side websocket connection with its own human-readable unique ID.
|
Wraps a server-side websocket connection with its own human-readable unique ID. |
lsallnifs
Package lsallnifs pretty-prints the network discovery results to stdout.
|
Package lsallnifs pretty-prints the network discovery results to stdout. |
Package decorator defines the plugin interface for Gostwire decorators that post-process the discovered Gostwire information model and add usefully information.
|
Package decorator defines the plugin interface for Gostwire decorators that post-process the discovered Gostwire information model and add usefully information. |
all
Package all pulls in all Gostwire decorators (plugins).
|
Package all pulls in all Gostwire decorators (plugins). |
dockernet
Package dockernet implements a Gostwire decorator that discovers Docker-managed networks and then decorates their corresponding Linux-kernel network interfaces.
|
Package dockernet implements a Gostwire decorator that discovers Docker-managed networks and then decorates their corresponding Linux-kernel network interfaces. |
dockerproxy
Package dockerproxy implements port forwarding detection based on Docker's docker-proxy processes.
|
Package dockerproxy implements port forwarding detection based on Docker's docker-proxy processes. |
ieappicon
Package ieappicon implements a Gostwire decorator for adorning containers belonging to Industrial Edge app composer projects with their app icons.
|
Package ieappicon implements a Gostwire decorator for adorning containers belonging to Industrial Edge app composer projects with their app icons. |
nerdctlnet
Package nerdctlnet implements a Gostwire decorator that discovers nerdctl-managed CNI networks and then decorates their corresponding network interfaces.
|
Package nerdctlnet implements a Gostwire decorator that discovers nerdctl-managed CNI networks and then decorates their corresponding network interfaces. |
podmannet
Package podmannet implements a Gostwire decorator that discovers podman (v4+) managed networks and then decorates their corresponding Linux-kernel network interfaces.
|
Package podmannet implements a Gostwire decorator that discovers podman (v4+) managed networks and then decorates their corresponding Linux-kernel network interfaces. |
internal
|
|
Package metadata defines an extensible metadata mechanism that allows to augment Gostwire discoveries and discovery service results, using plugins.
|
Package metadata defines an extensible metadata mechanism that allows to augment Gostwire discoveries and discovery service results, using plugins. |
all
Package all pulls in all Ghostwire metadata plugins.
|
Package all pulls in all Ghostwire metadata plugins. |
cpus
Package cpus provides a metadata plugin returning information about the CPUs in the system that are currently “online”.
|
Package cpus provides a metadata plugin returning information about the CPUs in the system that are currently “online”. |
engines
Package engines implements a metadata plugin returning information about the container engines for which containers were discovered.
|
Package engines implements a metadata plugin returning information about the container engines for which containers were discovered. |
host
Package host implements a metadata plugin returning information about the host system the discovery was run on.
|
Package host implements a metadata plugin returning information about the host system the discovery was run on. |
iecore
Package iecore implements a metadata plugin that returns information about the Industrial Edge (“core”) runtime container, if present.
|
Package iecore implements a metadata plugin that returns information about the Industrial Edge (“core”) runtime container, if present. |
Package mobydig implements deriving the DNS names of Docker services and containers and then resolving and pinging them, based on the discovered network topology, as well as Docker containers and Docker networks.
|
Package mobydig implements deriving the DNS names of Docker services and containers and then resolving and pinging them, based on the discovered network topology, as well as Docker containers and Docker networks. |
Package network defines Gostwire's virtual network configuration and topology model and implements the discovery.
|
Package network defines Gostwire's virtual network configuration and topology model and implements the discovery. |
portfwd
Package portfwd defines a plugin interface for detecting forwarded ports from nftables.
|
Package portfwd defines a plugin interface for detecting forwarded ports from nftables. |
portfwd/all
Package all pulls in all Gostwire port forwarding detectors (plugins).
|
Package all pulls in all Gostwire port forwarding detectors (plugins). |
portfwd/docker
Package docker implements port forwarding detection for iptables (nft) rules managed by the Docker daemon.
|
Package docker implements port forwarding detection for iptables (nft) rules managed by the Docker daemon. |
portfwd/kubeproxy
Package kubeproxy implements port forwarding detection for iptables (nft) rules managed by Kubernete's kube-proxy.
|
Package kubeproxy implements port forwarding detection for iptables (nft) rules managed by Kubernete's kube-proxy. |
portfwd/nftget
Package nftget help with conveniently retrieving information from nftable expressions.
|
Package nftget help with conveniently retrieving information from nftable expressions. |
test
|
|