Documentation
¶
Overview ¶
Package vmconf defines an interface for converting particular CNI invocation results to networking configuration usable by a VM. It expects the CNI result to have the following properties:
- The results should contain an interface for a tap device, which will be used as the VM's tap device.
- The results should contain an interface with the same name as the tap device but with sandbox ID set to the containerID provided during CNI invocation. This should be a "pseudo-interface", not one that has actually been created. It represents the configuration that should be applied to the VM internally. The CNI "containerID" is, in this case, used more as a "vmID" to represent the VM's internal network interface.
- If the CNI results specify an IP associated with this interface, that IP should be used to statically configure the VM's internal network interface.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type StaticNetworkConf ¶
type StaticNetworkConf struct {
// TapName is the name of the tap device that the VM should use as its
// network interface
TapName string
// NetNSPath is the path to the bind-mounted network namespace in which the VM's
// tap device was created and thus where the VM should execute.
NetNSPath string
// VMIfName (optional) is interface name to configure. If left blank, config
// is applied to the first (default) interface.
VMIfName string
// VMMacAddr is the mac address that callers should configure their VM to use internally.
VMMacAddr string
// VMMTU is the MTU that callers should configure their VM to use internally.
VMMTU int
// VMIPConfig is the ip configuration that callers should configure their VM's internal
// primary interface to use.
VMIPConfig *current.IPConfig
// VMRoutes are the routes that callers should configure their VM's internal route table
// to have
VMRoutes []*types.Route
// VMNameservers are the nameservers that callers should configure their VM to use internally
VMNameservers []string
// VMDomain is the resolver domain that callers should configure VM to use internally.
VMDomain string
// VMSearchDomans are the resolver search domains that callers should configure their VM to
// use internally
VMSearchDomains []string
// VMResolverOptions are the resolve options that callers should configure their VM to use
// internally
VMResolverOptions []string
}
StaticNetworkConf holds the configuration needed to configure a VM's networking stack. It is generally parsed from a CNI result object via the StaticNetworkConfFrom function.
Fields beginning with "VM" are references to entities that need to be setup to exist *within* the VM once the VM is started.
func StaticNetworkConfFrom ¶
func StaticNetworkConfFrom(result types.Result, containerID string) (*StaticNetworkConf, error)
StaticNetworkConfFrom takes the result of a CNI invocation that conforms to the specification in this package's docstring and converts it to a StaticNetworkConf object that the caller can use to configure their VM with.
func (StaticNetworkConf) IPBootParam ¶
func (c StaticNetworkConf) IPBootParam() string
IPBootParam provides a string that can be used as the argument to "ip=" in a Linux kernel boot parameters in order to boot a machine with network settings matching those in a StaticNetworkConf object.
See "ip=" section of kernel docs here for more details: https://www.kernel.org/doc/Documentation/filesystems/nfs/nfsroot.txt
Due to the limitation of "ip=", not all configuration specified in StaticNetworkConf can be applied automatically. In particular:
- The MacAddr and MTU cannot be applied
- The only routes created will match what's specified in VMIPConfig; VMRoutes will be ignored.
- Only up to two namesevers can be supplied. If VMNameservers is has more than 2 entries, only the first two in the slice will be applied in the VM.
- VMDomain, VMSearchDomains and VMResolverOptions will be ignored
- Nameserver settings are also only set in /proc/net/pnp. Most applications will thus require /etc/resolv.conf to be a symlink to /proc/net/pnp in order to resolve names as expected.