func (master *OsdnMaster) validateNetworkConfig() error { hostIPNets, _, err := netutils.GetHostIPNetworks([]string{TUN}) if err != nil { return err } ni := master.networkInfo errList := []error{} // Ensure cluster and service network don't overlap with host networks for _, ipNet := range hostIPNets { if ipNet.Contains(ni.ClusterNetwork.IP) { errList = append(errList, fmt.Errorf("Error: Cluster IP: %s conflicts with host network: %s", ni.ClusterNetwork.IP.String(), ipNet.String())) } if ni.ClusterNetwork.Contains(ipNet.IP) { errList = append(errList, fmt.Errorf("Error: Host network with IP: %s conflicts with cluster network: %s", ipNet.IP.String(), ni.ClusterNetwork.String())) } if ipNet.Contains(ni.ServiceNetwork.IP) { errList = append(errList, fmt.Errorf("Error: Service IP: %s conflicts with host network: %s", ni.ServiceNetwork.String(), ipNet.String())) } if ni.ServiceNetwork.Contains(ipNet.IP) { errList = append(errList, fmt.Errorf("Error: Host network with IP: %s conflicts with service network: %s", ipNet.IP.String(), ni.ServiceNetwork.String())) } } // Ensure each host subnet is within the cluster network subnets, err := master.osClient.HostSubnets().List(kapi.ListOptions{}) if err != nil { return fmt.Errorf("Error in initializing/fetching subnets: %v", err) } for _, sub := range subnets.Items { subnetIP, _, _ := net.ParseCIDR(sub.Subnet) if subnetIP == nil { errList = append(errList, fmt.Errorf("Failed to parse network address: %s", sub.Subnet)) continue } if !ni.ClusterNetwork.Contains(subnetIP) { errList = append(errList, fmt.Errorf("Error: Existing node subnet: %s is not part of cluster network: %s", sub.Subnet, ni.ClusterNetwork.String())) } } // Ensure each service is within the services network services, err := master.kClient.Core().Services(kapi.NamespaceAll).List(kapi.ListOptions{}) if err != nil { return err } for _, svc := range services.Items { if !ni.ServiceNetwork.Contains(net.ParseIP(svc.Spec.ClusterIP)) { errList = append(errList, fmt.Errorf("Error: Existing service with IP: %s is not part of service network: %s", svc.Spec.ClusterIP, ni.ServiceNetwork.String())) } } return kerrors.NewAggregate(errList) }
func GetLocalNode(kubeClient *kclient.Client) (string, string, error) { nodeList, err := kubeClient.Nodes().List(kapi.ListOptions{}) if err != nil { return "", "", err } _, hostIPs, err := netutils.GetHostIPNetworks(nil) if err != nil { return "", "", err } for _, node := range nodeList.Items { if len(node.Status.Addresses) == 0 { continue } for _, ip := range hostIPs { for _, addr := range node.Status.Addresses { if addr.Type == kapi.NodeInternalIP && ip.String() == addr.Address { return node.Name, addr.Address, nil } } } } return "", "", fmt.Errorf("unable to find local node IP") }