Architecture
This section explains key components, data structures and relationships between them.
Key components
Provider
Abstraction of cloud provider, responsible for detecting network type and creating Network
.
Network
Cloud-specific container network. A Network
should configure all resources that the diagnosis progress needs, including Plugin
, Diagnostor
, InfraShim
, etc.
Diagnostor
Implementation of the diagnosis algorithm. It generates the initial links and nodes on source NetNode
by executing Send
action, and continuously generates new links and nodes by executing Receive
action on later added NetNode
, until the entire graph has been constructed.
Plugin
Network plugin(flannel, calico, etc.). It creates the actual NetNode
from the network config and return NetNodeAction
.
NetNodeManager
Create and cache NetNodeAction
. It collects Kubernetes pod/node netstack info from CollectorManager
, and create NetNodeAction
from Plugin
.
CollectorManager
Manage collect tasks, which collect netstack info of Kubernetes pod/nodes.
IPCache
Cache major Kubernetes objects used by diagnosis, to prevent redundant access to the API Server.
NetNodeAction
An interface represents the network action of a NetNode
. It should be implemented by any NetNode
type.
InfraShim
Assertions of infra resources. Should be implemented by cloud providers.
service.Processor
The component stands for a service processor (like kube-proxy
). It gets the backends of a service, and check its configuration in from netstack info.
(Package)assertions
Assertion utilities for diagnosis. Including NetstackAssertion
and KubernetesAssertion
.
(Package)netstack
Components and utilities of the Linux netstack. Including Router
, Netfilter
, IPTables
, etc.
Key structures
Context
type Context struct {
Ctx *sync.Map
}
Context
is used to store runtime configurations. It is responsible for binding flags for modules and providing interfaces for registration.
Endpoint
type Endpoint struct {
IP string
Type EndpointType
Port uint16
}
Endpoint for the network layer, including IP
, Port
and Type
.
Packet
type Packet struct {
Src net.IP
Sport uint16
Dst net.IP
Dport uint16
Protocol Protocol
Encap *Packet
Mark uint32
}
A data packet.
Encap
: If the packet is an encapsuled packet (such as anIPIP
packet), the real packet is in this field.Mark
: Used in router and iptables simulation.
NetNode
type NetNode struct {
Type NetNodeType
ID string
Actions map[*Link]*Action
Suspicions []Suspicion
initiative *Action
}
Node in the network graph. It can be Pod
or Node
in Kubernetes, or can also be a network resources on the cloud. NetNode
implements NetNodeAction
for handle network traffic, and Assertion
for storing assertions.
Transmission
type Transmission struct {
NextHop Hop
Link *Link
}
A transmit operation created by Send()
or Receive()
action of a NetNode
. It contains NextHop
pointing to the next NetNode
, and Link
to describe the transmission info.
Hop
type Hop struct {
Type NetNodeType
ID string
}
Information for a hop, used to find a NetNode
.
Link
type Link struct {
Type LinkType
Source NetNodeAction
Destination NetNodeAction
Packet *Packet
SourceAttribute LinkAttribute
DestinationAttribute LinkAttribute
Level int // for print
}
type LinkAttribute interface {
GetAttrs() map[string]string
}
The link between two nodes.
Type
: Containsexternal
,vpc
,veth
,ipvlan
,local
, and more.SourceAttribute
&DestinationAttribute
: The key-value attributes of this link on source and destination nodes.
k8s.Pod
type PodMeta struct {
Namespace string
PodName string
NodeName string
HostNetwork bool
}
type Pod struct {
model.NetNode
netstack.NetNS
PodMeta
}
Information for a Pod of Kubernetes. Includes Pod's metadata and netstack info.
k8s.NodeInfo
type NodeInfo struct {
netstack.NetNS
SubNetNSInfo []netstack.NetNSInfo
NodeMeta
}
type NodeNetworkStackDump struct {
Pods []PodNetInfo `json:"pods"`
Netns []netstack.NetNSInfo `json:"netns"`
}
type NodeMeta struct {
NodeName string
}
Information for a Node of Kubernetes. Includes Node's metadata and netstack info of node and pods on it.
Suspicion
type Suspicion struct {
Level SuspicionLevel
Message string
}
The problem occurred on a NetNode
.
Level
: Severity of the problem. ContainsInfo
,Warning
,Critical
andFatal
.Message
: Problem description.