in pkg/skoop/plugin/flannel.go [323:393]
func (r *flannelRoute) getDstNodeInfo(nodeName string) (*flannelNodeInfo, error) {
if info, ok := r.nodeInfoCache[nodeName]; ok {
return info, nil
}
node, err := r.ipCache.GetNodeFromName(nodeName)
if err != nil {
return nil, err
}
if node == nil {
return nil, fmt.Errorf("node %s not found in k8s nodes", nodeName)
}
ip, cidr, err := net.ParseCIDR(node.Spec.PodCIDR)
if err != nil {
return nil, err
}
nextNodeIP := node.Annotations["flannel.alpha.coreos.com/public-ip"]
if nextNodeIP == "" {
return nil, fmt.Errorf("node %s does not have flannel public-ip annotation", nodeName)
}
backendTypeAnnotation, ok := node.Annotations["flannel.alpha.coreos.com/backend-type"]
if !ok {
return nil, fmt.Errorf("node %s does not have flannel backend-type annotation", nodeName)
}
var backendType FlannelBackendType
var dev *netstack.Interface
var vtep net.IP
if strings.EqualFold(backendTypeAnnotation, string(FlannelBackendTypeVxlan)) {
vtep = ip
dev = &netstack.Interface{
Name: flannelVxlanInterface,
MTU: 1450,
Driver: "vxlan",
}
backendType = FlannelBackendTypeVxlan
} else if strings.EqualFold(backendTypeAnnotation, string(FlannelBackendTypeHostGW)) {
vtep = net.ParseIP(nextNodeIP)
backendType = FlannelBackendTypeHostGW
} else {
backendType = r.cniMode
}
if dev == nil {
dev = &netstack.Interface{
Name: r.iface,
}
}
route := assertions.RouteAssertion{}
if vtep != nil && !vtep.IsUnspecified() {
route.Gw = &vtep
}
if dev != nil {
route.Dev = &dev.Name
}
info := &flannelNodeInfo{
Vtep: vtep,
CIDR: cidr,
BackendType: backendType,
NodeIP: net.ParseIP(nextNodeIP),
Dev: dev,
Route: route,
}
r.nodeInfoCache[nodeName] = info
return info, nil
}