MCPcopy
hub / github.com/submariner-io/submariner

github.com/submariner-io/submariner @v0.25.0-m0 sqlite

repository ↗ · DeepWiki ↗ · release v0.25.0-m0 ↗
2,878 symbols 9,301 edges 322 files 779 documented · 27%
README

Submariner

CII Best Practices Release Images Periodic Flake Finder

Submariner is a tool built to connect overlay networks of different Kubernetes clusters. Submariner is designed to be network plugin (CNI) agnostic and supports both encrypted and non-encrypted tunnels between the connected clusters.

Note that Submariner is in an early stage, and while we welcome usage and experimentation, it is quite possible that you could run into bugs.

Submariner is a Cloud Native Computing Foundation sandbox project.

Architecture

See the Architecture section of Submariner's website.

Network Path

The network path of Submariner varies depending on the origin/destination of the IP traffic. In all cases, traffic between two clusters will transit between the leader elected (in each cluster) gateway nodes, through the configured cable driver.

When the source Pod is on a worker node that is not the elected gateway node, the traffic destined for the remote cluster will transit through the submariner VXLAN tunnel (vx-submariner) to the local cluster gateway node. On the gateway node, traffic is forwarded to the remote cluster over the configured tunnel. Once the traffic reaches the destination gateway node, it is routed in one of two ways, depending on the destination CIDR. If the destination CIDR is a Pod network, the traffic is routed via CNI-programmed network. If the destination CIDR is a Service network, then traffic is routed through the facility configured via kube-proxy on the destination gateway node.

Prerequisites

See the Prerequisites docs on Submariner's website.

Installation

Submariner is always deployed using a Go-based Kubernetes custom controller, called an Operator, that provides API-based installation and management. Deployment tools like the subctl command line utility and Helm charts wrap the Operator. The recommended deployment method is subctl, as it is currently the default in CI and provides diagnostic features.

See the Deplyment docs on Submariner's website.

Installation using subctl

Submariner provides the subctl CLI utility to simplify the deployment and maintenance of Submariner across your clusters.

See the subctl Deployment docs on Submariner's website.

Installation using Helm

See the Helm Deployment docs on Submariner's website.

Validate Submariner is Working

See the subctl verify docs and Automated Troubleshooting docs on Submariner's website.

Building and Testing

See the Building and Testing docs on Submariner's website.

Known Issues

See the Known Issues docs on Submariner's website.

Contributing

See the Development section of Submariner's website.

Extension points exported contracts — how you extend this code

GenericInformer (Interface)
GenericInformer is type of SharedIndexInformer which will locate and delegate to other sharedInformers based on type [10 …
pkg/client/informers/externalversions/generic.go
Engine (Interface)
Engine represents an implementation of some remote connectivity mechanism, such as a VPN gateway. An Engine cooperates w [2 …
pkg/cableengine/cableengine.go
NamedSet (Interface)
(no doc) [3 implementers]
pkg/packetfilter/packetfilter.go
TransitSwitchIPGetter (Interface)
(no doc) [3 implementers]
pkg/routeagent_driver/handlers/ovn/transit_switch_ip.go
NodeHandler (Interface)
(no doc) [3 implementers]
pkg/event/handler.go
Driver (Interface)
Driver is used by the ipsec engine to actually connect the tunnels.
pkg/cable/driver.go
Interface (Interface)
Interface is an injectable interface for running ipset commands. Implementations must be goroutine-safe.
pkg/ipset/ipset.go
Basic (Interface)
(no doc) [2 implementers]
pkg/netlink/netlink.go

Core symbols most depended-on inside this repo

SubmarinerV1
called by 77
pkg/client/clientset/versioned/clientset.go
Resource
called by 70
pkg/endpoint/local_endpoint.go
Delete
called by 69
pkg/packetfilter/packetfilter.go
String
called by 64
pkg/ipset/ipset.go
GetPrivateIP
called by 53
pkg/apis/submariner.io/v1/endpoint.go
String
called by 45
pkg/cable/libreswan/preferred_server.go
WithName
called by 44
pkg/client/applyconfiguration/submariner.io/v1/gateway.go
GetName
called by 44
pkg/cable/driver.go

Shape

Method 1,810
Function 638
Struct 285
Interface 104
TypeAlias 28
FuncType 13

Languages

Go100%

Modules by API surface

pkg/apis/submariner.io/v1/zz_generated.deepcopy.go80 symbols
pkg/netlink/netlink.go73 symbols
pkg/natdiscovery/proto/natdiscovery.pb.go68 symbols
pkg/globalnet/controllers/controllers_suite_test.go64 symbols
pkg/netlink/fake/netlink.go61 symbols
pkg/packetfilter/packetfilter.go53 symbols
pkg/event/handler.go46 symbols
pkg/routeagent_driver/handlers/ovn/fake/ovsdb_client.go43 symbols
pkg/packetfilter/fake/packetfilter.go39 symbols
pkg/ipset/ipset.go39 symbols
pkg/apis/submariner.io/v1/types.go38 symbols
pkg/globalnet/controllers/packetfilter/iface.go37 symbols

Dependencies from manifests, versioned

cel.dev/exprv0.25.1 · 1×
github.com/Masterminds/semver/v3v3.4.0 · 1×
github.com/beorn7/perksv1.0.1 · 1×
github.com/cenkalti/hubv1.0.1 · 1×
github.com/cenkalti/rpc2v0.0.0-2021060422362 · 1×
github.com/cert-manager/go-pkcs12v0.0.0-2025121807341 · 1×
github.com/cespare/xxhash/v2v2.3.0 · 1×
github.com/coreos/go-iptablesv0.8.0 · 1×
github.com/cpuguy83/go-md2man/v2v2.0.6 · 1×
github.com/davecgh/go-spewv1.1.2-0.20180830191 · 1×

For agents

$ claude mcp add submariner \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact