in pkg/controller/route/route_controller.go [162:217]
func (r *ReconcileRoute) syncCloudRoute(ctx context.Context, node *corev1.Node) error {
if !r.configRoutes {
return nil
}
if helper.HasExcludeLabel(node) {
klog.Infof("node %s has exclude label, skip creating route", node.Name)
return nil
}
readyCondition, ok := helper.FindCondition(node.Status.Conditions, corev1.NodeReady)
if ok && readyCondition.Status == corev1.ConditionUnknown {
klog.Infof("node %s is in unknown status, skip creating route", node.Name)
return nil
}
prvdId := node.Spec.ProviderID
if prvdId == "" {
klog.Warningf("node %s provider id is not exist, skip creating route", node.Name)
return nil
}
_, ipv4RouteCidr, err := getIPv4RouteForNode(node)
if err != nil || ipv4RouteCidr == "" {
klog.Warningf("node %s parse podCIDR %s error, skip creating route", node.Name, node.Spec.PodCIDR)
if err1 := r.updateNetworkingCondition(ctx, node, false); err1 != nil {
klog.Errorf("route, update network condition error: %v", err1)
}
return err
}
tables, err := getRouteTables(ctx, r.cloud)
if err != nil {
return err
}
var tablesErr []error
for _, table := range tables {
if node.DeletionTimestamp == nil {
tablesErr = append(tablesErr, r.addRouteForNode(ctx, table, ipv4RouteCidr, prvdId, node, nil))
}
}
if utilerrors.NewAggregate(tablesErr) != nil {
err := r.updateNetworkingCondition(ctx, node, false)
if err != nil {
klog.Errorf("update network condition for node %s, error: %v", node.Name, err.Error())
}
return utilerrors.NewAggregate(tablesErr)
} else {
networkCondition, ok := helper.FindCondition(node.Status.Conditions, corev1.NodeNetworkUnavailable)
if ok && networkCondition.Status == corev1.ConditionFalse {
// Update condition only if it doesn't reflect the current state.
return nil
}
return r.updateNetworkingCondition(ctx, node, true)
}
}