diff --git a/pkg/controlplane/watcher.go b/pkg/controlplane/watcher.go index f555699e..e398d57c 100644 --- a/pkg/controlplane/watcher.go +++ b/pkg/controlplane/watcher.go @@ -62,7 +62,7 @@ func Watch(directory string, notifyCh chan<- NotifyMessage) { case <-time.Tick(time.Second * 3): notifyCh <- NotifyMessage{ - Operation: Remove, + Operation: Modify, FilePath: directory, } } diff --git a/pkg/util/cidr.go b/pkg/util/cidr.go index 68ac3fc0..1d6c3c62 100644 --- a/pkg/util/cidr.go +++ b/pkg/util/cidr.go @@ -17,7 +17,7 @@ import ( // 2) grep cmdline // 3) create svc + cat *.conflist // 4) create svc + get pod ip with svc mask -func GetCIDRElegant(clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error) { +func GetCIDRElegant(clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) (result []*net.IPNet, err1 error) { defer func() { _ = clientset.CoreV1().Pods(namespace).Delete(context.Background(), name, v1.DeleteOptions{GracePeriodSeconds: pointer.Int64(0)}) }() @@ -26,22 +26,23 @@ func GetCIDRElegant(clientset *kubernetes.Clientset, restclient *rest.RESTClient info, err := getCIDRByDumpClusterInfo(clientset) if err == nil { log.Infoln("get cidr from cluster info ok") - return info, nil + result = append(result, info...) } log.Infoln("get cidr from cni...") cni, err := getCIDRFromCNI(clientset, restclient, restconfig, namespace) if err == nil { log.Infoln("get cidr from cni ok") - return cni, nil + result = append(result, cni...) } svc, err := getServiceCIDRByCreateSvc(clientset.CoreV1().Services(namespace)) if err == nil { + result = append(result, svc) fromCNI, err := getPodCIDRFromCNI(clientset, restclient, restconfig, namespace) if err == nil { log.Infoln("get cidr from cni ok") - return []*net.IPNet{fromCNI, svc}, nil + result = append(result, fromCNI...) } } @@ -49,10 +50,13 @@ func GetCIDRElegant(clientset *kubernetes.Clientset, restclient *rest.RESTClient pod, err := getPodCIDRFromPod(clientset, namespace, svc) if err == nil { log.Infoln("get cidr from svc ok") - return pod, nil + result = append(result, pod...) } - return nil, fmt.Errorf("can not get any cidr, please make sure you have prilivage") + if len(result) == 0 { + return nil, fmt.Errorf("can not get any cidr, please make sure you have prilivage") + } + return } // GetCIDRFromResourceUgly diff --git a/pkg/util/getcidr.go b/pkg/util/getcidr.go index 9991a6b1..c5569a27 100644 --- a/pkg/util/getcidr.go +++ b/pkg/util/getcidr.go @@ -26,7 +26,7 @@ import ( ) // get cidr by dump cluster info -func getCIDRByDumpClusterInfo(clientset *kubernetes.Clientset) ([]*net.IPNet, error) { +func getCIDRByDumpClusterInfo(clientset *kubernetes.Clientset) (result []*net.IPNet, err error) { p, err := clientset.CoreV1().Pods("kube-system").List(context.Background(), v1.ListOptions{ FieldSelector: fields.OneTermEqualSelector("status.phase", string(v12.PodRunning)).String(), }) @@ -41,7 +41,6 @@ func getCIDRByDumpClusterInfo(clientset *kubernetes.Clientset) ([]*net.IPNet, er svcCIDR := `service-cluster-ip-range` podCIDR := `cluster-cidr` reader := bufio.NewReader(bytes.NewBufferString(string(marshal))) - pod := sets.NewString() svc := sets.NewString() v4P := regexp.MustCompile(v4) v6P := regexp.MustCompile(v6) @@ -58,24 +57,18 @@ func getCIDRByDumpClusterInfo(clientset *kubernetes.Clientset) ([]*net.IPNet, er if strings.Contains(string(line), podCIDR) { ipv4 := v4P.FindAllString(string(line), -1) ipv6 := v6P.FindAllString(string(line), -1) - pod.Insert(ipv4...).Insert(ipv6...) + svc.Insert(ipv4...).Insert(ipv6...) } } - if pod.Len() != 1 { - return nil, fmt.Errorf("pod cidr range is not 1, real: %d", pod.Len()) + + for _, s := range svc.List() { + _, ipnet, err := net.ParseCIDR(s) + if err != nil { + result = append(result, ipnet) + } } - if svc.Len() != 1 { - return nil, fmt.Errorf("service cidr range is not 1, real: %d", pod.Len()) - } - _, ipnet, err := net.ParseCIDR(pod.List()[0]) - if err != nil { - return nil, err - } - _, ipnet1, err := net.ParseCIDR(svc.List()[0]) - if err != nil { - return nil, err - } - return []*net.IPNet{ipnet, ipnet1}, nil + + return result, nil } func getCIDRFromCNI(clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error) { @@ -93,7 +86,7 @@ func getCIDRFromCNI(clientset *kubernetes.Clientset, restclient *rest.RESTClient } result = parseCIDRFromString(content) - if len(result) != 2 { + if len(result) == 0 { return nil, fmt.Errorf("can not found any cidr") } @@ -120,7 +113,7 @@ func getServiceCIDRByCreateSvc(serviceInterface corev1.ServiceInterface) (*net.I return nil, err } -func getPodCIDRFromCNI(clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) (*net.IPNet, error) { +func getPodCIDRFromCNI(clientset *kubernetes.Clientset, restclient *rest.RESTClient, restconfig *rest.Config, namespace string) ([]*net.IPNet, error) { pod, err := createCIDRPod(clientset, namespace) if err != nil { return nil, err @@ -143,11 +136,8 @@ func getPodCIDRFromCNI(clientset *kubernetes.Clientset, restclient *rest.RESTCli if len(result) == 0 { return nil, fmt.Errorf("can not found any cidr") } - if len(result) != 1 { - return nil, fmt.Errorf("pod cidr range is not 1, real: %d", len(result)) - } - return result[0], nil + return result, nil } const name = "cni-net-dir-kubevpn" diff --git a/pkg/util/util.go b/pkg/util/util.go index 632491d7..ccaa06c2 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -172,7 +172,7 @@ func Shell(clientset *kubernetes.Clientset, restclient *rest.RESTClient, config return "", err } containerName := pod.Spec.Containers[0].Name - stdin, _, stderr := dockerterm.StdStreams() + stdin, _, _ := dockerterm.StdStreams() stdoutBuf := bytes.NewBuffer(nil) stdout := io.MultiWriter(stdoutBuf) @@ -180,7 +180,7 @@ func Shell(clientset *kubernetes.Clientset, restclient *rest.RESTClient, config Namespace: namespace, PodName: podName, ContainerName: containerName, - IOStreams: genericclioptions.IOStreams{In: stdin, Out: stdout, ErrOut: stderr}, + IOStreams: genericclioptions.IOStreams{In: stdin, Out: stdout, ErrOut: nil}, } Executor := &exec.DefaultRemoteExecutor{} // ensure we can recover the terminal while attached diff --git a/pkg/util/util_test.go b/pkg/util/util_test.go index 8204314e..088b722b 100644 --- a/pkg/util/util_test.go +++ b/pkg/util/util_test.go @@ -3,7 +3,6 @@ package util import ( "context" "fmt" - "k8s.io/utils/pointer" "net" "regexp" "testing" @@ -15,6 +14,7 @@ import ( "k8s.io/client-go/kubernetes" "k8s.io/client-go/rest" "k8s.io/kubectl/pkg/cmd/util" + "k8s.io/utils/pointer" ) var (