Documentation
¶
Overview ¶
Package eni implements AWS ENI allocation logic
Index ¶
- func StartENIGarbageCollector(ctx context.Context, logger *slog.Logger, api EC2API, ...)
- type EC2API
- type GarbageCollectionParams
- type InstancesManager
- func (m *InstancesManager) AddIPsToENI(instanceID string, eniID string, ips []string)
- func (m *InstancesManager) CreateNode(obj *v2.CiliumNode, n *ipam.Node) ipam.NodeOperations
- func (m *InstancesManager) DeleteInstance(instanceID string)
- func (m *InstancesManager) FindSecurityGroupByTags(vpcID string, required ipamTypes.Tags) []*types.SecurityGroup
- func (m *InstancesManager) FindSubnetByIDs(vpcID, availabilityZone string, subnetIDs []string) (bestSubnet *ipamTypes.Subnet)
- func (m *InstancesManager) FindSubnetByTags(vpcID, availabilityZone string, required ipamTypes.Tags) (bestSubnet *ipamTypes.Subnet)
- func (m *InstancesManager) ForeachInstance(instanceID string, fn ipamTypes.InterfaceIterator)
- func (m *InstancesManager) GetPoolQuota() ipamTypes.PoolQuotaMap
- func (m *InstancesManager) GetSubnet(subnetID string) *ipamTypes.Subnet
- func (m *InstancesManager) GetSubnets(ctx context.Context) ipamTypes.SubnetMap
- func (m *InstancesManager) HasInstance(instanceID string) bool
- func (m *InstancesManager) InstanceSync(ctx context.Context, instanceID string) time.Time
- func (m *InstancesManager) RemoveIPsFromENI(instanceID string, eniID string, ips []string)
- func (m *InstancesManager) Resync(ctx context.Context) time.Time
- func (m *InstancesManager) UpdateENI(instanceID string, eni *eniTypes.ENI)
- type MetadataAPI
- type Node
- func (n *Node) AllocateIPs(ctx context.Context, a *ipam.AllocationAction) error
- func (n *Node) AllocateStaticIP(ctx context.Context, staticIPTags ipamTypes.Tags) (string, error)
- func (n *Node) CreateInterface(ctx context.Context, allocation *ipam.AllocationAction, scopedLog *slog.Logger) (int, string, error)
- func (n *Node) GetMaximumAllocatableIPv4() int
- func (n *Node) GetMinimumAllocatableIPv4() int
- func (n *Node) IsPrefixDelegated() bool
- func (n *Node) PopulateStatusFields(k8sObj *v2.CiliumNode)
- func (n *Node) PrepareIPAllocation(scopedLog *slog.Logger) (a *ipam.AllocationAction, err error)
- func (n *Node) PrepareIPRelease(excessIPs int, scopedLog *slog.Logger) *ipam.ReleaseAction
- func (n *Node) ReleaseIPPrefixes(ctx context.Context, r *ipam.ReleaseAction) error
- func (n *Node) ReleaseIPs(ctx context.Context, r *ipam.ReleaseAction) error
- func (n *Node) ResyncInterfacesAndIPs(ctx context.Context, scopedLog *slog.Logger) (available ipamTypes.AllocationMap, stats stats.InterfaceStats, err error)
- func (n *Node) UpdatedNode(obj *v2.CiliumNode)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type EC2API ¶
type EC2API interface {
GetInstance(ctx context.Context, vpcs ipamTypes.VirtualNetworkMap, subnets ipamTypes.SubnetMap, instanceID string) (*ipamTypes.Instance, error)
GetInstances(ctx context.Context, vpcs ipamTypes.VirtualNetworkMap, subnets ipamTypes.SubnetMap) (*ipamTypes.InstanceMap, error)
GetSubnets(ctx context.Context, vpcID string) (ipamTypes.SubnetMap, error)
GetVpcs(ctx context.Context, vpcID string) (ipamTypes.VirtualNetworkMap, error)
GetRouteTables(ctx context.Context, vpcID string) (ipamTypes.RouteTableMap, error)
GetSecurityGroups(ctx context.Context, vpcID string) (types.SecurityGroupMap, error)
GetDetachedNetworkInterfaces(ctx context.Context, tags ipamTypes.Tags, maxResults int32) ([]string, error)
CreateNetworkInterface(ctx context.Context, toAllocate int32, subnetID, desc string, groups []string, allocatePrefixes bool) (string, *eniTypes.ENI, error)
AttachNetworkInterface(ctx context.Context, index int32, instanceID, eniID string) (string, error)
DeleteNetworkInterface(ctx context.Context, eniID string) error
ModifyNetworkInterface(ctx context.Context, eniID, attachmentID string, deleteOnTermination bool) error
AssignPrivateIpAddresses(ctx context.Context, eniID string, addresses int32) ([]string, error)
UnassignPrivateIpAddresses(ctx context.Context, eniID string, addresses []string) error
AssignENIPrefixes(ctx context.Context, eniID string, prefixes int32) error
UnassignENIPrefixes(ctx context.Context, eniID string, prefixes []string) error
GetInstanceTypes(context.Context) ([]ec2_types.InstanceTypeInfo, error)
AssociateEIP(ctx context.Context, eniID string, eipTags ipamTypes.Tags) (string, error)
}
EC2API is the API surface used of the EC2 API
type GarbageCollectionParams ¶
type GarbageCollectionParams struct {
// RunInterval is both the GC interval and also the minimum amount of time
// an ENI has to be available before it is garbage collected
RunInterval time.Duration
// MaxPerInterval is the maximum number of ENIs which are deleted in a
// single interval
MaxPerInterval int32
// ENITags is used to only garbage collect ENIs with this set of tags
ENITags types.Tags
}
type InstancesManager ¶
type InstancesManager struct {
// contains filtered or unexported fields
}
InstancesManager maintains the list of instances. It must be kept up to date by calling resync() regularly.
func NewInstancesManager ¶
func NewInstancesManager(ctx context.Context, logger *slog.Logger, ec2api EC2API, metadataapi MetadataAPI) (*InstancesManager, error)
NewInstancesManager returns a new instances manager
func (*InstancesManager) AddIPsToENI ¶ added in v1.17.2
func (m *InstancesManager) AddIPsToENI(instanceID string, eniID string, ips []string)
func (*InstancesManager) CreateNode ¶
func (m *InstancesManager) CreateNode(obj *v2.CiliumNode, n *ipam.Node) ipam.NodeOperations
CreateNode is called on discovery of a new node and returns the ENI node allocation implementation for the new node
func (*InstancesManager) DeleteInstance ¶
func (m *InstancesManager) DeleteInstance(instanceID string)
DeleteInstance delete instance from m.instances
func (*InstancesManager) FindSecurityGroupByTags ¶
func (m *InstancesManager) FindSecurityGroupByTags(vpcID string, required ipamTypes.Tags) []*types.SecurityGroup
FindSecurityGroupByTags returns the security groups matching VPC ID and all required tags
The returned security groups slice is immutable so it can be safely accessed
func (*InstancesManager) FindSubnetByIDs ¶
func (m *InstancesManager) FindSubnetByIDs(vpcID, availabilityZone string, subnetIDs []string) (bestSubnet *ipamTypes.Subnet)
FindSubnetByIDs returns the subnet with the most addresses matching VPC ID, availability zone within a provided list of subnet ids
The returned subnet is immutable so it can be safely accessed
func (*InstancesManager) FindSubnetByTags ¶
func (m *InstancesManager) FindSubnetByTags(vpcID, availabilityZone string, required ipamTypes.Tags) (bestSubnet *ipamTypes.Subnet)
FindSubnetByTags returns the subnet with the most addresses matching VPC ID, availability zone and all required tags
The returned subnet is immutable so it can be safely accessed
func (*InstancesManager) ForeachInstance ¶
func (m *InstancesManager) ForeachInstance(instanceID string, fn ipamTypes.InterfaceIterator)
ForeachInstance will iterate over each interface for a particular instance inside `instances` and call `fn`. This function is read-locked for the entire execution.
func (*InstancesManager) GetPoolQuota ¶
func (m *InstancesManager) GetPoolQuota() ipamTypes.PoolQuotaMap
GetPoolQuota returns the number of available IPs in all IP pools
func (*InstancesManager) GetSubnet ¶
func (m *InstancesManager) GetSubnet(subnetID string) *ipamTypes.Subnet
GetSubnet returns the subnet by subnet ID
The returned subnet is immutable so it can be safely accessed
func (*InstancesManager) GetSubnets ¶
func (m *InstancesManager) GetSubnets(ctx context.Context) ipamTypes.SubnetMap
GetSubnets returns all the tracked subnets
The returned subnetMap is immutable so it can be safely accessed
func (*InstancesManager) HasInstance ¶
func (m *InstancesManager) HasInstance(instanceID string) bool
HasInstance returns whether the instance is in instances
func (*InstancesManager) InstanceSync ¶
func (*InstancesManager) RemoveIPsFromENI ¶ added in v1.17.2
func (m *InstancesManager) RemoveIPsFromENI(instanceID string, eniID string, ips []string)
type MetadataAPI ¶ added in v1.19.0
type MetadataAPI interface {
GetInstanceMetadata(ctx context.Context) (metadata.MetaDataInfo, error)
}
type Node ¶
type Node struct {
// contains filtered or unexported fields
}
Node represents a Kubernetes node running Cilium with an associated CiliumNode custom resource
func NewNode ¶
func NewNode(node *ipam.Node, k8sObj *v2.CiliumNode, manager *InstancesManager) *Node
NewNode returns a new Node
func (*Node) AllocateIPs ¶
AllocateIPs performs the ENI allocation operation
func (*Node) AllocateStaticIP ¶ added in v1.17.0
func (*Node) CreateInterface ¶
func (n *Node) CreateInterface(ctx context.Context, allocation *ipam.AllocationAction, scopedLog *slog.Logger) (int, string, error)
CreateInterface creates an additional interface with the instance and attaches it to the instance as specified by the CiliumNode. neededAddresses of secondary IPs are assigned to the interface up to the maximum number of addresses as allowed by the instance.
func (*Node) GetMaximumAllocatableIPv4 ¶
GetMaximumAllocatableIPv4 returns the maximum amount of IPv4 addresses that can be allocated to the instance
func (*Node) GetMinimumAllocatableIPv4 ¶
GetMinimumAllocatableIPv4 returns the minimum amount of IPv4 addresses that must be allocated to the instance.
func (*Node) IsPrefixDelegated ¶
IsPrefixDelegated indicates whether prefix delegation can be enabled on a node. Currently, mixed usage of secondary IPs and prefixes is not supported. n.mutex read lock must be held before calling this method.
func (*Node) PopulateStatusFields ¶
func (n *Node) PopulateStatusFields(k8sObj *v2.CiliumNode)
PopulateStatusFields fills in the status field of the CiliumNode custom resource with ENI specific information
func (*Node) PrepareIPAllocation ¶
PrepareIPAllocation returns the number of ENI IPs and interfaces that can be allocated/created.
func (*Node) PrepareIPRelease ¶
PrepareIPRelease prepares the release of ENI IPs.
func (*Node) ReleaseIPPrefixes ¶ added in v1.19.0
ReleaseIPPrefixes performs the ENI IPPrefixes release operation
func (*Node) ReleaseIPs ¶
ReleaseIPs performs the ENI IP release operation
func (*Node) ResyncInterfacesAndIPs ¶
func (n *Node) ResyncInterfacesAndIPs(ctx context.Context, scopedLog *slog.Logger) ( available ipamTypes.AllocationMap, stats stats.InterfaceStats, err error)
ResyncInterfacesAndIPs is called to retrieve and ENIs and IPs as known to the EC2 API and return them
func (*Node) UpdatedNode ¶
func (n *Node) UpdatedNode(obj *v2.CiliumNode)
UpdatedNode is called when an update to the CiliumNode is received.